![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Иконка в трее [D7, WinXP]
-virus- © (2005-08-01 22:02:00)Мастера, нужна ваша помощь.
Я помещаю программу в трей при помощи процедуры:
procedure TForm1.CreateTrayIcon(n: integer; Tip: string);
var
nidata: TNotifyIconData;
begin
with nidata do
begin
cbSize:=SizeOf(TNotifyIconData);
Wnd:=Self.Handle;
uId:=n;
uFlags:=NIF_Icon or NIF_MESSAGE or NIF_TIP;
uCallBackMessage:=WM_MYTRAYNOTIFY;
HIcon:=Form1.Icon.Handle;
szTip:='Áóäèëüíèê';
StrPCopy(szTip,Tip);
end;
Shell_NotifyIcon(NIM_ADD, @nidata);
end;
и убираю при помощи:
procedure TForm1.DeleteTrayIcon(n: integer);
var
nidata: TNotifyIconData;
begin
with nidata do
begin
cbSize:=SizeOf(TNotifyIconData);
Wnd:=Self.Handle;
uId:=n;
end;
Shell_NotifyIcon(NIM_DELETE, @nidata);
end;
Но как сделать, чтобы при нажатии на иконку в трее срабатывало событие, например Form1.Show; ?
И еще, как сделать событие при сворачивании формы?
ааа (2005-08-03 06:52:00) [1]нет, глючит [9]. фигню я написал.
2 модератор - можете удалить
ааа (2005-08-03 05:53:00) [2]> Defunct © (02.08.05 02:27) [3]
> Не удивительно, в uCallbackMessage можно задавать не только
> WM_MYTRAYNOTIFY ;>
тема не раскрыта. :)
nid.uCallbackMessage:=WM_SYSCOMMAND;
nid.uId:=SC_RESTORE;
не пробовал но должно работать.
Fay (2005-08-02 21:27:00) [3]2 Defunct © (02.08.05 21:24) [7]
procedure zzzz(var msg: TMessage);message WM_MYTRAYNOTIFY
годится только в том случае, когда WM_MYTRAYNOTIFY - константа.
Бывает неудобно/неприменимо.
Defunct (2005-08-02 21:24:00) [4]Fay © (02.08.05 18:34) [6]
можно, но я просто дополнил ваш ответ [1]
Fay (2005-08-02 18:34:00) [5]2 Defunct © (02.08.05 2:27) [3]
Можно было просто перекрыть WndProc
-virus- (2005-08-02 13:18:00) [6]Defunct
Спасибо за процедуру.
lookin (2005-08-02 02:43:00) [7]Defunct © (02.08.05 02:27)
Да, только я по выпимшести код забыл привети...
procedure TEQAPbase.EQAPbaseOnMinimize(Sender: TObject);
var EqapIcon: NOTIFYICONDATA;
begin
if EqapSettings.MainOptions.TrayIcon=1 then
with EqapIcon do begin cbSize:=SizeOf(NOTIFYICONDATA);
Wnd:=EQAPbase.Handle; uID:=1; uCallbackMessage:=WM_USER+1;
uFlags:=NIF_MESSAGE or NIF_ICON or NIF_TIP;
hIcon:=Application.Icon.Handle; szTip:=Exec;
Shell_NotifyIcon(NIM_ADD,@EqapIcon); ShowWindow(Handle,SW_HIDE);
ShowWindow(Application.Handle,SW_HIDE); end;
end;
//вот эта вещь нигде у меня не вызывается.....
procedure TEQAPbase.EqapIconClick(var Msg: TMessage);
var EqapIcon: NOTIFYICONDATA;
begin
if Msg.LParam=WM_LBUTTONDOWN then
with EqapIcon do begin cbSize:=SizeOf(NOTIFYICONDATA);
Wnd:=EQAPbase.Handle; uID:=1; uCallbackMessage:=WM_USER+1;
uFlags:=NIF_MESSAGE or NIF_ICON or NIF_TIP;
hIcon:=Application.Icon.Handle; szTip:=Exec;
Shell_NotifyIcon(NIM_DELETE,@EqapIcon);
ShowWindow(Application.Handle,SW_SHOWNORMAL);
SetForegroundWindow(EQAPbase.Handle); end;
end;
Эффектом служит то, что при сворачивании программы, она уползает в трей. Пришелчке на иконку трея программа разворачивается...
Defunct (2005-08-02 02:27:00) [8]lookin © (01.08.05 22:23) [2]
Не удивительно, в uCallbackMessage можно задавать не только WM_MYTRAYNOTIFY ;>
> -virus- ©
TForm1 = class(TForm)
..
procedure zzzz(var msg: TMessage);message WM_MYTRAYNOTIFY
..
end
procedure TForm1.zzz;
begin
if Msg.LParam = WM_LBUTTONDOWN then
begin
if Not Visible Then
begin
Show;
Application.BringToFront
end
else
Hide
end
end;
lookin (2005-08-01 22:23:00) [9]>>Но как сделать, чтобы при нажатии на иконку в трее срабатывало событие,
>>например Form1.Show; ?
как ни смешно это звучит, у меня это реализовано, но вот не понимаю, как... Не могу найти вызова искомой процедуры, а ведь все работает.... Что то мистическое или просто выпимши...
Fay (2005-08-01 22:04:00) [10]2 -virus- © (01.08.05 22:02)
Обработай WM_MYTRAYNOTIFY