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

Вниз

Как получить Hendle Формы ??   Найти похожие ветки 

 
KyRo   (2003-10-28 22:26) [0]

Мне нужно что бы компонент получил Handle окна на который я его
располажил.
Компонент создаю я сам и соответствено не известено названия формы на которою его розместили.

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


 
panov   (2003-10-28 22:27) [1]

MyComponent.Parent.Handle


 
KyRo   (2003-10-28 22:32) [2]

Нет это не подходит ведь компонент я создаю и не чего подобного там нет, а для TPicture я пробовал (Выше перепутал) и тоже не подходит там нет этого .


 
Zacho   (2003-10-28 22:39) [3]


> KyRo © (28.10.03 22:32) [2]

Сам говоришь, что компонент находится на форме. Значит, он потомок от TControl. Значит, у него есть св-во Parent:TWinControl. И значит, есть Parent.Handle


 
KyRo   (2003-10-28 22:44) [4]

Нет он от TComponent.


 
Zacho   (2003-10-28 22:52) [5]


> KyRo © (28.10.03 22:44) [4]

Возможно, подойдет GetParentComponent (а возможно и нет).
Или при создании компонента указывай owner"ом форму, а потом (MyComponent.Owner as TWinControl).Handle


 
KyRo   (2003-10-28 22:57) [6]

Для получения индентификатора я использую вот такой код

hMainWnd:=AllocateHWnd(WndProc);
где WndProc

procedure TTray.WndProc(var Msg: TMessage);
begin
if Msg.Msg=WM_NOTIFYICON then
Msg.Result:=DefWindowProc(hMainWnd, Msg.Msg,
Msg.wParam, Msg.lParam);
end;

Но это чего то не сробатывает.

Короче говоря я делаю компонент работающий с треем
и там для Shell_NotifyIcon(NIM_DELETE,@MyNotifyIconData);
нужно заполнить структуру
NotifyIconData. Может кто знает как это сделать, потому что именно сдесь у меня и возникает эта проблемма.


 
KyRo   (2003-10-28 23:00) [7]


> Или при создании компонента указывай owner"ом форму, а потом
> (MyComponent.Owner as TWinControl).Handle

Объсни это по подробнее. Как указать на форму тем более
что я не знаю ее названия!


 
Юрий Федоров   (2003-10-28 23:32) [8]

Если ты создаешь окно с помощью AllocateHWnd, там нет никакой формы.
На самом деле все не так.
Когда ты кинул компонент на форму, св-во Owner компонента указывает как раз наа нее.
MyComponent.Owner = Form1

Если создаешь в ран - тайм
MyComponent:=TMyComponent.Create(Form1)
то то же самое
MyComponent.Owner = <параметр, переданный в конструктор>

ОБрати внимание, что по умолчанию такой компонент могут кинуть не только на форму, но и на DataModule


 
Юрий Федоров   (2003-10-28 23:48) [9]

А вообще правильный путь такой
1. Компонент не должен быть привязан к конкретной форме с TImage,
иначе тв не сможешь его использовать в других ппроектах, следовательно TIcon (или HICON) нужно держаать прямо в компоненте.
2. В конструктоер проверять ,является ли Owner формой, в противном случае поднимать исключение
3. После получения формы (Owner) подменять ему оконную процедуру, запоминая сссылку на старую, которую вызывать из новой
4. Если отсутствует спортивный интерес по нааписанию компонентов, взять готовый, например из RX


 
KyRo   (2003-10-29 01:44) [10]

С TImage я перепутал я использую TPicture и он у меня находится
в компоненте и заполняется через его свойства.
А остольное попробую.


 
KyRo   (2003-10-29 22:04) [11]

Попробовал я то что вы советовали
получается не соответствие типов Tcomponent и HWND не подходит
это или может я чего не допонял ??


 
Юрий Федоров   (2003-10-30 00:05) [12]

Виидимо не допонял
Приведи свой код


 
KyRo   (2003-10-30 00:12) [13]

constructor Ttray.Create(aowner:Tcomponent);
begin
inherited Create(aowner);
Код конструктора, компонет ран -тайм

и не так hMainWnd:=Ttray.Create(aowner).Owner; вместо Create(aowner);
и не так hMainWnd:=aowner.Owner; не проходит .


 
KyRo   (2003-10-30 00:14) [14]

В принципе я сделал передачу в параметром функции из программы в компанент. Но все же интересео как это сделать.


 
Zacho   (2003-10-30 08:27) [15]


> KyRo © (30.10.03 00:12) [13]

Если ты в design-time бросаешь этот компонент на форму, то Owner и будет этой формой. Если ты создаешь его в run-time - то должен сам передать указатель на нужную тебе форму в конструктор , например: MyTray:=TTray.Create(MyForm);
Потом:
hMainWnd:=(MyTray.Owner as TWInControl).Handle;
Если это нужно в методе самого класса TTray, то просто: hMainWnd:=(Owner as TWinControl).Handle;

Да, не помешало бы еще проверять, что Owner - действительно TWinControl (или TForm, если тебе нужно именно TForm): if Owner is TWinContol then hMainWnd:=TWinControl(Owner).Handle else ..
Или обрабатывать исключение, к-рое произойдет в конструкции Owner as TWinControl если Owner будет не потомком TWinControl"а



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

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

Наверх




Память: 0.48 MB
Время: 0.036 c
1-41459
СержК
2003-10-29 11:02
2003.11.13
DBLookupComboBox


8-41740
marconi
2003-07-15 12:09
2003.11.13
Опять про цвета


3-40866
Term
2003-10-20 16:41
2003.11.13
Как правильно обрабатывать событие OnFilterRecord?


3-40916
tprkv
2003-10-20 09:02
2003.11.13
Где можно почитать про Oracle желательно на русском


1-41529
maxXP
2003-10-28 11:05
2003.11.13
Как удалить файл без подтверждения на удаление?





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