Ladenbildschirm bauen

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
mulcheo
Beiträge: 57
Registriert: Do 1. Aug 2013, 15:11

Ladenbildschirm bauen

Beitrag von mulcheo »

Guten Morgen,

ich habe ein kosmetisches Problem, das mit mehr Schwierigkeiten bereitet als gedacht. In meinem Programm lade ich ab und an neue Datensätze. Dann werden mehrere filestreams geöffnet, deren Daten in Objekte transformiert werden etc. etc. je nach Datenset dauert das so 7-10 Sekunden. Nun dachte ich mir, ich baue ein kleines Ladefenster, das den Fortschritt anzeigt, aber Pustkuchen. Wenn ich bspw. FormX mit Label via Formx.show aufrufe, dann baut er es nicht richtig auf (ich bin mir ziemlich sicher, dass es am multitasking liegt; soll heißen, er baut das komplette Form mit Label erst dann fertig auf, wenn die ganzen Ladeprozesse schon durch sind, und er quasi freie Zeit hat). Ich habe etwas experimentiert und bislang nur Memo gefunden, das sozusagen in realtime updatet. Ich kann also im Notfall ein Form mit Memo align = client verwenden.

Nun meine Frage; das geht doch sicher eleganter, oder?
Die beste Lösung wäre, wenn mit dem Erscheinen des Ladefensters alle inputs (insb. keys) vom Hauptfenster unterbunden werden (das funktioniert mit der Memo-Lösung noch nicht - abermals multitaskingprobleme, denke ich). Bonusfrage: falls es ein Dialogfenster wird; kann ich das auch von einer unit aufrufen, die kein form hat?

Liebe Grüße

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1617
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: Ladenbildschirm bauen

Beitrag von corpsman »

Also wenn du das Laden in einem Separaten Thread machst, und dann via Synchronize hin und wieder mal den Fortschritt an die LCL übergibst geht das eigentlich ganz gut (siehe z.B. CopyCommander ) der macht das so.
Es gibt da zwar noch andere Lösungen, aber Sauber ist das dann meistens nicht. Wichtig ist halt das die Arbeit nicht im Hauptthread gemacht wird, denn sonst hat der keine Zeit die Gui zu Aktualisieren ...
--
Just try it

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1639
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: Ladenbildschirm bauen

Beitrag von fliegermichl »

Es geht auch schon alles im Hauptthread.
Wichtig ist, daß vor dem Ladevorgang das Formular selbst vollständig geladen und angezeigt wird.

Also den Ladevorgang in eine separate Routine packen und die z.B. ganz am Schluß von FormActivate aufrufen.

Immer wenn während dem Ladeprozess eine Anzeige aktualisiert werden soll, muß hernach Application.ProcessMessages aufgerufen werden, da dies die Aktualisierung der Formularinhalte anstößt.

Antworten