16,748
社区成员
发帖
与我相关
我的任务
分享
unit frm_Main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TTopMostThread = class(TThread)
protected
FMainHandle: HWND;
procedure Execute; override;
public
constructor Create(AMainHandle: HWND);
end;
TfrmMain = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
FSetTop: TTopMostThread;
public
{ Public declarations }
end;
var
frmMain: TfrmMain;
implementation
{$R *.dfm}
{ TTopMostThread }
constructor TTopMostThread.Create(AMainHandle: HWND);
begin
FreeOnTerminate := True;
FMainHandle := AMainHandle;
inherited Create(False);
end;
procedure TTopMostThread.Execute;
begin
while not Terminated do
begin
SetWindowPos(FMainHandle,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE or SWP_NOSIZE);
Sleep(100); //可适当调整此值
end;
end;
procedure TfrmMain.FormCreate(Sender: TObject);
begin
FSetTop := TTopMostThread.Create(Self.Handle);
end;
procedure TfrmMain.FormDestroy(Sender: TObject);
begin
FSetTop.Terminate;
end;
end.
Application.NormalizeTopMosts;
SetWindowPos(self.Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE);
XE的Form有一个styleform属性就可以搞定var
WindowList: Pointer;
ActiveWindow: HWnd;
begin
ActiveWindow := GetActiveWindow;
WindowList := DisableTaskWindows(ActiveWindow);
{*显示进程对话框*}
try
if dlgProgress = nil then
dlgProgress := TdlgProgress.Create(Application);
dlgProgress.FormStyle:=fsStayOnTop;
dlgProgress.Show; //CSH
dlgProgress.MessageText.Caption := msg_calculactioning;
dlgProgress.Update;
finally
EnableTaskWindows(WindowList);
if ActiveWindow <> 0 then SetActiveWindow(ActiveWindow);
end;
end;
SetWindowPos(handle,HWND_TOPMOST,Left,Top,Width,Height,SWP_SHOWWINDOW)
form1.FormStyle:=fsStayOnTop