expertcad/SRC/SCSNormBase/U_Animate.pas
2025-05-12 10:07:51 +03:00

228 lines
5.2 KiB
ObjectPascal
Raw Permalink Blame History

unit U_Animate;
interface
uses
Windows, U_LNG, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, ExtCtrls, U_BaseCommon, U_Common, RzPrgres, siComp,
siLngLnk;
type
TF_Animate = class(TForm)
ProgressBar: TProgressBar;
Animate: TAnimate;
StatusBar: TStatusBar;
pbState: TRzProgressBar;
Timer_Stop: TTimer;
lng_Forms: TsiLangLinked;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormHide(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Timer_StopTimer(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
FCurrPos: Integer;
protected
FLockedFormHandles: TList;
public
{ Public declarations }
//GAnimateInclude : TAnimateInclude;
GMaxProgressPos: Integer;
procedure LockVisibleForms;
procedure UnLockForms;
procedure StartAnimate(ACapt: String; ACommonAVI: TCommonAVI;
AAnimateInclude: TAnimateInclude; AAsModal: Boolean = false);
procedure StartProgress(ACapt: String; ACommonAVI: TCommonAVI; AMaxPos: Integer);
procedure SetProgressPos(APos: integer);
procedure SetStatusDir(AStatusDir: String);
procedure SetStatusCompon(AStatusCompon: String);
procedure StepProgress;
procedure StopAnimate;
end;
{
var
F_Animate: TF_Animate;}
implementation
{$R *.dfm}
{ TF_Animate }
procedure TF_Animate.FormCreate(Sender: TObject);
begin
FLockedFormHandles := TList.Create;
GMaxProgressPos := -1;
end;
procedure TF_Animate.LockVisibleForms;
var
i: integer;
Form: TCustomForm;
begin
FLockedFormHandles.Clear;
for i := 0 to Screen.CustomFormCount - 1 do
begin
Form := Screen.CustomForms[i];
if Form is TForm then
//if Form.ClassName = 'TFSCS_Main' then
//if Form.ClassName <> 'TF_MakeEditCrossConnection' then
if Form <> Self then
if TForm(Form).Visible then
if IsWindowEnabled(Form.Handle) then
begin
FLockedFormHandles.Add(Pointer(Form.Handle));
EnableWindow(Form.Handle, False);
end;
end;
end;
procedure TF_Animate.UnLockForms;
var
i: Integer;
begin
for i := FLockedFormHandles.Count - 1 downto 0 do
EnableWindow(HWnd(FLockedFormHandles[i]), true);
//for i := 0 to FLockedFormHandles.Count - 1 do
// EnableWindow(HWnd(FLockedFormHandles[i]), true);
FLockedFormHandles.Clear;
end;
procedure TF_Animate.StartAnimate(ACapt: String; ACommonAVI: TCommonAVI;
AAnimateInclude: TAnimateInclude; AAsModal: Boolean = false);
begin
Caption := ACapt;
Animate.CommonAVI := ACommonAVI;
Animate.Active := true;
pbState.Visible := false;
ProgressBar.Visible := false;
StatusBar.Visible := false;
pbState.Percent := 0;
Screen.Cursor := crHourGlass;
Application.ProcessMessages;
if AAsModal then
ShowModal
else
Show;
case AAnimateInclude of
aiProgressBar: pbState.Show; //ProgressBar.Show;
aiStatusBar : StatusBar.Show;
end;
ProgressBar.Update;
StatusBar.Update;
LockVisibleForms;
Application.ProcessMessages;
end;
procedure TF_Animate.StartProgress(ACapt: String; ACommonAVI: TCommonAVI; AMaxPos: Integer);
begin
Caption := ACapt;
Animate.CommonAVI := ACommonAVI;
Animate.Active := true;
pbState.Visible := false;
ProgressBar.Visible := false;
StatusBar.Visible := false;
pbState.Percent := 0;
FCurrPos := 0;
GMaxProgressPos := AMaxPos;
Screen.Cursor := crHourGlass;
ProcessMessagesEx;
Show;
pbState.Show;
ProcessMessagesEx;
end;
procedure TF_Animate.SetProgressPos(APos: integer);
begin
APos := Round(APos / GMaxProgressPos * 100);
if APos > 100 then
APos := 100;
pbState.Percent := APos;
//ProgressBar.Position := APos;
Application.ProcessMessages;
end;
procedure TF_Animate.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Animate.Active := false;
ProgressBar.Position := 0;
StatusBar.Panels[0].Text := '';
StatusBar.Panels[1].Text := '';
Screen.Cursor := crDefault;
end;
procedure TF_Animate.FormHide(Sender: TObject);
begin
// ##### <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>s<EFBFBD><73><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> #####
//Position := poMainFormCenter;
end;
procedure TF_Animate.SetStatusCompon(AStatusCompon: String);
begin
StatusBar.Panels[1].Text := AStatusCompon;
StatusBar.Update;
end;
procedure TF_Animate.SetStatusDir(AStatusDir: String);
begin
StatusBar.Panels[0].Text := AStatusDir;
StatusBar.Update;
end;
procedure TF_Animate.StepProgress;
begin
Inc(FCurrPos);
pbState.Percent := Round(FCurrPos / GMaxProgressPos * 100);
ProcessMessagesEx;
end;
procedure TF_Animate.StopAnimate;
begin
try
pbState.Percent := 100;
Timer_Stop.Enabled := true;
Application.ProcessMessages;
Sleep(Timer_Stop.Interval);
UnLockForms;
finally
UnLockForms;
end;
end;
procedure TF_Animate.Timer_StopTimer(Sender: TObject);
begin
TTimer(Sender).Enabled := false;
Close;
end;
procedure TF_Animate.FormDestroy(Sender: TObject);
begin
FreeAndNil(FLockedFormHandles);
end;
end.