if Key = chr(13) then begin if Self.FormStyle = fsStayOnTop then begin Self.FormStyle := fsNormal; Main.BringToFront; end else Self.FormStyle := fsStayOnTop; end;
试试: setwindowpos(handle,hwnd_topmost,0,0,0,0,swp_nomove or swp_nosize); 取消: setwindowpos(handle,hwnd_notopmost,0,0,0,0,swp_nomove or swp_nosize);
to shmilyjiujiu(啾啾)不懂 1.这个key值是什么地方得到的?我不对这个程序操作,怎么可以得到这个key值?用的钩子吗? 2.这里的13指的什么?对于windows的任何操作,都能发送一个13的值吗?
if Key = chr(13) then //指的是响应Enter键
不用看了,楼上的都不行 1.把我做的部分程序给你参考 unit IFDrag;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls;type TForm1 = class(TForm) private protected procedure CreateParams(var Params: TCreateParams); override; public { Public declarations } end;implementation {$R *.dfm}{ TForm1 }procedure TForm1.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 or WS_EX_TOOLWINDOW; WndParent := GetDesktopWindow; end; end;
to forgetter() 首先谢谢你的关注, 你的方法我在问这个问题之前试过了,不行,这个方法主要是解决非主窗体显示在所有窗体之上的问题。 对于我所说的绝对在前是没有办法的,你可以试验一下运行这个程序,然后用window键弹开开式菜单,你就会发现开始菜单会显示在这个窗体之上。
if Key = chr(13) then begin if Self.FormStyle = fsStayOnTop then begin Self.FormStyle := fsNormal; Main.BringToFront; end else Self.FormStyle := fsStayOnTop; end; 不过是你的程序必须有焦点
to : 楼主~ 1,我的程序是我开发的一个项目中的一个代码。所以,是可行的。2,if Key = chr(13) then 我给用户的设定是 现在界面上点击一下鼠标(对程序来说, 是为了获得焦点)然后当用户敲击回车键,如果当前窗口为置顶,则取消给设置;如果不为置顶,则设置为置顶~还有什么问题嘛~
to shmilyjiujiu(啾啾) 首先,谢谢你的关注,但是我想你还是没有仔细看我的问题。 我要求这个窗口绝对的在最上面,无论这个窗体有没有获得焦点。 况且,就算这样置顶了,对开始菜单还是没有办法。
不过我相信一定可以做出来,因为我见过这样的程序。
TO 楼主 : 我也有开始菜单。 我是加了一个选择框在form上面,默认为 不显示边框(针对form),选择时候再把form的边框显示。你有个菜单的话,可以在form.show的时候把菜单visible打成false。 if Checkbox1.Checked then begin PlayForm.BorderStyle := bsSizeable; PlayForm.Top := StrToInt(windows_Top.Text) - NoneTitle_Size; PlayForm.Height := StrToInt(windows_Height.Text) + NoneTitle_Size; end else begin PlayForm.BorderStyle := bsNone; PlayForm.Top := StrToInt(windows_Top.Text) + NoneTitle_Size; PlayForm.Height := StrToInt(windows_Height.Text) - NoneTitle_Size; end;至于是否获得焦点的问题,你可以不相应key=13这个事件啊。为什么一定要和我的代码一样?? 你不加if Key = chr(13) then不就可以了嘛????form的create或者show的时候,写代码不久可以了嘛??
if Key = chr(13) then
begin
if Self.FormStyle = fsStayOnTop then
begin
Self.FormStyle := fsNormal;
Main.BringToFront;
end
else Self.FormStyle := fsStayOnTop;
end;
setwindowpos(handle,hwnd_topmost,0,0,0,0,swp_nomove or swp_nosize);
取消:
setwindowpos(handle,hwnd_notopmost,0,0,0,0,swp_nomove or swp_nosize);
1.这个key值是什么地方得到的?我不对这个程序操作,怎么可以得到这个key值?用的钩子吗?
2.这里的13指的什么?对于windows的任何操作,都能发送一个13的值吗?
//指的是响应Enter键
1.把我做的部分程序给你参考
unit IFDrag;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls;type
TForm1 = class(TForm)
private
protected
procedure CreateParams(var Params: TCreateParams); override;
public
{ Public declarations }
end;implementation
{$R *.dfm}{ TForm1 }procedure TForm1.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 or WS_EX_TOOLWINDOW;
WndParent := GetDesktopWindow;
end;
end;
首先谢谢你的关注,
你的方法我在问这个问题之前试过了,不行,这个方法主要是解决非主窗体显示在所有窗体之上的问题。
对于我所说的绝对在前是没有办法的,你可以试验一下运行这个程序,然后用window键弹开开式菜单,你就会发现开始菜单会显示在这个窗体之上。
begin
if Self.FormStyle = fsStayOnTop then
begin
Self.FormStyle := fsNormal;
Main.BringToFront;
end
else Self.FormStyle := fsStayOnTop;
end;
不过是你的程序必须有焦点
1,我的程序是我开发的一个项目中的一个代码。所以,是可行的。2,if Key = chr(13) then 我给用户的设定是 现在界面上点击一下鼠标(对程序来说, 是为了获得焦点)然后当用户敲击回车键,如果当前窗口为置顶,则取消给设置;如果不为置顶,则设置为置顶~还有什么问题嘛~
我要求这个窗口绝对的在最上面,无论这个窗体有没有获得焦点。
况且,就算这样置顶了,对开始菜单还是没有办法。
不过我相信一定可以做出来,因为我见过这样的程序。
我也有开始菜单。 我是加了一个选择框在form上面,默认为 不显示边框(针对form),选择时候再把form的边框显示。你有个菜单的话,可以在form.show的时候把菜单visible打成false。
if Checkbox1.Checked then
begin
PlayForm.BorderStyle := bsSizeable;
PlayForm.Top := StrToInt(windows_Top.Text) - NoneTitle_Size;
PlayForm.Height := StrToInt(windows_Height.Text) + NoneTitle_Size;
end
else
begin
PlayForm.BorderStyle := bsNone;
PlayForm.Top := StrToInt(windows_Top.Text) + NoneTitle_Size;
PlayForm.Height := StrToInt(windows_Height.Text) - NoneTitle_Size;
end;至于是否获得焦点的问题,你可以不相应key=13这个事件啊。为什么一定要和我的代码一样?? 你不加if Key = chr(13) then不就可以了嘛????form的create或者show的时候,写代码不久可以了嘛??
你还是误会我的意思了,你看看我的描述,这里的开始菜单是windows的开始菜单,不是自己定义的,况且,windows的开始菜单只是我能想到的一种情况,难说还有别的东西会跑到,这个窗体的上面。
看看我给forgetter的回复to forgetter()
首先谢谢你的关注,
你的方法我在问这个问题之前试过了,不行,这个方法主要是解决非主窗体显示在所有窗体之上的问题。
对于我所说的绝对在前是没有办法的,你可以试验一下运行这个程序,然后用window键弹开开式菜单,你就会发现开始菜单会显示在这个窗体之上。
setwindowpos
(form1.Handle,HWND_TOPMOST,form1.Left,form1.Top,form1.Width,form1.Height,0);
取消放在最上面:
setwindowpos(form1.Handle,HWND_NOTOPMOST,form1.Left,form1.Top,form1.Width,form1.Height,0);
致于,要在开始菜单的前面,这个效果在印像中好像看过,就是不知是那个家伙写出来的还没搞定,只能帮你顶