Autor Beitrag
UweK
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 53
Erhaltene Danke: 1

Win 7
Delphi Enterprise XE6
BeitragVerfasst: Di 15.01.13 11:13 
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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 653
Erhaltene Danke: 160



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