| Autor |
Beitrag |
Trashkid2000
      
Beiträge: 561
Erhaltene Danke: 137
|
Verfasst: Fr 26.06.09 06:29
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
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: Fr 26.06.09 06:45
Lagere die Verarbeitung in einen Thread aus.
_________________ Na denn, dann. Bis dann, denn.
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Fr 26.06.09 10:40
Moin und  im Forum!
VCL-Ansatz: Schick dir im FormShow eine selbstdefinierte Message, in deren Handler du dann erst die Aktionen ausführst.
Aber: der Thread-Ansatz von alzaimar ist besser.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Trashkid2000 
      
Beiträge: 561
Erhaltene Danke: 137
|
Verfasst: 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
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Fr 26.06.09 12:08
Nutze ggf. OnActivate mit einer Statusspeicherung, die nur beim ersten Aufruf bearbeitet wird.
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
jaenicke
      
Beiträge: 19340
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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.
|
|
Webo
      
Beiträge: 577
Erhaltene Danke: 14
Win 7, Debian
C# (Visual Studio 2013), PHP, C, C++ (Eclipse, KDevelop)
|
Verfasst: Fr 26.06.09 17:45
Als Tutorial für Thread-Programmierung kann ich übrigens folgendes von Luckie besonders empfehlen, ich arbeite es grade selbst durch und ich find es klasse !
Link : www.delphi-library.d...t=threads%20tutorial
Grüße
Webo
_________________ Man kann nur das aus dem Ärmel schütteln, was man auch vorher reingesteckt hat.
|
|
Trashkid2000 
      
Beiträge: 561
Erhaltene Danke: 137
|
Verfasst: 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
      
Beiträge: 19340
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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.
|
|
|