16,748
社区成员
发帖
与我相关
我的任务
分享
示例
unit Unit4;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs;
const
WM_AFTER_SHOW = WM_USER + 1;
type
TFrm_editBom = class(TForm)
procedure FormShow(Sender: TObject);
private
procedure WmAfterShow (var Msg: TMessage); message WM_AFTER_SHOW;
public
{ Public declarations }
end;
var
Frm_editBom: TFrm_editBom;
function ForceForegroundWindow(hWnd: THandle): Boolean;
implementation
{$R *.dfm}
procedure TFrm_editBom.FormShow(Sender: TObject);
begin
PostMessage(Handle, WM_AFTER_SHOW, 0, 0);
end;
procedure TFrm_editBom.WmAfterShow(var Msg: TMessage);
begin
Application.ProcessMessages;
ForceForegroundWindow(Handle);
end;
function ForceForegroundWindow(hWnd: THandle): Boolean;
var
HelpForm: TForm;
begin
HelpForm := TForm.Create(nil);
try
HelpForm.BorderStyle := bsNone;
HelpForm.SetBounds(0, 0, 1, 1);
HelpForm.FormStyle := fsStayOnTop;
HelpForm.Show;
mouse_event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
SetForegroundWindow(hWnd);
finally
HelpForm.Free;
end;
Result := True;
end;
end.
或者:
function ForceForegroundWindow(hWnd: THandle): Boolean;
var
HelpForm: TForm;
begin
HelpForm := TForm.Create(nil);
try
HelpForm.BorderStyle := bsNone;
HelpForm.SetBounds(0, 0, 1, 1);
HelpForm.FormStyle := fsStayOnTop;
HelpForm.Show;
mouse_event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
SetForegroundWindow(hWnd);
finally
HelpForm.Free;
end;
Result := True;
end;
//这样不是更好吗:
with TFrm_editBom.Create(nil) do
begin
ShowModal;
Free;
end;