Главная страница
    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.039 c
3-1078594297
Nikis
2004-03-06 20:31
2004.04.04
Таблица DOS-кодировки


1-1079499645
artyom
2004-03-17 08:00
2004.04.04
Запуск программы при двойном щелчке по файлу в окне Explorer а


11-1058384008
Dimaxx
2003-07-16 23:33
2004.04.04
OwnerDraw в KOLListView


14-1078624091
Pahan_
2004-03-07 04:48
2004.04.04
Подскажите надежный алгоритм шифрования


14-1078949536
Felix
2004-03-10 23:12
2004.04.04
Как делаются PIPE-LINE ???





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