Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - erst nach Anzeige der Form Funktionsaufruf
Trashkid2000 - Fr 26.06.09 06:29
Titel: erst nach Anzeige der Form Funktionsaufruf
Hallo an alle zusammen,
Ich programmiere eine Software, mit der man Textdateien massenhaft bestimmter Kriterien ändern kann. Dabei gibt es auch ein Vorschaufenster, womit man erst einmal die zu erledigen Änderungen an der Datei sieht.
So, nun meine Frage:
Die Funktion, die die jeweilige Datei einliest, rufe ich von der FormShow- Methode der Vorschauform auf. Da jedoch manche Dateien sehr groß sein können, dauert es dann sehr lange, bis die Form angezeigt wird. Es soll also so sein, dass erst die Vorschauform angezeigt wird, und dann die Funktion abgearbeitet wird.
Aber irgendwie kriege ich das nicht gebacken.
Bin dankbar für jede Anregung,
Marko
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure TVorschauform.FormShow(Sender: TObject); begin if SaveSize then begin MinWidth:= Vorschauform.Width; MinHeight:= Vorschauform.Height; SaveSize := false; end; Formsteuerung.Initialize_Vorschauform; if (Functions.Wahl < 0) then Functions.Wahl := 0; Functions.GeneriereVorschau(Mainform.lb_Dateien.Items[Functions.Wahl]); end; |
Moderiert von
Narses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt.
alzaimar - Fr 26.06.09 06:45
Lagere die Verarbeitung in einen Thread aus.
Narses - Fr 26.06.09 10:40
Moin und :welcome: im Forum!
VCL-Ansatz: Schick dir im FormShow eine selbstdefinierte Message, in deren Handler du dann erst die Aktionen ausführst. :idea:
Aber: der Thread-Ansatz von
alzaimar ist besser. ;)
cu
Narses
Trashkid2000 - Fr 26.06.09 11:40
Danke für euren schnellen Antworten!
Habe unter Delphi noch nicht mit Threads programmiert.
Aber habe, als wir das Thema in der Schule mit Java hatten, auch schon mal daran gedacht, um mein Programm zu optimieren.
Werde mich am WE mal mit Threadprogrammierung befassen,
danke für den Tip!
Marko
BenBE - Fr 26.06.09 12:08
Nutze ggf. OnActivate mit einer Statusspeicherung, die nur beim ersten Aufruf bearbeitet wird.
jaenicke - Fr 26.06.09 12:16
BenBE hat folgendes geschrieben : |
| Nutze ggf. OnActivate mit einer Statusspeicherung, die nur beim ersten Aufruf bearbeitet wird. |
Naja, das wäre gar nicht nötig, einfach in OnShow den Eventhandler zuweisen und in OnActivate selbst OnActivate auf nil setzen.
Aber das halte ich für keine so schöne Lösung, da sind die anderen schon passender. Insbesondere Threads, denn dann kann man mit dem schon bearbeiteten Teil und dem Formular derweil normal arbeiten.
Trashkid2000 - Mo 29.06.09 18:51
Okay, habe es jetzt hinbekommen.
Habe die Funktion nun in einen Thread ausgelagert. Sehr schön.
Jetzt muss ich nur noch recherchieren, wie ich einen Thread für eine Abbruchfunktion killen kann.
Also besten Dank,
Marko
jaenicke - Mo 29.06.09 19:01
Indem du dem Thread mittels Terminate sagst, dass er abbrechen soll. Der Thread selbst muss mit Terminated prüfen, ob das der Fall ist und den Vorgang ggf. abbrechen.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!