在我的Delphi form的OnShow方法中,我确定一旦打开窗体,就必须自动打开一个对话框-我应该能够通过模拟单击菜单项来实现这一点。
但是,调用menuitem.Click会在打开主窗体之前打开对话框--这不是我想要的。
我希望这样做应该是我想要的,但是我找不到要传递给"wparam“的参数,以便将点击发送到我的menuitem。
PostMessage(handle, WM_COMMAND, wparam, 0)MSDN WM_COMMAND docs谈到了IDM_*标识符,但是它在Delphi语言中是如何出现的呢?
发布于 2009-08-11 11:16:53
也许您可以尝试在OnActivate事件中打开对话框?除了显示表单之外,我不确定OnActivate是否会再次触发,但如果确实如此,您可以使用:
procedure TForm1.FormActivate(Sender: TObject);
begin
Form2.ShowModal;
Self.OnActivate := nil;
end;发布于 2010-09-17 08:08:17
(我知道这是一个非常古老的问题,但尽管以某种方式得到了解决,但真正的问题仍然没有得到回答。)
--
Command属性中包含'TMenuItem‘的命令项标识符。根据WM_COMMAND的documentation,'wParam‘的高位字将是'0’,低位字将是菜单标识符;
PostMessage(Handle, WM_COMMAND, MakeWParam(MyMenuItem.Command, 0), 0);或者简单地说;
PostMessage(Handle, WM_COMMAND, MyMenuItem.Command, 0);对于弹出菜单项,会有细微的不同: VCL使用不同的实用程序窗口来处理弹出菜单的消息。全局PopupList变量在其Window属性中具有该变量的句柄;
PostMessage(PopupList.Window, WM_COMMAND, MyPopupMenuItem.Command, 0);发布于 2009-08-11 11:59:31
或者,使用类似...的内容处理Application.OnIdle事件。
if not DialogDone then
begin
MyDialogForm.ShowModal; // or menuItem.Click ....
DialogDone := true;
end;在表单显示并且消息队列为空之前,OnIdle不会触发(第一次)。
https://stackoverflow.com/questions/1259683
复制相似问题