Delphi-PRAXiS
Seite 5 von 6   « Erste     345 6      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   "Unendlicher Progressbar" (https://www.delphipraxis.net/204857-unendlicher-progressbar.html)

skoschke 10. Jul 2020 11:31

AW: "Unendlicher Progressbar"
 
Danke für den Tip, leider ändert das nichts an der Ladezeit...

Ciao
Stefan

stahli 10. Jul 2020 11:34

AW: "Unendlicher Progressbar"
 
Wie lange ist denn die Ladezeit (bzw. die Hänge-Dauer des Formulars)?
- für ein Dokument?
- für alle n Dokumente?

skoschke 10. Jul 2020 13:08

AW: "Unendlicher Progressbar"
 
Beim ersten Panel / Dokument ca. 3 sec, alle weiteren gehen schneller (ca. 1 sec)

Ciao
Stefan

Uwe Raabe 10. Jul 2020 13:15

AW: "Unendlicher Progressbar"
 
Kannst du mal den Code zeigen, der das Erzeugen der Komponenten und das Laden ausführt?

stahli 10. Jul 2020 13:30

AW: "Unendlicher Progressbar"
 
Zitat:

Zitat von skoschke (Beitrag 1469297)
Beim ersten Panel / Dokument ca. 3 sec, alle weiteren gehen schneller (ca. 1 sec)

Ciao
Stefan

Steuerst Du jedes erzeugen/laden selbst?

Dann würde ich wieder bei einem Label oder Panel landen...

Angenommen Du lädst 10 Komponenten, dann

Label.Caption := '1/10';
Label.Update;
Dokument1Laden;
Label.Caption := '2/10';
Label.Update;
Dokument2Laden;
...
Label.Caption := '10/10';
Label.Update;
Dokument10Laden;

Label.Visible := False;

Dann würde der Nutzer ja ausreichend sehen, dass sich etwas tut.

Alles andere wäre deutlich aufwendiger und würde nicht mehr bringen.

himitsu 10. Jul 2020 16:03

AW: "Unendlicher Progressbar"
 
Statt Update ein Label.Repaint oder eventuell Label.Parent.Repaint benutzen
oder eventuell ein TStaticText statt TLabel versuchen.

TLabel hat keinen eigenen Canvas und lässt sich von seinem Parent zeichnen.

Und Update zeichnet nur das neu, als vorher als "veraltet" gekennzeichnet wurde.
Ein Repaint macht dagegen Invalidate + Update.

Benmik 10. Jul 2020 18:01

AW: "Unendlicher Progressbar"
 
Zitat:

Zitat von philipp.hofmann (Beitrag 1469242)
Vielleicht eine andere Lösung: In meiner App läuft eh im Hauptthread ein Timer mit...

Ich finde diesen Vorschlag eigentlich sehr gut. Man könnte doch einfach eine globale Stringvariable nehmen, deren Inhalt auf der Form angezeigt und die vom Timer jede Sekunde oder so aktualisiert wird. In die Strecke der Komponentenerzeugung fügt man in diese Variable immer wieder Informationen über den gegenwärtigen Stand ein. Man kann über den Timer zusätzlich die Anzahl der verstrichenen Sekunden einfügen, so dass sich die Anzeige ändert, auch wenn die nächste Information noch nicht erreicht ist. So sieht der Anwender, dass die Anwendung nicht hängt. Das erscheint mir doch einfach und effektiv.

stahli 10. Jul 2020 18:07

AW: "Unendlicher Progressbar"
 
Der Timer feuert aber nicht, solange der Mainthread beschäftigt ist.
(Kannst Du mit Sleep oder einer länger laufenden Schleife testen.)

himitsu 10. Jul 2020 18:10

AW: "Unendlicher Progressbar"
 
und den Zugriff auf diese Variablen müsste man dennoch synchronisieren, z.B.
* CriticalSection
* oder bei Integer, LongBool und Dergleichen kann auch Atomar gearbeitet werden

MSDN-Library durchsuchenInterlockedExchange, InterlockedCompareExchange, InterlockedOr, InterlockedAnd, InterlockedAdd, InterlockedIncrement
bzw. Delphi-Referenz durchsuchenAtomicExchange, AtomicCmpExchange, AtomicIncrement, ...

Benmik 10. Jul 2020 18:14

AW: "Unendlicher Progressbar"
 
Na gut. Ich mache das bei meiner Bilderladerei so, dass ich in den Schleifen bei jedem Durchgang eine Prozedur aufrufe, die prüft, ob entweder eine bestimmte Anzahl von Bildern geladen oder ob eine Sekunde verstrichen ist (über GetTickCount). Diese Prüfung scheint kaum Zeit zu verbrauchen. Das müsste das Problem doch endlich killen.
Zitat:

Zitat von himitsu (Beitrag 1469324)
und den Zugriff auf diese Variablen müsste man dennoch synchronisieren...

Wieso denn, es gibt doch kein Multithreading. Und wenn doch, ich lade die Bilder ja auch parallel, das funktioniert trotzdem.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:32 Uhr.
Seite 5 von 6   « Erste     345 6      

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