【问题标题】:Set focus to the OK button in the TPrintDialog将焦点设置到 TPrintDialog 中的 OK 按钮
【发布时间】:2021-02-24 01:02:52
【问题描述】:

TPrintDialog 中的 OK 按钮打开时是否可以设置焦点?

【问题讨论】:

  • 不是原生的,但您可能可以使用对话框的OnShow 事件手动找到确定按钮并设置焦点。
  • @RemyLebeau 不是从打印机驱动程序中获取的 PrintDialog 吗?类似于从操作系统获取的文件对话框?现在要更改对话框窗口,我正在使用winapi ... list the childs of the dialog window and do stuff(比如放大和停靠OpenGL或VCL窗口,上面有画布以添加预览......)......我认为这样可以获得OK按钮的句柄和直接做任何需要的事情,不涉及计算机视觉……但是,如果您知道更好的方法,我很想学习……因为您显然对此类事情有更好的经验……
  • Bob 另见is ther a way an app can display a message without the use of messagebox API? ...另外我认为应该有办法将windows消息传递给对话框,直接通过WM_OK之类的东西...我不擅长winapi所以我可能是错的,但在这里快速搜索first hit 这可能就是你所需要的......
  • @Spektre "PrintDialog 不是取自打印机驱动程序吗?" - 没有。这是一个标准的操作系统对话框。 TPrintDialog 使用 Win32 PrintDlg() 函数。 “我认为这样可以获得确定按钮的句柄并直接执行所需的操作” - 完全正确。对话框初始化后,您可以手动检索确定按钮的HWND 并设置焦点。
  • @Spektre setup 对话框可以是每个驱动程序,但标准 print 对话框不是。标准对话框可以调用驱动程序对话框让用户设置高级设置。

标签: c++builder vcl setfocus printdialog c++builder-10.4-sydney


【解决方案1】:

TPrintDialog::OnShow 事件中,您可以手动将焦点设置为确定按钮,如下所示:

void __fastcall TMyForm::PrintDialogShow(TObject *Sender)
{
    HWND btnOK = GetDlgItem(PrintDialog->Handle, IDOK);
    ::SetFocus(btnOK);
}

【讨论】:

  • 您的代码建议正是我们所需要的。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-25
  • 2011-12-09
  • 1970-01-01
相关资源
最近更新 更多