![]() |
Progressbar/Label in einem Thread aktualisieren
Hallo,
Ich habe mal folgenden simplen Code erstellt:
Delphi-Quellcode:
Leider werden bei mir keine Formelemente erneuert/beschrieben. Weder die Progressbar noch das Label erhält die gewünschte Eigenschaft zugeordnet.
function ThreadDoit(p: Pointer): Integer;
begin //TLabel Beschreiben Form5.Label5.Caption := 'Tue das ...'; //Funktion aufrufen Form5.Function1(); //TLabel Beschreiben Form5.Label5.Caption := 'Erledige das 2te...'; //Funktion aufrufen Form5.Function2(); //Resultat result := 0; end; procedure TForm5.Begin(Sender: TObject); var hThread : THandle; ThreadID : Cardinal; WaitResult : DWORD; Msg : TMsg; begin hThread := BeginThread(nil, 0, @ThreadDoit, nil, 0, ThreadID); repeat WaitResult := MsgWaitForMultipleObjects(1, hThread, False, INFINITE, QS_ALLINPUT); if WaitResult = WAIT_OBJECT_0 + 1 then begin while PeekMessage(Msg, Handle, 0, 0, PM_REMOVE) do begin TranslateMessage(Msg); DispatchMessage(Msg); end; end; until WaitResult = WAIT_OBJECT_0 end; Was mach ich falsch oder wie bekomme ich das zum laufen?? |
Re: Progressbar/Label in einem Thread aktualisieren
Wieso verwendest Du nicht einfach einen TThread-Nachkommen und führst die Aufrufe der VCL (Label / Progressbar) mit der Synchronize-Methode durch? Schau Dir mal die Demos hierzu an.
|
Re: Progressbar/Label in einem Thread aktualisieren
Zitat:
Gibt es da keine Lösung zu, denn um ehrlich zu sein, finde ich diese Variante "schöner" als TThread variante. |
Re: Progressbar/Label in einem Thread aktualisieren
Ja, die API hat auch Vorteile, aber die VCL ist so aufgebaut, dass nur aus dem Hauptthread auf die Controls zugegriffen werden darf. Du müsstest also dem Hauptthread eine Nachricht schicken, dass er diese Controls eben verändern soll. Genau das macht TThread.Synchronize.
|
Re: Progressbar/Label in einem Thread aktualisieren
Zitat:
Zitat:
|
Re: Progressbar/Label in einem Thread aktualisieren
Zitat:
Du sollest die Delphi-Libraries verwenden, dafür wurden sie schließlich gemacht. Du setzt dich ja auch ins Auto mit Klimaanlage und Servolenkung, obwohl Du gut und gerne auf den ganzen Schnickschnack (Karosserie? Fenster? Sitze? Pah!) verzichten könntest... Nur wenn du -aus welchen Gründen auch immer- eine schlanke EXE benötigst, dann solltest Du auf SysUtils, Classes etc. verzichten, denn der Overhead ist schon gewaltig (obwohl das relativ ist: Meine EXEn haben 10-12MB und da ist es mir wurscht) |
Re: Progressbar/Label in einem Thread aktualisieren
Zitat:
|
Re: Progressbar/Label in einem Thread aktualisieren
Hallo,
ok, danke für die Tips! Ich werde es mal mit einem TThread versuchen.Gibt es eigentlich ein anderes Tutorial als das von M. Puff? |
Re: Progressbar/Label in einem Thread aktualisieren
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:14 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz