Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Создание вкладки в дочернем окне из родительского


Автор: chiffa 5.8.2011, 11:37
Добрый день. Делаю следующее: создаю дочернее окно (Form2) в нем по oncreat создаю вкладку:

Код

procedure TFrmShow.AddTab;
var
    mysrlbox: TScrollbox;
    mytab: TTabSheet;
  begin

mytab:=TTabSheet.Create(self);
mytab.PageControl:=FrmShPgCont;
mytab.Caption:='Page '+IntToStr(FrmShPgCont.PageCount) + '   ';
   
  end;



Далее на родительской форме (Form1) есть кнопка которая должна добавлять вкладки на Form2, но это не происходит, а выдает ошибку (обращение к памяти и т.д.), при этом первая вкладка создается нормально. ОТсюдова возникает вопрос: как из родительского окна правильно создать обьект в дочернем?... Заранее благодарен всем за помощь!

Автор: maniaks1 7.8.2011, 08:30
Наверно что то делаеш неправильно. Проблем быть не должно.

Автор: chiffa 8.8.2011, 09:26
Так то работает... а в дочернем окне? (МидиЧайлд...)

Автор: maniaks1 8.8.2011, 20:50
Извиняюсь, не вник в суть. Может так?

Автор: chiffa 9.8.2011, 10:35
Странно что то... Переношу все как у тебя, но ругается на строку   T := TTabSheet.Create(FrmShPgCont);

Правда у меня еще Дочернее окно создается по клику TFrmShow.Create (Application);

Автор: maniaks1 9.8.2011, 10:45
сделай минимальный пример как делаеш, вечером гляну

Автор: chiffa 9.8.2011, 11:29
И создание вкладок идет из другого дочернего окна, может это как влияет...

Автор: chiffa 9.8.2011, 12:18
Выкладываю "пример". Буду крайне признателен за помощь.

Автор: maniaks1 9.8.2011, 21:01
Окно создал... но оно не активное, а активное то, на котором у тебя кнопка и на нём естественно нету PageControl)
В этом случае ActiveMDIChild тебе не помощник.

procedure TForm2.btn1Click(Sender: TObject);
var Form3:TForm3;
begin
  //if open_form = False then TForm3.Create (Application);
  //else
  //TForm3(ActiveMDIChild).NewPage('Íîâàÿ âêëàäêà');
  if open_form then exit;

  Form3:=TForm3.Create(Application);
  Form3.NewPage('Íîâàÿ âêëàäêà');
  Form3:=nil;
  Form3.Free;
end;


Автор: chiffa 10.8.2011, 09:28
А как тогда такое реализовать?.....

Автор: maniaks1 10.8.2011, 13:08
Я же показал как это без ошибок сделать.
Если у тебя форма созда]тся в одном месте, а вкладки из другого, то имеет смысл перебрать все дочерние окна

Например так:

for i:=0 to Form1.MDIChild.....Count-1 do
if TForm3(Form1.MDIChild.....[i]).Caption='Нужная форма' then
TForm3(Form1.MDIChild....[i]).NewPage('Новая вкладка');

Можно также перебирать по tag (при создании присваивать)
Или по имени класса.

Автор: chiffa 11.8.2011, 11:19
Огромное спасибо!!!! То что нужно!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)