Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Alle TForm während laufender Berechnung neu zeichnen


UweK - Di 15.01.13 11:13
Titel: Alle TForm während laufender Berechnung neu zeichnen
Hallo,
Mein Programm führt eine langwierige Berechnung aus, so dass ich zwischendurch mal zu einer anderen Anwendung wechseln möchte. Gehe ich zu meinem Programm zurück, sind alle TForm leer und weiß, und werden erst nach Ende der Berechnung neu gezeichnet. Ich möchte aber sofort etwas sehen, z.B. inzwischen in einem TMemo erschienene Zwischenergebnisse.

Die Ereignisbehandlung des Zurückwechselns zu meinem Programm ist mir klar:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
type
  TMainForm = class(TForm)
    ...
    procedure MyApplicationOnActivate(ASender: TObject);
    ...
  end;

TMainForm.MainFormOnCreate(Sender: TObject);
begin
  ...
  Application.OnActivate:= MyApplicationOnActivate;
  ...
end;

procedure TMainForm.MyApplicationOnActivate(Sender: TObject);
begin
  MainForm.Invalidate;
  MainForm.Refresh;
  MainForm.Repaint;
  MainForm.Update;
  Application.ProcessMessages;
end;

In TMainForm.MyApplicationOnActivate komme ich auch korrekt, wie mir ein Breakpoint an dieser Stelle zeigt. Aber keiner von den probierten Befehlen hat eine sofortige Wirkung???

Zusatzfrage: Mein Programm hat etliche TForm, von denen gerade beliebige offen sein könnten. Gibt es eine Möglichkeit, alle offenen TForm auf einen Schlag neu zu zeichnen, ohne sie alle namentlich in TMainForm.MyApplicationOnActivate aufzuzählen?

Für Tipps wäre ich sehr dankbar.

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt
Moderiert von user profile iconNarses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Di 15.01.2013 um 10:37


WasWeißDennIch - Di 15.01.13 11:20

Das Application.ProcessMessages muss innerhalb der langwierigen Berechnung aufgerufen werden. Alternativ könntest Du diese auch in einen Thread auslagern.