![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Пресловутый TrayIcon - проблема с PopupMenu [D6, Win2k]
zoid © (2002-02-11 14:49:00)суть - вызываю на иконке в трее попапменю, и чтобы оно исчезло, обязательно надо щелкнуть по какому-нить пункту, иначе это меню так и висит там. вот код...
const
wm_IconMessage = wm_User;
type
TMainForm = class(TForm)
...
...
private
nid: TNotifyIconData;
public
procedure IconTray(var Msg:TMessage);
message wm_IconMessage;
end;
var
MainForm: TMainForm;
implementation
{$R *.dfm}
{$R Icon.RES}
procedure TMainForm.IconTray(var Msg:TMessage);
var
Coord:TPoint;
begin
if Msg.LParam= wm_rbuttondown then
begin
GetCursorPos(Coord);
PopupMnu.Popup(Coord.X,Coord.Y);
end;
if Msg.LParam=wm_lbuttondblclk then pupPrefClick(self);
end;
procedure TMainForm.FormCreate(Sender: TObject);
begin
Icon.Handle:=LoadIcon(hinstance,"SILENT");
nid.cbSize:=sizeof(nid);
nid.Wnd:=Handle;
nid.uID:=1;
nid.uCallbackMessage:=wm_IconMessage;
nid.hIcon:=Icon.Handle;
nid.szTip:= "Running...";
nid.uFlags:=nif_Message or nif_Icon or nif_Tip;
Shell_NotifyIcon(NIM_ADD,@nid);
end;
zoid (2002-02-12 08:22:00) [1]>>Виктор Щербаков
Спасибо, помогло.
Юрий Зотов (2002-02-11 17:04:00) [2]Сразу после PopupMnu.Popup пошлите собственному окну WM_NULL:
PostMessage(Handle, WM_NULL, 0, 0);
И меню должно нормально заработать.
Виктор Щербаков (2002-02-11 14:57:00) [3]GetCursorPos(Coord);
SetForegroundWindow(MainForm.Handle);
PopupMnu.Popup(Coord.X, Coord.Y);
SetForegroundWindow(MainForm.Handle);
Должно работать. По крайней мере у меня глюков не было.