对话框问题,谢谢。(0分)

  • 主题发起人 主题发起人 cyradg
  • 开始时间 开始时间
C

cyradg

Unregistered / Unconfirmed
GUEST, unregistred user!
原来有一位朋友问过,但是没有答案:
=============================================
flypuma (2002-04-09 15:59:00)
我写了一个COM对象.里面需要showmodal一个Form,先是发现这个Form显示的时候
会在任务栏里面多一个任务出来,后来通过设置这个Form的ParentWindow
属性为调用他的客户端的主窗口的handle,这个问题基本解决了,现在的
问题是在这个Form里面我需要用到OpenDialog,在弹出的时候没有问题,关闭
这个OpenDialog(不管是通过“确认”还是“取消”方式)的时候,原来调用他的
那个Form就藏到其他窗口后面去了(当然如果这个时候桌面上没有其他程序是没有
问题的)。请各位高手帮我看看。谢谢了
=============================================================
现在我也遇到这个问题,现象一模一样,代码片段如下:
with TConverAllForm.CreateEx(Application,FilesList) do
begin
ParentWindow :=GetActiveWindow;
// SetParent(Handle,getActiveWindow);
//SetParent(Handle,GetActiveWindow);
if ShowModal=mrOK then
begin
end;
end;
需要说明的是:GetActiveWindow获取的是 Microsoft Excel主程序窗口,当这个窗口失去焦点后(切换到其他程序),如果试图再切换到 Excel程序,这个窗口不会把Microsoft Excel主程序窗口一起带到前台,仍然躲在其他窗口后面,请问有谁知道怎么把它带到前台来?谢谢。
 
重载FORM的WM_NCACTIVE消息,用SetForegroundWindow(ParentWindow)来解决,把知道是否还有更好的方法??
 
还是不行,效果不好,但SetForegroundWindow(ParentWindow)能带到前台来,当放在OnNCActive效果不好.
 
似乎可以,好象是这样的:
if Boolean(message.WParam) then
begin
Windows.SetForegroundWindow(ParentWindow); //带主窗口到前台
SendMessage(ParentWindow,WM_NCACTIVATE,Longint(false),0); //主窗口失去焦点
Windows.SetForegroundWindow(Handle);//带自身到前台来
end;
inherited; //默认行为
总体效果还好.
 
其实最终是先Application.Handle :=GetActiveWindow,然后
with TConverAllForm.CreateEx(Application,FilesList) do
begin
if ShowModal=mrOK then
begin
end;
end;

可以带到前台来,不用WM_NCACTIVE,^_^。
 
后退
顶部