Einzelnen Beitrag anzeigen

Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#7

AW: "Bitte warten"-Formular korrekt anzeigen

  Alt 24. Aug 2010, 19:47
Ich weis nicht ob das evtl. etwas "schmutzig" ist...

...das aufgerufene modale fenster hat eine property für eine "Arbeits-Methode", vergleichbar mit einem Event-Handler.

Das "Bitte warten" Fenster mit Progressbar ist wie folgt ausgestattet:
Delphi-Quellcode:
type
  TWorkerMethode = procedure (Sender : TObject; AProgressBar : TProgressBar) of object;

  TFormWorkProgress = class(TForm)
    ProgressBar1: TProgressBar;
    Timer1: TTimer;
    procedure Timer1Timer(Sender: TObject);
  private
    { Private-Deklarationen }
    FWorkerMethode : TWorkerMethode;
  public
    { Public-Deklarationen }
    property WorkerMethode : TWorkerMethode read FWorkerMethode write FWorkerMethode;
  end;

var
  FormWorkProgress: TFormWorkProgress;

implementation

{$R *.dfm}

procedure TFormWorkProgress.Timer1Timer(Sender: TObject);
begin
  Timer1.Enabled := False;
  if assigned(FWorkerMethode) then
    FWorkerMethode(self, ProgressBar1);
end;
Das Hauptformular mit der Arbeits-Procedure so:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  FormWorkProgress : TFormWorkProgress;
begin
  FormWorkProgress := TFormWorkProgress.Create(Application);
  try
     FormWorkProgress.WorkerMethode := Worker;
     FormWorkProgress.ShowModal;
  finally
    FormWorkProgress.Free;
  end;
end;

procedure TForm1.Worker(Sender : TObject; AProgressBar : TProgressBar);
var
  i : Integer;
begin
  for i := 1 to 100 do
  begin
    AProgressBar.Position := i;
    Sleep(100);
    Application.ProcessMessages;
  end;
  (Sender as TForm).Close;
end;
Nur ganz grob... etwas Feintunig ist da noch nötig... das modale Fenster ist etwas blockiert. Evtl. das Close aus dem Timer raus (kann ja der Worker aufrufen, er hat ja den Sender)

€: Etwas angepasst, jetzt stellt sich die App nicht mehr Tod.

Geändert von Satty67 (24. Aug 2010 um 19:54 Uhr)
  Mit Zitat antworten Zitat