【发布时间】:2013-04-05 18:14:06
【问题描述】:
简短版 -
我有一个使用 WinApi 调用创建的 OpenGL 窗口。我宁愿保持这种方式,而不是将 OpenGL 包装到 VCL 表单中。
为了提供一些首选项菜单和文件对话框,我使用了 VCL 表单和典型的对话框(TOpenDialog、TSaveDialog)。
我想知道的是 - 我如何让这些窗体和对话框将我的 OpenGL 窗口视为它们的所有者?
我试图将我的窗口句柄传递给表单,但我确信我这样做不正确,因为它没有任何效果。
Form1 := TForm1.Create(nil);
Form1.ParentWindow := hwnd; //handle to OpenGL Window
VCL 表单需要什么才能看到作为其所有者的本机窗口?
长版 -
我的应用程序有两种模式。独立模式,它自己运行。其次,有一个插件模式在宿主应用程序的进程空间中运行。
在独立模式下,我对 VCL 表单和对话框没有任何问题。尽管它们的所有权是不确定的,但它不会以任何方式影响可用性。
在插件模式下,我发现主机应用程序将控制我的 VCL 表单以及打开和保存对话框。
因此,当在主机的进程空间中运行时,我的 VCL 表单呈现非常奇怪。我尝试手动修复它们,但它们不会响应样式更改。
编辑 - 对话框的详细信息
我主要关心的是 VCL 表单的呈现,但这里有一些关于对话框的更多细节,如果它有任何用处的话。
我正在执行这样的对话框:
if FileOpenDialog.Execute(hwnd) then
Begin
//open up file
End;
而且它没有任何作用。该对话框的行为与我没有将句柄传递给它一样。请记住,我使用的是 Delphi 2006,而这个版本的 Delphi 仍在使用旧的文件对话框,它们是在 Windows XP 中引入的。
最后 - 当作为插件运行时,我的打开/保存对话框将出现在任务栏上好像它们属于宿主应用程序。因此,主机有一个任务栏选项卡。我的应用程序也有它自己的选项卡。当我执行它时,我的打开对话框会附加到主机的选项卡上。
图片
独立模式下的首选项菜单:
首选项菜单作为主机中的插件:
如果我可以简单地改变黑色文本的颜色,那就足够了,但我似乎做不到。
【问题讨论】:
标签: forms delphi winapi dialog ownership