Текущий архив: 2002.06.06;
Скачать: CL | DM;
Вниз
Abstract Error Найти похожие ветки
← →
proc © (2002-05-23 19:06) [0]Ситуация:
В MDI проге создается форма
procedure TMainForm.Button1Click(Sender: TObject);
begin
FormNew := TFormNew.Create(Self);
CreateTab(FormNew); // Смотри ниже
end;
А так же создается закладка на PageControl
procedure TMainForm.CreateTab (Sender: TObject);
begin
with PageControl1 do
begin
PieceTab := TTabSheet.Create(FormNew);
end;
with PieceTab do
begin
PageControl := PageControl1;
Caption := (Sender as TForm).Caption;
end;
end;
Далее в этой форме есть код при закрытии
procedure TFormNew.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
MainForm.PieceTab.Free; // Удаление закладки на основной форме
end;
Иногда при повторном создании формы вылетает сообщение Abstract Error.
Вопрос: Где я не прав?
← →
Song © (2002-05-23 21:23) [1]А что за TFormNew? Наследник? Приведите описание класса.
← →
Cobalt © (2002-05-24 08:03) [2]>Вопрос: Где я не прав?
Ответ: очень во многих местах. Первая ошибка начинающих работать с MDI - Использование экземпляров форм в модулях,а надо обращаться через MainForm.MDIChildren, ActiveMDIChild, и не надо забывать о приведении типов MainForm.MDIChildren[i] к вашему типу.
При создании динамических компонент, надо продумывать, как вы к ним будете обращаться (особенно в MDI-контексте, ведь у вас несколько форм) - Выбор/поиск дочерней формы->выбор/поиск компонента.
Есть метод создания имен с использованием индексов, т.е. имени дочерней формы присваивается типа "MyForm"+ Inttostr(i);, подобное же и для их компонентов (вложенное типа Owner.Name+"TabControl"+Inttostr(i)(для нескольких компонентов))
← →
jonik pegas © (2002-05-24 08:31) [3]Удивительно что ошибка вылетает иногда:-)
PieceTab у тебя автоматом удалится при TformNew.FormClose поскольку FormNew его владелец (только надо TTabSheet.Create(Sender)) ,Free делать не надо кроме всего прочего при создании нескольких экземпляров формы MainForm.PieceTab будет указывать на один и тот же PieceTab(последний созданный)-когда первый экземпляр мод.формы грохнется второй при грохании (MainForm.pieceTab.free) будет пытатся удалить pieceTab которого уже нет. Я бы перенес например PieceTab в public модальной и скажем его создание
procedure TMainForm.CreateTab (Sender: TObject);
begin
with PageControl1 do
begin
(Sender as TmainForm).PieceTab := TTabSheet.Create(Sender);
end;
with (Sender as TmainForm).PieceTab do
begin
PageControl := PageControl1;
Caption := (Sender as TForm).Caption;
end;
end;
А можно PieceTab создавать в Create FormNew и потом ему присваивать PageControl
Страницы: 1 вся ветка
Текущий архив: 2002.06.06;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.01 c