Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Programm weiterlaufen lassen


Flamefire - Mo 08.01.07 11:28
Titel: Programm weiterlaufen lassen
Ich habe eine Funktion, die ausgeführt wird, wenn man auf einen Button klickt...
Diese dauert aber sehr lange, sodass ich einen Status dazu anzeigen will...
Jetzt ist aber das Problem, dass das Programm solange komplett ausgelastet ist, dass Anzeigen, neue Eingaben etc. erst gemacht werden, wenn die Funktion fertig ist
Kann ich den Ablauf i-wie in den "Hintergrund bringen"? also so, dass alles weiterabläuft und die Funktion die Stati in ein Label o.ä. ausgibt?


Narses - Mo 08.01.07 12:09

Moin und :welcome: im Forum!

Entweder du fügst Application.ProcessMessages; in deine Rechenschleife ein (aber nicht zu oft aufrufen, kostet sonst noch mehr Rechenzeit) oder du machst die Berechnung ein einem Suche in: Delphi-Forum, Delphi-Library THREAD.

cu
Narses


Pille - Mo 08.01.07 12:10

Füge in die Fnktionsschleife ein

Delphi-Quelltext
1:
Application.ProcessMessages                    

ein.

mfg Pille


Flamefire - Mo 08.01.07 14:09

ok mit processmessages wirds schon gehen...
es gibt ja in delphi den fortschrittsbalken. ist der update des balkens bei processmessages dabei?


freedy - Mo 08.01.07 14:13

Wenn du einen neuen Wert in der Progressbar einstellst, wird diese beim nächsten Aufruf von ProcessMessages neugezeichnet. Aber vorsicht: nicht in jedem Zyklus neuzeichen. Die Progressbar verbraucht relativ viel Resourcen. Lieber ungefähr sowas:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
  for I := 0 to 1000 do 
  begin
    if (I mod 5 = 0then
    begin
      Application.ProcessMessages;
      // vielleicht noch was
    end;
    
    // blabla
  end;