Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.48 MB
Время: 0.038 c
14-1124900990
Dok_3D
2005-08-24 20:29
2005.09.18
Что означает этот знак?


1-1124892902
ocean
2005-08-24 18:15
2005.09.18
Размер в см при печати


14-1124668594
Piter
2005-08-22 03:56
2005.09.18
Тест на дальтонизм :)


9-1116664406
Nic87
2005-05-21 12:33
2005.09.18
Blitz Basic 3d


14-1124833263
ronyn
2005-08-24 01:41
2005.09.18
Как производится защита от копирования