16 个解决方案
#1
MainForm.FormStyle:=fsStayOnTop;
#2
设置 窗体的 FormStyle 属性为 fsStayOnTop
#3
也可以直接在你的属性设置里把formstyle的改成fsStayOnTop就可以了,楼上的用代码动态实现也可以,你把那句放到formcreate事件中,不要搞错名字了,也许你的是form1哦,自己看看,
#4
没有用啊,兄弟们,当我激活其他窗口时,就被其他窗口给遮住了啊
#5
FormStyle 属性为 fsStayOnTop
#6
把 主窗口的 FormStyle 属性为 fsStayOnTop
#7
BOOL SetWindowPos(
HWND hWnd, // handle to window
HWND hWndInsertAfter, // placement-order handle
int X, // horizontal position
int Y, // vertical position
int cx, // width
int cy, // height
UINT uFlags // window-positioning options
);
将第二个参数设置为HWND_TOPMOST
SetWindowPos(form1.handle,HWND_TOPMOST,0,0,300,300,0)
HWND hWnd, // handle to window
HWND hWndInsertAfter, // placement-order handle
int X, // horizontal position
int Y, // vertical position
int cx, // width
int cy, // height
UINT uFlags // window-positioning options
);
将第二个参数设置为HWND_TOPMOST
SetWindowPos(form1.handle,HWND_TOPMOST,0,0,300,300,0)
#8
form1.showmodal;
#9
formstyle := fsStayOnTop
#10
主窗体的(Main Form )
MainForm.FormStyle:=fsStayOnTop;
MainForm.FormStyle:=fsStayOnTop;
#11
SetWindowPos(Form.handle,HWND_TOPMOST,0,0,500,500,0)
#12
调用windows api函数SetWindowpos,
BOOL SetWindowPos(
HWND hWnd, // handle to window
HWND hWndInsertAfter, // placement-order handle
int X, // horizontal position
int Y, // vertical position
int cx, // width
int cy, // height
UINT uFlags // window-positioning options
);
是函数原形,
比如:
始终最前:
procedure Tform1.button1click (sender: TObject);
begin
setwindowpos(form1.handle,HWND_TOPMOST,form1.left,form1.top.form1.width,form1.height,o);
end;
恢复正常:
procedure Tform2.button1click (sender: TObject);
begin
setwindowpos(form1.handle,HWND_NOTOPMOST,form1.left,form1.top.form1.width,form1.height,o);
end;
BOOL SetWindowPos(
HWND hWnd, // handle to window
HWND hWndInsertAfter, // placement-order handle
int X, // horizontal position
int Y, // vertical position
int cx, // width
int cy, // height
UINT uFlags // window-positioning options
);
是函数原形,
比如:
始终最前:
procedure Tform1.button1click (sender: TObject);
begin
setwindowpos(form1.handle,HWND_TOPMOST,form1.left,form1.top.form1.width,form1.height,o);
end;
恢复正常:
procedure Tform2.button1click (sender: TObject);
begin
setwindowpos(form1.handle,HWND_NOTOPMOST,form1.left,form1.top.form1.width,form1.height,o);
end;
#13
以上的方法没错
但对于把自己注入到其他进程中,然后热键呼出时就不行了,奇怪
但对于把自己注入到其他进程中,然后热键呼出时就不行了,奇怪
#14
form1.showmodal
#15
在Form1 里面,OnTop Form2:
//方法(一):
procedure TForm1.Button1Click(Sender: TObject);
begin
try
Hide;
Application.NormalizeAllTopMosts;
Form2.ShowModal;
Application.RestoreTopMosts;
finally
Form2.Show;
end;
并且,在Form2的OnShow中,添加代码:
SetWindowPos(Handle,HWND_TOPMOST,0, 0, 0, 0,SWP_NOMOVE or SWP_NOSIZE);
//方法(二):
//重载CreateParams()
TForm2 = class(TForm)
...
public
{ Public declarations }
procedure CreateParams(VAR Params: TCreateParams); override;
..
end;
procedure TForm2.CreateParams(var Params: TCreateParams);
begin
inherited;
with Params do
begin
ExStyle :=ExStyle or WS_EX_TOPMOST;
end;
Params.WndParent := 0;//表示Form2的父窗口不是Form1,就可以最前了
end;
//方法(一):
procedure TForm1.Button1Click(Sender: TObject);
begin
try
Hide;
Application.NormalizeAllTopMosts;
Form2.ShowModal;
Application.RestoreTopMosts;
finally
Form2.Show;
end;
并且,在Form2的OnShow中,添加代码:
SetWindowPos(Handle,HWND_TOPMOST,0, 0, 0, 0,SWP_NOMOVE or SWP_NOSIZE);
//方法(二):
//重载CreateParams()
TForm2 = class(TForm)
...
public
{ Public declarations }
procedure CreateParams(VAR Params: TCreateParams); override;
..
end;
procedure TForm2.CreateParams(var Params: TCreateParams);
begin
inherited;
with Params do
begin
ExStyle :=ExStyle or WS_EX_TOPMOST;
end;
Params.WndParent := 0;//表示Form2的父窗口不是Form1,就可以最前了
end;
#16
Params.WndParent := 0
我怎么没想到呢:)
showmodal一定不行,要使form2弹出且form1进程仍处于运行而不是等待状态,所以第二种方法可能可行,主要还没试验:)
我怎么没想到呢:)
showmodal一定不行,要使form2弹出且form1进程仍处于运行而不是等待状态,所以第二种方法可能可行,主要还没试验:)
#1
MainForm.FormStyle:=fsStayOnTop;
#2
设置 窗体的 FormStyle 属性为 fsStayOnTop
#3
也可以直接在你的属性设置里把formstyle的改成fsStayOnTop就可以了,楼上的用代码动态实现也可以,你把那句放到formcreate事件中,不要搞错名字了,也许你的是form1哦,自己看看,
#4
没有用啊,兄弟们,当我激活其他窗口时,就被其他窗口给遮住了啊
#5
FormStyle 属性为 fsStayOnTop
#6
把 主窗口的 FormStyle 属性为 fsStayOnTop
#7
BOOL SetWindowPos(
HWND hWnd, // handle to window
HWND hWndInsertAfter, // placement-order handle
int X, // horizontal position
int Y, // vertical position
int cx, // width
int cy, // height
UINT uFlags // window-positioning options
);
将第二个参数设置为HWND_TOPMOST
SetWindowPos(form1.handle,HWND_TOPMOST,0,0,300,300,0)
HWND hWnd, // handle to window
HWND hWndInsertAfter, // placement-order handle
int X, // horizontal position
int Y, // vertical position
int cx, // width
int cy, // height
UINT uFlags // window-positioning options
);
将第二个参数设置为HWND_TOPMOST
SetWindowPos(form1.handle,HWND_TOPMOST,0,0,300,300,0)
#8
form1.showmodal;
#9
formstyle := fsStayOnTop
#10
主窗体的(Main Form )
MainForm.FormStyle:=fsStayOnTop;
MainForm.FormStyle:=fsStayOnTop;
#11
SetWindowPos(Form.handle,HWND_TOPMOST,0,0,500,500,0)
#12
调用windows api函数SetWindowpos,
BOOL SetWindowPos(
HWND hWnd, // handle to window
HWND hWndInsertAfter, // placement-order handle
int X, // horizontal position
int Y, // vertical position
int cx, // width
int cy, // height
UINT uFlags // window-positioning options
);
是函数原形,
比如:
始终最前:
procedure Tform1.button1click (sender: TObject);
begin
setwindowpos(form1.handle,HWND_TOPMOST,form1.left,form1.top.form1.width,form1.height,o);
end;
恢复正常:
procedure Tform2.button1click (sender: TObject);
begin
setwindowpos(form1.handle,HWND_NOTOPMOST,form1.left,form1.top.form1.width,form1.height,o);
end;
BOOL SetWindowPos(
HWND hWnd, // handle to window
HWND hWndInsertAfter, // placement-order handle
int X, // horizontal position
int Y, // vertical position
int cx, // width
int cy, // height
UINT uFlags // window-positioning options
);
是函数原形,
比如:
始终最前:
procedure Tform1.button1click (sender: TObject);
begin
setwindowpos(form1.handle,HWND_TOPMOST,form1.left,form1.top.form1.width,form1.height,o);
end;
恢复正常:
procedure Tform2.button1click (sender: TObject);
begin
setwindowpos(form1.handle,HWND_NOTOPMOST,form1.left,form1.top.form1.width,form1.height,o);
end;
#13
以上的方法没错
但对于把自己注入到其他进程中,然后热键呼出时就不行了,奇怪
但对于把自己注入到其他进程中,然后热键呼出时就不行了,奇怪
#14
form1.showmodal
#15
在Form1 里面,OnTop Form2:
//方法(一):
procedure TForm1.Button1Click(Sender: TObject);
begin
try
Hide;
Application.NormalizeAllTopMosts;
Form2.ShowModal;
Application.RestoreTopMosts;
finally
Form2.Show;
end;
并且,在Form2的OnShow中,添加代码:
SetWindowPos(Handle,HWND_TOPMOST,0, 0, 0, 0,SWP_NOMOVE or SWP_NOSIZE);
//方法(二):
//重载CreateParams()
TForm2 = class(TForm)
...
public
{ Public declarations }
procedure CreateParams(VAR Params: TCreateParams); override;
..
end;
procedure TForm2.CreateParams(var Params: TCreateParams);
begin
inherited;
with Params do
begin
ExStyle :=ExStyle or WS_EX_TOPMOST;
end;
Params.WndParent := 0;//表示Form2的父窗口不是Form1,就可以最前了
end;
//方法(一):
procedure TForm1.Button1Click(Sender: TObject);
begin
try
Hide;
Application.NormalizeAllTopMosts;
Form2.ShowModal;
Application.RestoreTopMosts;
finally
Form2.Show;
end;
并且,在Form2的OnShow中,添加代码:
SetWindowPos(Handle,HWND_TOPMOST,0, 0, 0, 0,SWP_NOMOVE or SWP_NOSIZE);
//方法(二):
//重载CreateParams()
TForm2 = class(TForm)
...
public
{ Public declarations }
procedure CreateParams(VAR Params: TCreateParams); override;
..
end;
procedure TForm2.CreateParams(var Params: TCreateParams);
begin
inherited;
with Params do
begin
ExStyle :=ExStyle or WS_EX_TOPMOST;
end;
Params.WndParent := 0;//表示Form2的父窗口不是Form1,就可以最前了
end;
#16
Params.WndParent := 0
我怎么没想到呢:)
showmodal一定不行,要使form2弹出且form1进程仍处于运行而不是等待状态,所以第二种方法可能可行,主要还没试验:)
我怎么没想到呢:)
showmodal一定不行,要使form2弹出且form1进程仍处于运行而不是等待状态,所以第二种方法可能可行,主要还没试验:)