Updates der Form funktionieren nicht

Antworten
Edwa
Beiträge: 3
Registriert: Mi 3. Apr 2013, 11:14

Updates der Form funktionieren nicht

Beitrag von Edwa »

Ich schreibe unter anderem an ein paar Projekten, in denen große Mengen Daten eingelesen und analysiert werden (ein Durchlauf kann 10 Minuten dauern).
In Delphi habe ich immer textfelder mit dem Status gefüllt und ab und an "refresht" um den Nutzer anzuzeigen, dass noch was passiert.
Ähnliches habe ich für Graphen gemacht, in denen ich Zwischenergebnisse geplottet habe. (z.B. image1.refresh)
Wenn ich mit solchen Befehlen unter OS-X compiliere passiert gar nix.
Dasselbe Projekt under W7 kompiliert macht das was ich will. :evil:

Was läuft hier falsch?

Ede

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Updates der Form funktionieren nicht

Beitrag von Socke »

Edwa hat geschrieben:ein Durchlauf kann 10 Minuten dauern

Nur?! Nach meiner Erfahrung können das keine großen Datenmenge oder keine komplexen Analysen sein :D

Edwa hat geschrieben:Wenn ich mit solchen Befehlen unter OS-X compiliere passiert gar nix.
Dasselbe Projekt under W7 kompiliert macht das was ich will. :evil:

Versuch mal Application.ProcessMessages; nach dem Refresh aufzurufen. Wenn das keine Abhilfe schafft, könnte das ein Bug sein, den du gerne im Bugtracker eintragen darfst (dann wäre ein Minimalbeispiel hilfreich). Andernfalls sollten Threads die Problemstellung beseitigen.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

jwdietrich
Beiträge: 167
Registriert: Mo 20. Okt 2008, 20:50
OS, Lazarus, FPC: macOS 10.4-13.4, Windows 2000-11, Raspbian (L 2.2.6, FPC 3.2.2)
CPU-Target: PowerPC, Intel, ARM
Wohnort: Hattingen, NRW
Kontaktdaten:

Re: Updates der Form funktionieren nicht

Beitrag von jwdietrich »

Ich würde dringend empfehlen, eine derart komplexe Berechnung mit MultiThreading zu realisieren, d. h. die Rechnung läuft in einem Thread, die Benutzeroberfläche in einem anderen. Dann bleibt das Programm während des Laufs benutzbar und die Berechnung kann auf Wunsch auch angehalten oder abgebrochen werden.

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: Updates der Form funktionieren nicht

Beitrag von Christian »

Eigentlich könnt ich ja helfen, aber der smiley nervt mich :)
1. Das Problem liegt bei dir.
2. Bleib doch bei Delphi
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

gocher
Beiträge: 298
Registriert: Di 23. Nov 2010, 23:41
OS, Lazarus, FPC: Ubuntu/Win, Lazarus trunk, FPC trunk
CPU-Target: 32Bit/64Bit
Wohnort: Geldern
Kontaktdaten:

Re: Updates der Form funktionieren nicht

Beitrag von gocher »

Für solche Fälle nutze ich:

Code: Alles auswählen

 
    Statusbar: TPanel;
    edtStatusBar: TEdit;
    ProgressBar: TProgressBar;
...
        ProgressBar.Position := 0;
        ProgressBar.Max := iMax;
...Loop...
        ProgressBar.Position := iAct;
        edtStatusBar.Text := info;
        edtStatusBar.Repaint;
        Application.ProcessMessages;
...Loop End...


und das natürlich am besten in einem Thread!

ODER

Ich nutze eine Konsolen-Anwendung oder Daemon im Hintergrund für mich erscheint es nicht sinnvoll eine Auswertung (z.B. was bei mir häufig vorkommt Logfile-Auswertung) in einer GUI-Anwendung auszuführen! Eine GUI-Anwendung verbraucht viel zu viel Zeit fürs Repaint etc., mit Write(Ln) gebe ich dann zwischendurch an was im Augenblick passiert, ob auf Konsole oder in eine Logging Datei!

:shock: Ach so ja, ich stelle seit ca. 2 Jahren so langsam all meine Projekte auf Free Pascal / Lazarus um, lediglich das erzeugen von Active-X Objekten passiert noch unter Delphi (hoffentlich das auch nicht mehr lange) und Aktualisierung uralter Software wo eine Portierung hoffentlich keinen Sinn mehr macht, also der Schritt nach Delphi wäre für mich ein Schritt zurück, besonders unter dem Gesichtspunkt der Flexibilität!
MfG Gocher
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me

Antworten