den heutigen Vormittag habe ich mit der erfolglosen Suche danach verbracht, wie man das sofortige Aktualisieren einer visuellen Komponente, im Spezialfall hier eines Memofelds für diverse Ausgaben wirklich sicherstellen kann.
In dem Zusammenhang dachte ich an .Repaint und .Update und/oder Application.ProcessMessages, was ich auch immer wieder empfohlen fand, aber es will bei mir einfach nicht. Meine Umgebung: Lazarus 1.2.4 (von gtk2 umgestellt auf qt, weil mit gtk keine AccelChars in der Menüleiste funktionieren) auf Debian/testing (64 bit).
Man nehme für den simpelsten Fall ein leeres Form1 mit einem Button1 und einem Memo1 drauf und folgende
Code: Alles auswählen
procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Text:='Start...';
WriteLn('Start...');
Memo1.Repaint;
Memo1.Update;
Application.ProcessMessages;
Sleep(1000); //oder beliebig lange
Memo1.Text:=Memo1.Text + ' Fertig.';
WriteLn('Fertig.');
end;
Habe alle Kombinationen Permutationen von .update, .invalidate, .repaint auf dem Memo (und desgleichen mit Form1) durch, doch nie funktioniert es wie erwartet.
Weiß jemand von den Lazarus-Experten hier vielleicht, wie man das am besten löst?