关于delphi模态窗口的一个问题(环境:widnows xp + delphi 2007) 本帖最后由 lonelyboySVC 于 2011-05-23 16:16:59 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 能否把frmDial.InitDialForm();贴出? dial := TDial.Create();写成 dial := TDial.Create(application);貌似模态窗体不给它传AOwner的话,就会出现这种情况~ 但是对于dial := TDial.Create();其不是一个Form也不是一个控制就是一个类。其定义如下:TDial = Class(TObject) private { Private declarations } hParentNotifyWnd : THANDLE; //父窗口句柄,用于接收通知拨号通知消息 frmIdle : TIdleProgress;//状态窗口 hThread : THANDLE; //线程句柄 public { public declarations } constructor Create(const AOwner:TComponent;const bShowTaskBar:Boolean); destructor Destroy();override; //... end; 不好意思,没仔细看。 你上层应该是调用这个class procedure TDialForm.ShowDialForm(AOwner:TComponent;const bShowWnd:boolean;var bStatus:Boolean);来显示模态窗体的吧?这个AOwner传的是什么? 你44传Application看行不。 ---------------------------------------------------------------------------------感谢楼上的回复,我的调用这样么写的,如下:procedure TfrmMainForm.btnNetCtrlClick(Sender: TObject);var bStatus : Boolean;begin TDialForm.ShowDialForm( frmMainForm ,true , bStatus ); //...end;我试试传Application。说明一下frmMainForm就是上面图1与图2中的主窗口的实例。 测试了一下,将调用改成如下方式也不行。TDialForm.ShowDialForm( Application ,true , bStatus ); 那你就要检查一下,看看主窗体中是不是有线程什么的,在后台做一些工作,更新了主窗体,导致Modal窗体失效。ps:或者一个偷懒点的方法,在Modal窗体里,截获WM_ACTIVATE消息,让modal窗体一失去焦点就立刻Active,永远不能失去焦点~ dropme-------------------------------------------------------你好: 在主窗口程序中只开启了一个线程,这个线程调用了SetWindowPos WindowsAPI,代码如下:function TScreenKeyboard.KeyboardMonitorProc( lpVoid : pointer ) : DWORD ;begin while true do begin Sleep( CONSINTMONITORINTERVAL ); if not Assigned(frmScreenKeyBoard) then break; SetWindowPos( frmScreenKeyBoard.Handle , HWND_TOPMOST, frmScreenKeyBoard.Left, frmScreenKeyBoard.Top, 0,0, SWP_NOSIZE or SWP_NOACTIVATE ); MonitorScreenKeyboard( 0 ); //... end;end;你说可能是我这段代码引起的。他修改了当前的顶层窗口。我先测试下看看 fastreport 动态创建报表的问题 好消息:RAD Studio 2007发布了 bcp导入文本文件 求助 排列组合的算法问题 如何将一个a.exe文件和一个a.dll文件合并成一个b.exe?运行b.exe时再释放出a.exe和a.dll???(在线) 关于变量调用的问题,急~~在线等哦 在线等待,马上给分,那位仁兄能发一个完整的数据库恢复与备份的代码给我... 关于安装制作的问题请帮助!! 如何在右下角显示我的程序图标?谢谢!系统托盘里面 outlook 求助 给新手推荐点Delphi方面的资料 对图像进行批处理用什么方法比较好捏?
贴出?
private
{ Private declarations }
hParentNotifyWnd : THANDLE; //父窗口句柄,用于接收通知拨号通知消息
frmIdle : TIdleProgress;//状态窗口
hThread : THANDLE; //线程句柄
public
{ public declarations }
constructor Create(const AOwner:TComponent;const bShowTaskBar:Boolean);
destructor Destroy();override;
//...
end;
class procedure TDialForm.ShowDialForm(AOwner:TComponent;const bShowWnd:boolean;var bStatus:Boolean);来显示模态窗体的吧?这个AOwner传的是什么? 你44传Application看行不。
感谢楼上的回复,我的调用这样么写的,如下:procedure TfrmMainForm.btnNetCtrlClick(Sender: TObject);
var
bStatus : Boolean;
begin
TDialForm.ShowDialForm( frmMainForm ,true , bStatus );
//...
end;我试试传Application。说明一下frmMainForm就是上面图1与图2中的主窗口的实例。
ps:或者一个偷懒点的方法,在Modal窗体里,截获WM_ACTIVATE消息,让modal窗体一失去焦点就立刻Active,永远不能失去焦点~
-------------------------------------------------------
你好:
在主窗口程序中只开启了一个线程,这个线程调用了SetWindowPos WindowsAPI,代码如下:function TScreenKeyboard.KeyboardMonitorProc( lpVoid : pointer ) : DWORD ;
begin
while true do
begin
Sleep( CONSINTMONITORINTERVAL );
if not Assigned(frmScreenKeyBoard) then break;
SetWindowPos( frmScreenKeyBoard.Handle ,
HWND_TOPMOST,
frmScreenKeyBoard.Left,
frmScreenKeyBoard.Top,
0,0,
SWP_NOSIZE or SWP_NOACTIVATE );
MonitorScreenKeyboard( 0 );
//...
end;
end;你说可能是我这段代码引起的。他修改了当前的顶层窗口。我先测试下看看