📄 myldbdlgwait.pas
字号:
unit MYLDBDlgWait;
interface
{$I MYLDBVer.inc}
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ComCtrls, ExtCtrls;
type
TfrmWait = class(TForm)
lMessage: TLabel;
btnCancel: TButton;
pb: TProgressBar;
btnBgMode: TButton;
ShowTimer: TTimer;
procedure FormHide(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure btnCancelClick(Sender: TObject);
procedure btnBgModeClick(Sender: TObject);
procedure ShowFormOnTimer(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
EWindowList:pointer;
EActiveWindow:HWND;
OldOnRestore: TNotifyEvent;
IsShown: Boolean;
IsClosed: Boolean;
function MessageHook(var Msg: TMessage): Boolean;
procedure Restore(Sender: TObject);
public
{ Public declarations }
Terminated: boolean;
procedure Show(text: String);
procedure Close;
end;
implementation
{$R *.DFM}
{ TfrmWait }
procedure TfrmWait.Show(text: String);
begin
lMessage.Caption:=text;
Terminated := false;
ActiveControl:=btnCancel;
OldOnRestore:=Application.OnRestore;
IsShown := False;
IsClosed := False;
ShowTimer.Enabled := True;
end;
procedure TfrmWait.FormShow(Sender: TObject);
begin
ShowTimer.Enabled := False;
EActiveWindow := GetActiveWindow;
Application.HookMainWindow(MessageHook);
EWindowList := DisableTaskWindows(0);
IsShown := True;
end;
procedure TfrmWait.FormHide(Sender: TObject);
begin
ShowTimer.Enabled := False;
if (IsShown) then
begin
Application.UnhookMainWindow(MessageHook);
EnableTaskWindows(EWindowList);
SetActiveWindow(EActiveWindow);
IsShown := False;
end;
end;
function TfrmWait.MessageHook(var Msg: TMessage): Boolean;
begin
Result := False;
end;
procedure TfrmWait.btnCancelClick(Sender: TObject);
begin
Terminated := true;
end;
procedure TfrmWait.btnBgModeClick(Sender: TObject);
begin
Application.OnRestore := Restore;
Hide;
Application.Minimize;
Application.ProcessMessages;
end;
procedure TfrmWait.Restore(Sender: TObject);
begin
Application.OnRestore:=OldOnRestore;
Show(lMessage.Caption);
Application.ProcessMessages;
end;
procedure TfrmWait.Close;
begin
Application.OnRestore:=OldOnRestore;
Hide;
Application.Restore;
IsClosed := True;
TForm(Self).Close;
end;
procedure TfrmWait.ShowFormOnTimer(Sender: TObject);
begin
ShowTimer.Enabled := False;
if ((not IsClosed) and (pb.Position <= 50)) then
inherited show;
Application.ProcessMessages;
end;
procedure TfrmWait.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
end;
initialization
finalization
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -