![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблемы клика по моей иконке в трэе [D7, Win2k]
Denizzz © (2004-06-17 12:18:00)Привет всем.
Моя программа сворачивается в трэй.
Но при кликании по ней не только появляется окно моего приложения, но и эмулируется нажатие иконки находившейся в тот момент рядом с моей.
Как решить такую проблему?
Denizzz (2004-06-18 07:43:00) [1]Mim1Большое thanks!
grom (2004-06-17 18:31:00) [2]http://www.delphiworld.ru/index.php?stat&page=2
---------------------
Секреты иконки в системной трее. Часть 1
Автор: Рустик, Просмотров: 234
Этой статьей я начну свой расскаж о секретах работы с иконкой приложения в системной трее. Эта часть расскажет вам о самом самом начальном: как добавлять/изменять/удалять иконку в трей. А также менять ее параметры во время работы приложения.
---------------------------
Секреты иконки в системной трее. Часть 2
Автор: Рустик, Просмотров: 242
Логическое продолжение предыдущей статьи.
Mim1 (2004-06-17 17:51:00) [3]
> procedure TFMain.WMIconNotify(var Message:TMessage);
> var PT: TPoint;
> begin
> if (Message.LParam=WM_LBUTTON UP) then
> begin
Mim1 (2004-06-17 17:50:00) [4]Дело в том что в рядомстоящей иконке происходит действие на событие wm_mouseup. А при нажатии по вашей эконке вы ее удаляете сразу. Выходов два, либо делайте postmessage своемуу приложению и удаляете свою эконку в обработчике этого события (может и не сработать), либо перевесте событие с down на up (либо удаляйте иконку в up событии).
MIA (2004-06-17 15:46:00) [5]Может поможет :)
procedure Add_ico(index: Integer);
begin
FWindowHandle := Classes.AllocateHWnd(Form1.WindowProc);
Icon1 := TIcon.Create;
Unit1.Form1.ImageList1.GetIcon(index, Icon1);
NotifyIconData.cbSize := sizeof(NotifyIconData);
NotifyIconData.Wnd := FWindowHandle;
NotifyIconData.uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;
NotifyIconData.uCallbackMessage := WM_USER + 101;
NotifyIconData.hIcon := Icon1.Handle;
StrPLCopy(NotifyIconData.szTip, 'Чат КНП+MIA', sizeof(NotifyIconData.szTip));
Shell_NotifyIcon(NIM_ADD, @NotifyIconData);
end;
procedure TForm1.WindowProc(var Message: TMessage);
begin
begin
with TMessage(Message) do
if Msg = WM_USER + 101 then
with TWMMouse(Message) do
begin
GetCursorPos(FInternal);
case LParam of
WM_LBUTTONDOWN:
begin
Caption := 'WM_LBUTTONDOWN';
end;
WM_LBUTTONUP:
begin
Caption := 'WM_LBUTTONUP';
end;
WM_LBUTTONDBLCLK:
begin
Caption := 'WM_LBUTTONDBLCLK';
end;
WM_MBUTTONDOWN:
begin
Caption := 'WM_MBUTTONDOWN';
end;
WM_MBUTTONUP:
begin
Caption := 'WM_MBUTTONUP';
end;
WM_MBUTTONDBLCLK:
begin
Caption := 'WM_MBUTTONDBLCLK';
end;
WM_MOUSEMOVE:
begin
Caption := 'WM_MOUSEMOVE';
end;
WM_RBUTTONDOWN:
begin
Caption := 'WM_RBUTTONDOWN';
end;
WM_RBUTTONUP:
begin
PopupMenu1.Popup(FInternal.X, FInternal.Y);
Application.ProcessMessages;
Caption := 'WM_RBUTTONUP';
end;
WM_RBUTTONDBLCLK:
begin
Caption := 'WM_RBUTTONDBLCLK';
end;
end;
end
else
Result := DefWindowProc(FWindowHandle, Msg, wParam, lParam);
end;
end;
Вот... :)
Denizzz (2004-06-17 13:33:00) [6]Код выглядит у меня так:
procedure TFMain.WMIconNotify(var Message:TMessage);
var PT: TPoint;
begin
if (Message.LParam=WM_LBUTTONDOWN) then
begin
if Dis=False then FMain.OnCreate(FMain);
FMain.Show;
Timer1.Enabled:=False;
FNID.uFlags:=0;
Shell_NotifyIcon(NIM_DELETE,@FNID);
FHI.Free;
end;
if (Message.LParam=WM_RBUTTONDOWN) then
begin
if Ding='1' then N3.Checked:=True else N3.Checked:=False;
if Shows='1' then N4.Checked:=False else N4.Checked:=True;
if Clr='1' then N7.Checked:=True else N7.Checked:=False;
SetForegroundWindow(Handle);
GetCursorPos(PT);
PopupMenu1.Popup(PT.X,PT.Y);
PostMessage(Handle, WM_NULL, 0, 0);
end;
end;