Ich bastel gleich mal eine Demo. Die Profis werden mich für den Code vermutlich zerreißen. Aber das ist das Resultat aus verschiedensten Empfehlungen.
Demo kommt gleich.
Hauptunit
Delphi-Quellcode:
type
TForm1 ...
private
...
ProgressThread: TProgressThread;
public
...
procedure WndProc(var msg: TMessage); override;
end;
const
WM_PROGRESS_SET = WM_USER + 1;
implementation
{$R *.dfm}
procedure TForm1.WndProc(var msg: TMessage);
begin
inherited;
case msg.msg of
WM_PROGRESS_SET:
begin
ProgressBar1.Position := msg.WParam;
end;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ProgressBar1.Max := 1000;
ProgressThread := TProgressThread.Create(Form1.Handle);
end;
Thread
Delphi-Quellcode:
unit uProgressThread;
interface
uses
Winapi.Windows, System.Classes;
type
TProgressThread =
class(TThread)
protected
var
DestinationWindowHandle: THandle;
private
{Private-Deklarationen}
protected
procedure Execute;
override;
public
constructor Create(
const DestinationWindowHandle: THandle);
end;
implementation
uses Unit1;
{TProgressThread}
constructor TProgressThread.Create(
const DestinationWindowHandle: THandle);
begin
inherited Create;
Self.DestinationWindowHandle := DestinationWindowHandle;
end;
procedure TProgressThread.Execute;
var
i: Integer;
begin
for i := 0
to 1000
do
begin
if Terminated
then
Break;
PostMessage(DestinationWindowHandle, WM_PROGRESS_SET, i, 0);
Sleep(25);
end;
end;
end.
Das ist jetzt einfach nur schnell hingeschrieben. Die Kernfunktionalität (WndProc, PostMessage, Thread), sollte aber klar sein.