Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

TPageControl - рождение и убитие [D6, Win2k]


avr555 ©   (2002-09-06 02:51:00) 

Хочу я написать компонент, наследника от 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.

Вопрос: какк правильно совершать подобные манипуляции?


avr555   (2002-09-06 15:51:00) [1]

спасибо.
Заработало.


mimi654867   (2002-09-06 12:48:00) [2]

TRuGraphSQL - это чего? это в смысле TMyClass?

тогда правильнее будет сделать следующее:
type
TMyClass = class(TPageControl)
public
constructorCreate(AOwner:TComponent);override;
private
FPage1: TTabSheet;
protected
procedureSetParent(AParent: TWinControl); override;
end;

implementation

constructorTMyClass.Create(AOwner: TComponent);
begin
inherited;
FPage1 := TTabSheet.Create(Self);
end;

procedureTMyClass.SetParent(AParent: TWinControl);
begin
inherited;
// AParent = nil, когда идет удаление компонента. тут ошибка и возникает
ifAParent <> nil then
FPage1.PageControl := Self;
end;

или так:

constructorTMyClass.Create(AOwner: TComponent);
begin
inherited;
Parent := TWinControl(AOwner);
FPage1 := TTabSheet.Create(Self);
FPage1.PageControl := Self;
end;

тогда SetParent вообще не надо трогать


MBo   (2002-09-06 12:40:00) [3]

зачем же FPage удалять, когда у него Owner есть, он сам и удалит


avr555   (2002-09-06 11:41:00) [4]

constructor TMyClass.Create(AOwner:TComponent);
begin
inherited;
FPage := TTabSheet.Create(self);
end;


Проблемы возникают при уничтожении объекта

Если переопределить destroyи в этом методе уничтожать FPage, то в тот момент, когда я уничтожаю FPage, происходит ошибка "Control has no parent window"


KSergey   (2002-09-06 06:35:00) [5]

Сказать по правде - не видно где проблема. Т.е. вроде как приведенный код не должен бы вызывать проблем. Хотя не приведен кон переопределенного конструктора...
Скоре всего проблема где-то вокруг данного кода, ищите...


Наверх

Титульная страница Поиск, карта сайта Написать письмо