Autor Beitrag
Trashkid2000
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 561
Erhaltene Danke: 137



BeitragVerfasst: 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

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure TVorschauform.FormShow(Sender: TObject);
begin
      if SaveSize then    //Minimale Größe wird nur beim ersten Aufruf
      begin               //der Vorschau gemerkt! Sonst gibt es Probleme
          MinWidth:= Vorschauform.Width;
          MinHeight:= Vorschauform.Height;
          SaveSize := false;
      end;
      Formsteuerung.Initialize_Vorschauform;  //ist nur für Größenänderung der Form zuständig
      if (Functions.Wahl < 0then
         Functions.Wahl := 0;
      Functions.GeneriereVorschau(Mainform.lb_Dateien.Items[Functions.Wahl]); //Funktion, die die Vorschau generiert
end;


Moderiert von user profile iconNarses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt.
alzaimar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: Fr 26.06.09 06:45 
Lagere die Verarbeitung in einen Thread aus.

_________________
Na denn, dann. Bis dann, denn.
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: 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 user profile iconalzaimar ist besser. ;)

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Trashkid2000 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 561
Erhaltene Danke: 137



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19340
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 26.06.09 12:16 
user profile iconBenBE hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 577
Erhaltene Danke: 14

Win 7, Debian
C# (Visual Studio 2013), PHP, C, C++ (Eclipse, KDevelop)
BeitragVerfasst: Fr 26.06.09 17:45 
Als Tutorial für Thread-Programmierung kann ich übrigens folgendes von user profile iconLuckie 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 561
Erhaltene Danke: 137



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19340
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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.