Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.46 MB
Время: 0.009 c
14-61312
Ketmar
2002-08-25 16:30
2002.09.19
FreeReport - оч-чень русская программа! :-))


3-60933
maxim2
2002-08-28 10:05
2002.09.19
Не отображаются русские символы


3-60981
Dimich1978
2002-08-29 10:13
2002.09.19
Такой нердинарный вопрос


4-61356
ACR
2002-07-29 14:27
2002.09.19
синхронизироваться с горизонтальной разверткой ?


14-61275
VZ-KZ
2002-08-20 15:39
2002.09.19
Интересный вопрос!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский