有Form1、Form2、Form3三个窗体,源码如下:
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementationuses Unit2, Unit3;{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
begin
SetWindowPos(Form2.Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NoMove or SWP_NoSize or SWP_ShowWindow) ;//Form2
SetWindowPos(Form1.Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NoMove or SWP_NoSize or SWP_ShowWindow) ;//主窗体
Form3.Show;
end;end.1、如果不把主窗体置顶的话,Form2只是相对于程序里的3个窗体置顶,还是能被其它程序覆盖。
2、即使把主窗体置顶,也有一个问题,当主窗体和Form2置顶的时候,当鼠标点击它们时,被其它程序覆盖的Form3会跳到前面。如何让Form3老老实实的呆在后面?因为我的程序主窗体是隐藏的,对它Stay on top会把它显示出来。请问如何在主窗体不置顶的时候,对其它窗体置顶,且让非置顶的窗体不要跳到前面?
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementationuses Unit2, Unit3;{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
begin
SetWindowPos(Form2.Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NoMove or SWP_NoSize or SWP_ShowWindow) ;//Form2
SetWindowPos(Form1.Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NoMove or SWP_NoSize or SWP_ShowWindow) ;//主窗体
Form3.Show;
end;end.1、如果不把主窗体置顶的话,Form2只是相对于程序里的3个窗体置顶,还是能被其它程序覆盖。
2、即使把主窗体置顶,也有一个问题,当主窗体和Form2置顶的时候,当鼠标点击它们时,被其它程序覆盖的Form3会跳到前面。如何让Form3老老实实的呆在后面?因为我的程序主窗体是隐藏的,对它Stay on top会把它显示出来。请问如何在主窗体不置顶的时候,对其它窗体置顶,且让非置顶的窗体不要跳到前面?
解决方案 »
- 用TPageControl动态创建的TTabSheet标签页上带有关闭自身的关闭按钮,就像360浏览器的标签一样
- 由应用红蜻蜓抓图软件遇到的一个问题,ctrl+shift+C问题
- 如何在主窗口中增加一个浮动窗口?
- JPG图片写入SQL数据库,如何在QREPORT报表中利用QRDBImage显示出供打印???在线等,急.
- 高分请教MessageDlg怎么用的啊~~?F1我看不懂啊,真的,
- 问一下Delphi7 SQL Server 开发的一个C/S结构程序..最多支持多少台客户端
- 关于修改表主键的问题
- 请教一个关于ExpressBar中dxBarConverter问题?
- 急呀!我的程序是三层结构,一个应用程序服务器,多个客户机,怎样让任何一客户机增加记录,其它客户机及时刷新,网络开销最小
- 诚恳请教
- 班主:可不可以将我的问题置顶给大农讨论下。(ID=4390833,一个数学模型的问题)。
- 各位有程序员工作精验的朋友帮忙进来看看,高分回报
begin
Form2.FormStyle:=fsStayOnTop;
Form2.Show;
end;procedure TForm1.Button2Click(Sender: TObject);
begin
Form3.FormStyle:=fsStayOnTop;
Form3.Show;
end;
你的最顶是相对于你的程序的最顶,一样会被其他程序的窗体覆盖,想要真正的置顶
要这样:
这个问题我已回答过我次,好像应该这样做:Public
procedure Createparams(Var Params:TCreateParams);override;
..
procedure TFormDrop.Createparams(var Params:TCreateParams);
begin
Inherited CreateParams(Params);
With Params do
begin
EXStyle:=ExStyle or WS_EX_TOPMOST OR WS_EX_ACCEPTFILES or WS_DLGFRAME
wndParnet:=GetDesktopWindow; //关键一行,用SetParent都不行!!
end;
end; procedure SetFormOnTop(Form: TForm; const bFlag: Boolean);
begin
if bFlag then
SetWindowPos(Form.handle, HWND_TOPMOST, 0, 0, 0, 0, swp_nomove or swp_nosize)
else
SetWindowPos(Form.handle, HWND_NOTOPMOST, 0, 0, 0, 0, swp_nomove or swp_nosize);
end;
2、 同上,该最前的时候就最前,不该的话就取消他。你用了SWP_ShowWindow标志,这样他会把隐藏的窗口显示出来。
begin
Form2.FormStyle:=fsStayOnTop;
Form2.Show;
end;procedure TForm1.Button2Click(Sender: TObject);
begin
Form3.FormStyle:=fsStayOnTop;
Form3.Show;
end;