Консультация № 64512
27.11.2006, 23:49
0.00 руб.
0 2 1
Здраствуйте дорогите эксперты!
У меня тут проблема возникла. Я сворачиваю окно в панель задач, а затем при нажатии на панели задача (любой кнопкой мыши "правой" и "левой") у меня показывало мое POPUPMENU.
Спасибо!!!

Обсуждение

Неизвестный
28.11.2006, 15:10
общий
это ответ
Здравствуйте, Luminarc!

Вот разобрался ловите:
и удачи



Приложение:
unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Menus, ExtCtrls, shellapi, DB, ADODB;const WM_TASKMSG = WM_APP+101;type TForm1 = class(TForm) Button1: TButton; PopupMenu1: TPopupMenu; N1: TMenuItem; Hello1: TMenuItem; Hi1: TMenuItem; Exit1: TMenuItem; ListBox1: TListBox; ADOQuery1: TADOQuery; procedure FormCreate(Sender: TObject); procedure Exit1Click(Sender: TObject); procedure Button1Click(Sender: TObject); procedure N1Click(Sender: TObject); procedure N51Click(Sender: TObject); private { Private declarations } procedure WMSysCommand(var Msg: TWMSysCommand); message WM_SYSCOMMAND; procedure WinMsg(var Msg: TMsg; var Handled: Boolean); public { Public declarations } end;const SC_MyMenuItem = WM_USER + 1;var Form1: TForm1; sysmenu: TMenu;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);beginself.AlphaBlend:=true;self.AlphaBlendValue:=255;application.OnMessage:=WinMSG;end;procedure TForm1.Exit1Click(Sender: TObject);beginapplication.Terminate;end;procedure TForm1.Button1Click(Sender: TObject);var mnu:Hmenu;i,itm:integer;itm1:TMenuItem;beginfor i:=1 to 5 dobegincase i of 1:itm:=sc_close; 2:itm:=sc_move; 3:itm:=sc_size; 4:itm:=sc_minimize; 5:itm:=sc_maximize;end; deletemenu(GetSystemMenu(application.Handle, FALSE),itm,MF_BYCOMMAND);end;for i:=0 to popupmenu1.Items.Count-1 do begin itm1:=popupmenu1.Items.Items[i]; appendmenu(GetSystemMenu(application.Handle, FALSE),MF_String,itm1.Handle,pchar(Itm1.Caption)); end; self.PopupMenu:=popupmenu1;{ sysmenu:=tmenu.Create(nil); sysmenu:=tmenu(GetSystemMenu(application.Handle, FALSE)); showmessage(inttostr(sysmenu.Items.Count)); for i:=0 to sysmenu.Items.Count-1 do sysmenu.Items.Delete(i);}end;procedure TForm1.N1Click(Sender: TObject);beginshowmessage(tmenuitem(sender).Caption);end;procedure TForm1.WMSysCommand(var Msg: TWMSysCommand);begin if Msg.CmdType = SC_MyMenuItem then ShowMessage(‘Áûë íàæàò íàø ïóíêò ìåíþ!!!‘) else inherited;end;procedure TForm1.N51Click(Sender: TObject);beginapplication.Terminate;end;procedure Tform1.WinMsg(var Msg: TMsg; var Handled: Boolean);var i:integer;begin if Msg.Message = WM_SYSCOMMAND then for i:=0 to popupmenu1.Items.Count-1 do if Msg.WParam = popupmenu1.Items.Items[i].Handle then popupmenu1.Items.Items[i].OnClick(popupmenu1.Items.Items[i]);end;end.
Неизвестный
28.11.2006, 15:15
общий
извиняюсь за белиберду, вот нормальный код:unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Menus, ExtCtrls, shellapi, DB, ADODB;type TForm1 = class(TForm) Button1: TButton; PopupMenu1: TPopupMenu; N1: TMenuItem; Hello1: TMenuItem; Hi1: TMenuItem; Exit1: TMenuItem; ListBox1: TListBox; ADOQuery1: TADOQuery; procedure FormCreate(Sender: TObject); procedure Exit1Click(Sender: TObject); procedure Button1Click(Sender: TObject); procedure N1Click(Sender: TObject); procedure N51Click(Sender: TObject); private { Private declarations } procedure WinMsg(var Msg: TMsg; var Handled: Boolean); public { Public declarations } end;var Form1: TForm1; sysmenu: TMenu;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);beginself.AlphaBlend:=true;self.AlphaBlendValue:=255;application.OnMessage:=WinMSG;end;procedure TForm1.Exit1Click(Sender: TObject);beginapplication.Terminate;end;procedure TForm1.Button1Click(Sender: TObject);var mnu:Hmenu;i,itm:integer;itm1:TMenuItem;beginfor i:=1 to 5 dobegincase i of 1:itm:=sc_close; 2:itm:=sc_move; 3:itm:=sc_size; 4:itm:=sc_minimize; 5:itm:=sc_maximize;end; deletemenu(GetSystemMenu(application.Handle, FALSE),itm,MF_BYCOMMAND);end;for i:=0 to popupmenu1.Items.Count-1 do begin itm1:=popupmenu1.Items.Items[i]; appendmenu(GetSystemMenu(application.Handle, FALSE),MF_String,itm1.Handle,pchar(Itm1.Caption)); end; self.PopupMenu:=popupmenu1;end;procedure TForm1.N1Click(Sender: TObject);beginshowmessage(tmenuitem(sender).Caption);end;procedure TForm1.N51Click(Sender: TObject);beginapplication.Terminate;end;procedure Tform1.WinMsg(var Msg: TMsg; var Handled: Boolean);var i:integer;begin if Msg.Message = WM_SYSCOMMAND then for i:=0 to popupmenu1.Items.Count-1 do if Msg.WParam = popupmenu1.Items.Items[i].Handle then popupmenu1.Items.Items[i].OnClick(popupmenu1.Items.Items[i]);end;end.
Форма ответа