求教老问题: 2个非模态窗体显示最前面的方法。。(100分)

  • 主题发起人 主题发起人 tdKno
  • 开始时间 开始时间
T

tdKno

Unregistered / Unconfirmed
GUEST, unregistred user!
是这样的:有一个主窗体定义为A,从A中选择一按键显示一个非模态窗体(全屏)B,然后在B中按键再打开非模态窗体C。B要显示在最前面,而且当打开C时显示在最前面,当切换到B时C也能显示在最前面。
试过用好几种方法都不行。请教各位。
 
把C的FormStyle设成StayOnTop不行吗?
 
不行。B也要在最前面。
 
B、C都设置为StayOnTop,然后在B的onactivate事件里写
if C.Visible then
SetWindowPos(
C.handle, // handle to window
HWND_TOP, // placement-order handle
C.left, // horizontal position
C.top, // vertical position
C.width, // width
C.height, // height
SWP_NOACTIVATE // window-positioning flags
);
增加B的消息处理:
procedure WMSysCommand(var Message: TMessage); message WM_SYSCOMMAND;
begin
//如果是其它的SystemCommand消息则调用系统缺省处理函数处理之。
DefWindowProc(Handle,Message.Msg,Message.WParam,Message.LParam);
if C.Visible then
SetWindowPos(
C.handle, // handle to window
HWND_TOP, // placement-order handle
C.left, // horizontal position
C.top, // vertical position
C.width, // width
C.height, // height
SWP_NOACTIVATE // window-positioning flags
);
end;
 
“切换到B时C也能显示在最前面”此时B窗体就不是当前活动窗体,一切操作就都是针对C窗体的。这样符合你的要求吗?
 
to kaida,
“切换到B时C也能显示在最前面”,只是C显示在B的上面,未必C就一定是当前活动窗体的,B也可以成为当前活动窗体。
 
修改了一下,测试可用~
 
后退
顶部