Текущий архив: 2005.09.18;
Скачать: CL | DM;
Вниз
проблемка с Popupmenu Найти похожие ветки
← →
fixer (2005-07-28 12:39) [0]Значит дело вот в чём,
вешаю в таскбар notify иконку (Shell_NotifyIcon)
и соответственно по правой кнопке вызываю там PopupMenu
оно есесно выскакивает, НО если теперь кликнуть какое-нибудь
левое окно, то оно(PopupMenu) НЕ ЗАКРЫВАЕТСЯ, а так и висит, пока
его или форму(которой оно принадлежит) не кликнуть.
Чё за фигня?
Помогите пожалуйста
← →
chili (2005-07-28 12:44) [1]Код покажи
← →
chili (2005-07-28 12:53) [2]
type
TMainForm = class(TForm)
SetupItem: TMenuItem;
private
procedure WMTrayNotify(var Msg: TMessage); message
WM_TRAYNOTIFY;
.........
procedure TMainForm.WMTrayNotify(var Msg: TMessage);
var
pt: TPoint;
begin
case Msg.LParam of
WM_LBUTTONDBLCLK:
begin
if SetupItem.Enabled then
SetupItem.Click;
end;
WM_RBUTTONUP:
begin
GetCursorPos(pt);
SetForegroundWindow(WindowHandle);
Application.ProcessMessages;
TrayPopupMenu.Popup(pt.X, pt.Y);
end;
end;
end;
← →
fixer (2005-07-28 13:01) [3]Ну показываю код...
unit FMain;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus;
type
TMainWnd = class(TForm)
NotifyPopup: TPopupMenu;
miExit: TMenuItem;
miRestore: TMenuItem;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure miExitClick(Sender: TObject);
protected
procedure WndProc(var msg: TMessage); override;
private
public
end;
var
MainWnd: TMainWnd;
implementation
{$R *.dfm}
uses Math, ShellApi;
const NotifyIconMessage = WM_USER + 1;
function SetNotifyIcon(const tip: string; var nid: TNotifyIconData): boolean;
begin
nid.cbSize:=SizeOf(TNotifyIconData);
nid.Wnd:=MainWnd.Handle;
nid.uID:=1;
nid.uFlags:=NIF_ICON or NIF_MESSAGE or NIF_TIP;
nid.uCallbackMessage:=NotifyIconMessage;
nid.hIcon:=Application.Icon.Handle;
FillChar(nid.szTip,SizeOf(nid.szTip),0);
CopyMemory(@nid.szTip,pointer(tip),min(length(tip),length(nid.szTip)));
result:=Shell_NotifyIcon(NIM_ADD,@nid);
end;
procedure RmvNotifyIcon();
var nid: TNotifyIconData;
begin
nid.cbSize:=SizeOf(TNotifyIconData);
nid.Wnd:=MainWnd.Handle;
nid.uID:=1;
nid.uFlags:=0;
Shell_NotifyIcon(NIM_DELETE,@nid);
end;
procedure TMainWnd.WndProc(var msg: TMessage);
var nid: TNotifyIconData;
p: TPoint;
begin
inherited;
case msg.Msg of
CM_WININICHANGE: begin
SetNotifyIcon("",nid);
end;
NotifyIconMessage: begin
p:=Mouse.CursorPos;
case msg.LParam of
WM_RBUTTONUP: begin
NotifyPopup.Popup(p.X,p.Y);
end;
end;
end;
end;
end;
procedure TMainWnd.FormCreate(Sender: TObject);
var nid: TNotifyIconData;
begin
SetNotifyIcon("",nid);
end;
procedure TMainWnd.FormDestroy(Sender: TObject);
begin
RmvNotifyIcon();
end;
procedure TMainWnd.miExitClick(Sender: TObject);
begin
Self.Close;
end;
end.
← →
Экспериментатор (2005-07-28 13:04) [4]Дело не в коде
Где то в факах кладовках есть решение. Поищи
или посмотри в исходниках RX - как они сделали
← →
fixer (2005-07-28 13:06) [5]Ой, не успел код подослать уже ответ есть !
Спасибки за оперативность!
ЗЫ: щас отобедаю буду дальше думать...
Страницы: 1 вся ветка
Текущий архив: 2005.09.18;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.01 c