Форум: "Основная";
Текущий архив: 2002.09.19;
Скачать: [xml.tar.bz2];
ВнизTPageControl - рождение и убитие Найти похожие ветки
← →
avr555 (2002-09-06 02:51) [0]Хочу я написать компонент, наследника от TPageControl.
Пишем:
TMyClass = class(TPageControl)
constructor Create(AOwner:TComponent);override;
private
FPage1:TTabSheet;
protected
procedure SetParent(AParent: TWinControl); override;
end;
implementation
procedure TRuGraphSQL.SetParent(AParent: TWinControl);
begin
inherited;
FPage1.PageControl := self;
end;
Во время создания и работы проблем не возникает. Проблемы появляются при закрытии приложения. Выскакивает ошибка Access violation.
Вопрос: какк правильно совершать подобные манипуляции?
← →
KSergey (2002-09-06 06:35) [1]Сказать по правде - не видно где проблема. Т.е. вроде как приведенный код не должен бы вызывать проблем. Хотя не приведен кон переопределенного конструктора...
Скоре всего проблема где-то вокруг данного кода, ищите...
← →
avr555 (2002-09-06 11:41) [2]
constructor TMyClass.Create(AOwner:TComponent);
begin
inherited;
FPage := TTabSheet.Create(self);
end;
Проблемы возникают при уничтожении объекта
Если переопределитьdestroy
и в этом методе уничтожатьFPage
, то в тот момент, когда я уничтожаюFPage
, происходит ошибка "Control has no parent window"
← →
MBo (2002-09-06 12:40) [3]зачем же FPage удалять, когда у него Owner есть, он сам и удалит
← →
mimi654867 (2002-09-06 12:48) [4]TRuGraphSQL - это чего? это в смысле TMyClass?
тогда правильнее будет сделать следующее:
type
TMyClass = class(TPageControl)
public
constructor Create(AOwner:TComponent);override;
private
FPage1: TTabSheet;
protected
procedure SetParent(AParent: TWinControl); override;
end;
implementation
constructor TMyClass.Create(AOwner: TComponent);
begin
inherited;
FPage1 := TTabSheet.Create(Self);
end;
procedure TMyClass.SetParent(AParent: TWinControl);
begin
inherited;
// AParent = nil, когда идет удаление компонента. тут ошибка и возникает
if AParent <> nil then
FPage1.PageControl := Self;
end;
или так:
constructor TMyClass.Create(AOwner: TComponent);
begin
inherited;
Parent := TWinControl(AOwner);
FPage1 := TTabSheet.Create(Self);
FPage1.PageControl := Self;
end;
тогда SetParent вообще не надо трогать
← →
avr555 (2002-09-06 15:51) [5]спасибо.
Заработало.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.09.19;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.445 c