Ok, folgende Aufgabenstellung:
Ein Formular soll angezeigt werden und soll sofort einige Dinge abarbeiten und gleichzeitig den Fortschritt anzeigen.
Das Problem dabei ist, dass Delphi kein Event ala
OnAfterShow bereitstellt.
Die Events OnActivate und OnShow werden schon abgefeuert, wenn das Formular noch gar nicht sichtbar ist.
Das ist die Erklärung dafür weshalb dein Beispiel nicht funktionieren kann.
Es gibt zwei mögliche Lösungen:
Lösung A:
1.) einen Timer auf's Formular setzen, Enabled=False und Interval auf 1000
2.) deinen gesamten Code aus dem OnTimer-Event aufrufen
3.) der 1. Befehl im OnTimer-Event muss sein Timer1.Enabled := False;
so wird verhindert, dass der Code mehrfach ausgeführt wird
4.) im Event
OnShow wird der Timer gestartet
Delphi-Quellcode:
procedure TForm1.FormOnShow(Sender:TObject);
begin
Timer1.Enabled := True;
end;
procedure TForm1.Timer1OnTimer(Sender:TObject);
begin
Timer1.Enabled := False;
DoMyWork;
end;
procedure TForm1.DoMyWork;
begin
// hier deinen gesamten Arbeitcode rein
end;
Lösung B:
hier wird aus OnShow eine Windows-Message an das eigene Formular geschickt.
Wie das genau funktioniert verrate ich wenn du Lösung A erfolgreich probiert hast.