Форум: "Основная";
Текущий архив: 2005.08.21;
Скачать: [xml.tar.bz2];
ВнизИконка в трее Найти похожие ветки
← →
-virus- © (2005-08-01 22:02) [0]Мастера, нужна ваша помощь.
Я помещаю программу в трей при помощи процедуры:
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; ?
И еще, как сделать событие при сворачивании формы?
← →
Fay © (2005-08-01 22:04) [1]2 -virus- © (01.08.05 22:02)
Обработай WM_MYTRAYNOTIFY
← →
lookin © (2005-08-01 22:23) [2]>>Но как сделать, чтобы при нажатии на иконку в трее срабатывало событие,
>>например Form1.Show; ?
как ни смешно это звучит, у меня это реализовано, но вот не понимаю, как... Не могу найти вызова искомой процедуры, а ведь все работает.... Что то мистическое или просто выпимши...
← →
Defunct © (2005-08-02 02:27) [3]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-02 02:43) [4]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;
Эффектом служит то, что при сворачивании программы, она уползает в трей. Пришелчке на иконку трея программа разворачивается...
← →
-virus- © (2005-08-02 13:18) [5]Defunct
Спасибо за процедуру.
← →
Fay © (2005-08-02 18:34) [6]2 Defunct © (02.08.05 2:27) [3]
Можно было просто перекрыть WndProc
← →
Defunct © (2005-08-02 21:24) [7]Fay © (02.08.05 18:34) [6]
можно, но я просто дополнил ваш ответ [1]
← →
Fay © (2005-08-02 21:27) [8]2 Defunct © (02.08.05 21:24) [7]
procedure zzzz(var msg: TMessage);message WM_MYTRAYNOTIFY
годится только в том случае, когда WM_MYTRAYNOTIFY - константа.
Бывает неудобно/неприменимо.
← →
ааа (2005-08-03 05:53) [9]> Defunct © (02.08.05 02:27) [3]
> Не удивительно, в uCallbackMessage можно задавать не только
> WM_MYTRAYNOTIFY ;>
тема не раскрыта. :)
nid.uCallbackMessage:=WM_SYSCOMMAND;
nid.uId:=SC_RESTORE;
не пробовал но должно работать.
← →
ааа (2005-08-03 06:52) [10]нет, глючит [9]. фигню я написал.
2 модератор - можете удалить
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.08.21;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.034 c