MID DlL窗体与Application.Messagebox 结合后控件失效???
2009-02-03 09:47
232 查看
MID DlL窗体与Application.Messagebox 结合后控件失效??? Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiAPI/html/delphi_20061114101124242.html
现在若干窗体,封装成DLL窗体(MDI子窗体).
现发现一个大问题:
如果MDI子窗体上有表格控件,如DBGrid或DBGridEh,而且在提交数据时或者发生了其它各种错误,并且出现了MessageBox信息框(不管是系统自己弹出的还是人工用Try...Except...显示的MessageBox),都会有问题,表现在:
1、表格就会没有用了。也就是用鼠标去点时没反应(就像发生了 adoDataset.DisabledControls一样,但我断点检测发现并没有执行 adoDataset.DisabledControls操作,而且,点DBNavigator时,表格上的记录还能移动,用方向键或Mouse点表格却无反应)。
2、DBGrid或DBGridEh本身的Enabled是正常的,可用的;
3、出现上面的错误时,如果把焦点移到表格以外(如各种Edit,或Button),再到表格上点一下鼠标,问题马上就解决了。
附注:
如果我人工用 Showmessage显示出错时的信息而不用 Application.MessageBox,就不会出错;
请问各位,我应该如何办呀?我必须要用 Application.MessageBox(也就是有左上角有图标的那种消息框),因为Showmessage有时会处于窗体的下面,使用户点不到,而且,有时我还要用Application.MessageBox与用户对话。
用API: MessageBox
而且,我发现,如果不封成DLL窗体,再怎么搞都不会出错/
上楼的哥们,我的Application.Messagebox算不算API呀?
另外,我的对话框有时会用于 非窗体(也就是说,有时单纯的DLL里要用,单纯的Unit也要用.我是把消息框写成一个自定义函数,我担心会不会是 Handle 引起的)
Application.Messagebox这是VCL中的方法。
我建议你用API:MessageBox试试:
MessageBox(0, '信息', '标题', MB_OK or MB_ICONINFORMATION);
类似这样。
大哥,我刚才试了一下,暂时是解决问题了,但请大哥再详细回答一下:
1. VCL的与API的有什么本质不同? 为什么我用Application的会有那种错误发生?
2. MessageBox(0 中的 0 作句柄是什么意思呢? 我要求绝对不能出现 消息框 显示在活动窗体后面的情况(因为我经常看到有的程序出这样的错误,使用户难以再操作下去)
3.我在网上查到资料,有的网友写:
MessageBox ( GetActiveWindow(), ...)
意思是获取活动社会分配的句柄,他们的方法用于非窗体时会不会产生找不到 ActiveWindow而出错的情况?
谢谢!
我的问题和你的类似,关注,就是有时调用application.messagebox()时,程序会失去活动状态,不知道什么原因???关注
这个问题,我也碰到过,那时我对话框是写成公用函数的,后来出现对话框跑到窗体后面,于是对话函数体就增加了一个handle的参数
http://www.delphi2007.net/DelphiAPI/html/delphi_20061114101124242.html
现在若干窗体,封装成DLL窗体(MDI子窗体).
现发现一个大问题:
如果MDI子窗体上有表格控件,如DBGrid或DBGridEh,而且在提交数据时或者发生了其它各种错误,并且出现了MessageBox信息框(不管是系统自己弹出的还是人工用Try...Except...显示的MessageBox),都会有问题,表现在:
1、表格就会没有用了。也就是用鼠标去点时没反应(就像发生了 adoDataset.DisabledControls一样,但我断点检测发现并没有执行 adoDataset.DisabledControls操作,而且,点DBNavigator时,表格上的记录还能移动,用方向键或Mouse点表格却无反应)。
2、DBGrid或DBGridEh本身的Enabled是正常的,可用的;
3、出现上面的错误时,如果把焦点移到表格以外(如各种Edit,或Button),再到表格上点一下鼠标,问题马上就解决了。
附注:
如果我人工用 Showmessage显示出错时的信息而不用 Application.MessageBox,就不会出错;
请问各位,我应该如何办呀?我必须要用 Application.MessageBox(也就是有左上角有图标的那种消息框),因为Showmessage有时会处于窗体的下面,使用户点不到,而且,有时我还要用Application.MessageBox与用户对话。
用API: MessageBox
而且,我发现,如果不封成DLL窗体,再怎么搞都不会出错/
上楼的哥们,我的Application.Messagebox算不算API呀?
另外,我的对话框有时会用于 非窗体(也就是说,有时单纯的DLL里要用,单纯的Unit也要用.我是把消息框写成一个自定义函数,我担心会不会是 Handle 引起的)
Application.Messagebox这是VCL中的方法。
我建议你用API:MessageBox试试:
MessageBox(0, '信息', '标题', MB_OK or MB_ICONINFORMATION);
类似这样。
大哥,我刚才试了一下,暂时是解决问题了,但请大哥再详细回答一下:
1. VCL的与API的有什么本质不同? 为什么我用Application的会有那种错误发生?
2. MessageBox(0 中的 0 作句柄是什么意思呢? 我要求绝对不能出现 消息框 显示在活动窗体后面的情况(因为我经常看到有的程序出这样的错误,使用户难以再操作下去)
3.我在网上查到资料,有的网友写:
MessageBox ( GetActiveWindow(), ...)
意思是获取活动社会分配的句柄,他们的方法用于非窗体时会不会产生找不到 ActiveWindow而出错的情况?
谢谢!
我的问题和你的类似,关注,就是有时调用application.messagebox()时,程序会失去活动状态,不知道什么原因???关注
这个问题,我也碰到过,那时我对话框是写成公用函数的,后来出现对话框跑到窗体后面,于是对话函数体就增加了一个handle的参数
相关文章推荐
- windows窗体程序中使用WPF控件 Host WPF Controls in Windows Forms Application
- 用AlphaControls皮肤控件来美化用Dll制作的MDI子窗体程序
- 窗体自动隐藏停靠开源控件Dock控件的使用(WeiFenLuo.winFormsUI.Docking.dll的使用(停靠效果))
- Python pyQt4/pyQt5 学习笔记1(空白窗口,按钮,控件事件,控件提示,窗体显示到屏幕中间,messagebox)
- 一个自定义的窗体样式MessageBox控件
- 自定义Windows窗体的DLL或控件的.NET框架的任何开发环境的条形码控件.NET Windows Forms Barcode
- Delphi中一些DLL的运用(要传递Application和Screen,似乎还忘了传递提示控件)
- 结合javaScript与.net web控件进行窗体开发
- 关于调用DLL工程里的窗体锁定到另一个工程里的窗体的控件上
- C#.NET 窗体停靠控件WeifenLuo.WinFormsUI.Docking.dll的使用
- 如何方便的保存WinForm窗体控件的位置大小等等配置信息
- 窗体使用自定义的控件
- DLL方式封装MDI子窗体是一种常用的软件开发技术
- 在WPF中驻留Windows窗体控件
- DevExpress控件之"XtraForm——窗体"
- 如何实现控件从IDE拖放到窗体上的效果?
- 关于换肤控件IrisSkin.dll指定窗口的使能/禁用
- C# 解决panel或者其他控件叠加时,此控件背景透明,显示的背景色为窗体背景色问题
- VC自动调整窗体控件大小(再也不用一个个去调整控件)
- How to make cross-thread calls. (多线程操控窗体控件之不可行)