首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >向TMenuItem发送WM_COMMAND

向TMenuItem发送WM_COMMAND
EN

Stack Overflow用户
提问于 2009-08-11 11:04:45
回答 5查看 3.3K关注 0票数 3

在我的Delphi form的OnShow方法中,我确定一旦打开窗体,就必须自动打开一个对话框-我应该能够通过模拟单击菜单项来实现这一点。

但是,调用menuitem.Click会在打开主窗体之前打开对话框--这不是我想要的。

我希望这样做应该是我想要的,但是我找不到要传递给"wparam“的参数,以便将点击发送到我的menuitem。

代码语言:javascript
复制
PostMessage(handle, WM_COMMAND, wparam, 0)

MSDN WM_COMMAND docs谈到了IDM_*标识符,但是它在Delphi语言中是如何出现的呢?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-08-11 11:16:53

也许您可以尝试在OnActivate事件中打开对话框?除了显示表单之外,我不确定OnActivate是否会再次触发,但如果确实如此,您可以使用:

代码语言:javascript
复制
procedure TForm1.FormActivate(Sender: TObject);
begin
  Form2.ShowModal;
  Self.OnActivate := nil;
end;
票数 2
EN

Stack Overflow用户

发布于 2010-09-17 08:08:17

(我知道这是一个非常古老的问题,但尽管以某种方式得到了解决,但真正的问题仍然没有得到回答。)

--

Command属性中包含'TMenuItem‘的命令项标识符。根据WM_COMMAND的documentation,'wParam‘的高位字将是'0’,低位字将是菜单标识符;

代码语言:javascript
复制
PostMessage(Handle, WM_COMMAND, MakeWParam(MyMenuItem.Command, 0), 0);

或者简单地说;

代码语言:javascript
复制
PostMessage(Handle, WM_COMMAND, MyMenuItem.Command, 0);

对于弹出菜单项,会有细微的不同: VCL使用不同的实用程序窗口来处理弹出菜单的消息。全局PopupList变量在其Window属性中具有该变量的句柄;

代码语言:javascript
复制
PostMessage(PopupList.Window, WM_COMMAND, MyPopupMenuItem.Command, 0);
票数 5
EN

Stack Overflow用户

发布于 2009-08-11 11:59:31

或者,使用类似...的内容处理Application.OnIdle事件。

代码语言:javascript
复制
if not DialogDone then
begin
    MyDialogForm.ShowModal; // or menuItem.Click ....
    DialogDone := true;
end;

在表单显示并且消息队列为空之前,OnIdle不会触发(第一次)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1259683

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档