Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.04.04;
Скачать: [xml.tar.bz2];

Вниз

Когда уходит и приходит Handle...   Найти похожие ветки 

 
Mantic0re   (2004-03-19 11:20) [0]

Пишу VCL компонент ..

Как отловить когда Handle уже есть ?
И когда его уже нет ?
А точнее, моменты сразу же после его создания и непосредственно перед его уходом.

AfterConstruction и BeforeDestruction не подходят..

1-й момент я отлавливаю при 1-м вызове PaintWindow, а как отловить 2-й ?


 
Reindeer Moss Eater ©   (2004-03-19 11:22) [1]

Хендл обычно приходит после вызова конструктора
А уходит в деструкторе обычно.


 
MBo ©   (2004-03-19 11:24) [2]

В конструкторе наследника TWinControl окна еще нет, а в CreateWnd уже есть.
DestroyWindowHandle.

З.Ы. окно может пересоздаваться (RecreateWnd)


 
Mantic0re   (2004-03-19 11:26) [3]

Про конструктор и деструктор - нет.
MBo - спасибо, я поспешил сюда вопрос выкладывать..
Сам уже нашел:

procedure CreateHandle; virtual;
procedure DestroyWindowHandle; virtual;

А когда окно может пересоздаваться ?
(Без моего участия, конечно..)


 
Юрий Зотов ©   (2004-03-19 11:26) [4]

Если речь идет о хэндле окна, то создается он в CreateWindowHandle, а уничтожается в DestroyWindowHandle. Заместите эти методы и все отловите. А проверить можно вызовом HadleAllocated.


 
Digitman ©   (2004-03-19 11:29) [5]

посмотри, сколько виртуальных методов на эту тему у TWinControl

   procedure CreateWindowHandle(const Params: TCreateParams); virtual;
   procedure CreateWnd; virtual;
   procedure DestroyWindowHandle; virtual;
   procedure DestroyWnd; virtual;

неужели мало ?!

переопределяй нужные Create/Destroy-методы в своем наследнике - и всех делов !


 
Юрий Зотов ©   (2004-03-19 11:29) [6]

> Mantic0re   (19.03.04 11:26) [3]
> А когда окно может пересоздаваться?

Когда вызывается метод RecreateWnd. Обычно он вызывается, когда изменение какого-то свойства связано с измененим стиля окна.


 
Reindeer Moss Eater ©   (2004-03-19 11:46) [7]

Все вы конечно же правы, но хендл все же появляется в конструкторе, а исчезает в деструкторе.

Значение же в нем содеращееся не всегда равно валидому дескриптору окна. Отсюда: правильно заданный вопрос - половина ответа на него.
Как проверить, что handlе содержит валидный хендл?
Сравнить с каким-то предопределенным значением, например INVALID_HANDLE_VALUE


 
Юрий Зотов ©   (2004-03-19 12:19) [8]

> Reindeer Moss Eater ©   (19.03.04 11:46) [7]

> хендл все же появляется в конструкторе, а исчезает в
> деструкторе.

В конструкторе (еще точнее, в NewInstance) появляется (вместе с самим объектом), а в деструкторе (точнее, в FreeInstance) исчезает (тоже вместе с самим объектом) ПОЛЕ FHandle, а не сам хэндл.

> Как проверить, что handlе содержит валидный хендл?
> Сравнить с каким-то предопределенным значением, например
> INVALID_HANDLE_VALUE

То есть,
if Handle <> INVALID_HANDLE_VALUE then...

Вот так? Если нет, то не могли бы Вы написать пример?

Только сначала загляните в TWinControl - как там объявлено свойство Handle. Дело в том, что есть нюанс, из-за которого Ваш совет не пройдет - любое обращение к свойству Handle даст ПРАВИЛЬНЫЙ хэндл окна.


 
Reindeer Moss Eater ©   (2004-03-19 12:31) [9]

В конструкторе я делаю fHandle := INVALID_HANDLE_VALUE

И что, до создания окна (fHandle = INVALID_HANDLE_VALUE) не вернет мне True?


 
Юрий Зотов ©   (2004-03-19 12:34) [10]

> Reindeer Moss Eater ©   (19.03.04 12:31) [9]

В конструкторе Вы не сможете сделать
FHandle := INVALID_HANDLE_VALUE
из-за того, у Вас нет прямого доступа к приватному полю. А далее по той же Вы не сможете проверить это поле напрямую.


 
Reindeer Moss Eater ©   (2004-03-19 12:37) [11]

Я в исходном вопросе что-то ничего про чью-то приватную секцию не видел.
И про то, от кого наследован новый VCL компонент - тоже


 
Юрий Зотов ©   (2004-03-19 12:47) [12]

> Reindeer Moss Eater ©   (19.03.04 12:37) [11]

В исходном вопросе упоминается PaintWindow. Для понимания сути вопроса этого вполне достаточно.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2004.04.04;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.072 c
1-1079372833
Chcnger
2004-03-15 20:47
2004.04.04
Ошибка при закрытии


3-1078402420
shinus
2004-03-04 15:13
2004.04.04
ADO MS Jet


1-1079390312
Michail Dalakov
2004-03-16 01:38
2004.04.04
MSScriptControl


11-1058794263
IronWit
2003-07-21 17:31
2004.04.04
Как программно создать и удалить combobox


3-1078817075
denmin
2004-03-09 10:24
2004.04.04
Помогите!!!! Задолбался с ADOTable





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский