![]() |
JvProgressbar.Marquee aus Thread ändern - Fehler
Liste der Anhänge anzeigen (Anzahl: 2)
Guten Morgen,
ich benutze den TJvProgressBar der Jedi’s (JVCL Version 3.33) mit der Eigenschaft Marquee auf true. Dann starte ich einen Thread in dem ich ein Event OnProgress auslöse. In diesem Event möchte ich die Eigenschaft Marquee auf false setzen und „normalen“ Fortschritt im ProgressBar anzeigen. Jedoch wird folgender Fehler ausgelöst: --------------------------- Benachrichtigung über Debugger-Exception --------------------------- Im Projekt threadtest.exe ist eine Exception der Klasse EOSError mit der Meldung 'Systemfehler. Code: 5. Zugriff verweigert' aufgetreten. --------------------------- Anhalten Fortsetzen Hilfe --------------------------- Dies geschieht nur wenn ich die Eigenschaft Marquee verändern möchte. Es stellt kein Problem dar wenn ich z.B. Marquee von Anfang an auf false stelle und nur die Position verändere. Ich kann den Fehler leider nicht richtig debuggen, da ich in der Jedi Unit JvProgressBar in der Methode SetMarquee keinen Haltepunkt setzen kann (Haltepunkt kriegt weißes X). Ich habe zwei kleine Units (Formular und Thread) angehängt. Kann das damit zusammenhängen das ich in der Jedi Unit keinen Haltepunkt setzen kann? Was ist denn an der Eigenschaft Marquee so besonderes? Bin für jede Hilfe dankbar. Freundliche Grüße Florian |
Re: JvProgressbar.Marquee aus Thread ändern - Fehler
Die Lösung steht schon im vom Thread-Wizard eingefügten RIESIGEN Kommentar:
Delphi-Quellcode:
Das heißt, Du musst eine Routine im Thread anlegen, die mit Synchronize die OnProgress Methode aufruft.
{ Wichtig: Methoden und Eigenschaften von Objekten in visuellen Komponenten dürfen
nur in einer Methode namens Synchronize aufgerufen werden, z.B. Synchronize(UpdateCaption); und UpdateCaption könnte folgendermaßen aussehen: procedure TMyTest.UpdateCaption; begin Form1.Caption := 'Aktualisiert in einem Thread'; end; } Falsch (in einem Thread):
Delphi-Quellcode:
So sollte es gehen
procedure TMyTest.Progress(const AProgress: Integer);
begin if Assigned(FOnProgress) then FOnProgress(AProgress); end;
Delphi-Quellcode:
private
FProgress : integer; // Zur Zwischenspeicherung von AProgress procedure TMyTest.DoOnProgress; begin FOnProgress(FProgress); end; procedure TMyTest.Progress(const AProgress: Integer); begin if Assigned(FOnProgress) then begin FProgress := AProgress; Synchronize(DoOnProgress); end; end; |
Re: JvProgressbar.Marquee aus Thread ändern - Fehler
Vielen, vielen Dank Union.
Funktioniert wunderbar. Ich war nur verwirrt weil das Ändern z.B. der Position des Progressbar auch ohne Synchronize funktioniert. Aber mit dieser Lösung kann ich leben. Schönes Wochenende. |
Re: JvProgressbar.Marquee aus Thread ändern - Fehler
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07: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