Форум: "Основная";
Текущий архив: 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