系统菜单相关(100分)

  • 主题发起人 主题发起人 gaodu2002
  • 开始时间 开始时间
G

gaodu2002

Unregistered / Unconfirmed
GUEST, unregistred user!
大家好,我想把系统菜单做为程序中的一个弹出菜单来用,但问题是取得的菜单项不能实现系统菜单所对应的功能,请帮忙解决一下:

var
Form1: TForm1;
sysmn: hmenu;

implementation

{$R *.DFM}

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Button = mbRight then
begin
trackpopupmenu(sysmn, tpm_rightbutton, mouse.CursorPos.X, mouse.CursorPos.Y, 0, handle, nil);
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
sysmn := getsystemmenu(handle, false);
end;
 
话题436703的标题是: 为什么TrackPopUpMenu()无效?
改写窗口的WM_COMMNAD。
procedure MYWMCOMMAND(var msg: TWMCOMMAND); message WM_COMMAND;
procedure TForm1.MYWMCOMMAND(var msg: TWMCOMMNAD);
begin
case msg.ItemId of
SC_CLOSE: SendMessage(Handle,WM_SYSCOMMAND,SC_CLOSE,0);
SC_RESTORE: SendMessage(Handle,WM_SYSCOMMAND,SC_RESTORE,0);
...
else inherited;
end;
end;
 
如果是系统菜单的消息应该是: WM_SYSCOMMAND
你应该拦截WM_SYSCOMMAND消息,做相应的处理.

下面改成WM_SYSCOMMAND消息过程
procedure MYWMCOMMAND(var msg: TWMCOMMAND); message WM_COMMAND;
procedure TForm1.MYWMCOMMAND(var msg: TWMCOMMNAD);
begin
case msg.ItemId of
SC_CLOSE: SendMessage(Handle,WM_SYSCOMMAND,SC_CLOSE,0);
SC_RESTORE: SendMessage(Handle,WM_SYSCOMMAND,SC_RESTORE,0);
else inherited;
end;
end;
 
谢谢二位啦!
 
后退
顶部