type
TCallback = procedure of Object;
TMyThread = class(TThread)
private
FCallback: TCallback;
FStatusText: string;
procedure DoWork;
protected
procedure Execute; override;
public
constructor Create(CreateSuspended : boolean);
property Callback: TCallback read FCallback write FCallback;
end;
{ TMyThread }
constructor TMyThread.Create(CreateSuspended : boolean);
begin
FreeOnTerminate := False;
inherited Create(CreateSuspended);
end;
procedure TMyThread.DoWork;
begin
if Assigned(FCallback) then
FCallback;
end;
procedure TMyThread.ShowStatus;
begin
Form1.Caption := FStatusText;
end;
procedure TMyThread.Execute;
var k:integer;
begin
Synchronize(@ShowStatus);
DoWork;
// Close after work
Self.Suspend;
end;
{ TForm1 }
procedure TForm1.WaitProc(T:TMyThread);
begin
while not T.Suspended do
begin
Sleep(1000);
inc(ProgressBar1.Position);
Application.ProcessMessages;
end;
end;
BEGIN
MyThread := TMyThread.Create(True);
MyThread.OnTick := @VeryLongOperation;
MyThread.Resume;
WaitProc(MyThread);
MyThread.Free;
END.
Free Pascal Справочник v0.05 © 2007-2025 Igor Salnikov aka SunDoctor