Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.09.19;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.017 c
4-61347
novill
2002-07-26 15:16
2002.09.19
Мастаки! Как отключить заблокировать мышь над компонентом?


3-60930
michael_b
2002-08-27 13:10
2002.09.19
Помогите огранизовать структуру бд.


14-61302
V.exeR
2002-08-22 18:00
2002.09.19
Винт упал и встать не может :(


6-61226
dimushkin
2002-07-13 22:51
2002.09.19
TClientSocket и 3 TServerSocket ?


1-61082
SeregaS
2002-09-07 01:33
2002.09.19
Доступ к файлу - read access only