[gelöst]Progressbar update

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
atroesch
Beiträge: 36
Registriert: Mo 7. Jul 2025, 10:05

[gelöst]Progressbar update

Beitrag von atroesch »

Hallo,
ich lasse auf einer form eine progressbar mit visible=true erscheinen bevor ich ein sqlscript auf die datenbank loslasse.
wollte solange das script durchläuft die progressbar mit einem marquee laufen lassen.
nach dem script geht die progressbar wieder auf visible.false...
funktioniert aber nicht.
nach suchen im netz habe ich etliches gefunden was mit threads zu tun hat?
wenn die progressbar nur in schleifen genutzt werden kann um dort ein update zu bekommen, ist das doch irgendwie
sinnfrei?
wie setzt ihr das um?
Zuletzt geändert von atroesch am So 10. Aug 2025, 10:16, insgesamt 1-mal geändert.

Benutzeravatar
theo
Beiträge: 10978
Registriert: Mo 11. Sep 2006, 19:01

Re: Progressbar update

Beitrag von theo »

Das ist ein allgemeines Phänomen.
So lange etwas Blockierendes im Haupt-Thread läuft, reagiert nichts anderes im GUI.
Entweder den Script-Teil in einen separaten Thread auslagern, oder in Blöcke aufteilen und immer mal wieder Application.Processmessages aufrufen.

https://wiki.freepascal.org/Multithread ... se_TThread

charlytango
Beiträge: 1146
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: Progressbar update

Beitrag von charlytango »

hmm...

definiere mal bitte von welchem "SQL Script" die Rede ist.
Ein paar SQL Statemments, oder der Restore einer ganzen DB ?

nur einige Konzepte zur Benutzerinformation:

A-- einfach den Mauszeiger auf SQL setzen und danach wieder zurückstellen.

B -- Den Progressbar anzeigen, danach Application.Processmessages absetzen wie @theo empfohlen hat(erst dann wird neu gezeichnet). Erst danach das Script starten und mit try-finally gesichert wieder den ursprungszustand herstellen. Danach nochmal mit Application.Processmessages neu zeichnen.

C -- Wenn das script sehr lange dauert (alles was zb über 30 sek geht) zuerst den benutzer mittels irgendeiner Message warnen dass jetzt ein längerer Prozess ansteht -- dann verändert man dessen Erwartungshaltung.

D -- das script in mehrere Teile zerschneiden, diese Teile einzeln abarbeiten lassen. Dazwischen den Progressbar updaten.

und eine Mischung aus allen Möglichkeiten ggg

Antworten