Delphi实现窗体内嵌其他应用程序窗体
2016-07-19 15:00
351 查看
实现原理是启动一个应用程序,通过ProcessID得到窗体句柄,然后对其设定父窗体句柄为本程序某控件句柄(本例是窗体内一个Panel的句柄),这样就达成了内嵌的效果。
本文实现的是内嵌一个记事本程序,如下图:
在实现细节上需要注意几点:
为了美化程序的嵌入效果,需要隐藏其标题栏
在外部窗体大小变化时,需要内嵌的窗体也随之变化大小
外部程序退出时,内嵌的程序也要退出
下面是例子程序。新建窗体,上面放置一个Panel控件,名为pnlApp,然后按下面代码编写:
?
这种方式也存在几个问题:
问题1:如果程序有Splash窗体先显示,则实际窗体无法内嵌,因为仅将Splash窗体的父窗体设定为本程序的控件句柄,后续窗体无法设定。
解决方法:可以通过轮询方式查询后续窗体,并设定其父窗体为本程序的控件句柄。
问题2:点击内嵌程序的窗体,则本程序的标题栏失去焦点
解决方法:不详。
问题3:点击内嵌程序的窗体,按下ALT+F4,则内嵌程序退出,仅留下本程序
解决方法:可以通过Hook方式拦截ALT+F4。
本文实现的是内嵌一个记事本程序,如下图:
在实现细节上需要注意几点:
为了美化程序的嵌入效果,需要隐藏其标题栏
在外部窗体大小变化时,需要内嵌的窗体也随之变化大小
外部程序退出时,内嵌的程序也要退出
下面是例子程序。新建窗体,上面放置一个Panel控件,名为pnlApp,然后按下面代码编写:
?
问题1:如果程序有Splash窗体先显示,则实际窗体无法内嵌,因为仅将Splash窗体的父窗体设定为本程序的控件句柄,后续窗体无法设定。
解决方法:可以通过轮询方式查询后续窗体,并设定其父窗体为本程序的控件句柄。
问题2:点击内嵌程序的窗体,则本程序的标题栏失去焦点
解决方法:不详。
问题3:点击内嵌程序的窗体,按下ALT+F4,则内嵌程序退出,仅留下本程序
解决方法:可以通过Hook方式拦截ALT+F4。
相关文章推荐
- delphi升级xe注意事项
- Delphi 自动检测U盘插入、拔出及获取U盘盘符!
- delphi 获取USB口拔出和插入的状态
- delphi 强制退出死循环,要设置label标签
- 用Delphi实现文件下载的几种方法
- DELPHI XE开发Office Add-In
- Delphi中拖动无边框窗口的几种简单方法
- 常用正则表达式大全
- Delphi7简单DirectUI界面源码
- 用Delphi画圆角Panel的方法
- delphi代码实现创建dump文件
- Delphi中ClientDataSet的用法小结
- DELPHI跨平台的临界替代者
- Delphi创建服务程序
- Delphi 10.1 Berlin下TStringGrid单元格样式设定
- c#中的webservice调用delphi写的dll函数的方法
- DelphiXE_画图
- delphi中使用mediaplayer控件播放音乐
- delphi报警声音 Beep、MessageBeep 和 Windows.Beep
- Delphi 使用双缓冲解决图片切换时的闪烁问题 good