Thema: Delphi OnFocusLost-Event?

Einzelnen Beitrag anzeigen

Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#7

Re: OnFocusLost-Event?

  Alt 12. Feb 2009, 02:20
Es gibt da auch noch andere (sehr flexible) Möglichkeiten.
Zuerst definieren wir ein Interface:
Delphi-Quellcode:
IProgressFeedback = interface
   procedure WriteMessage(const msg:string);
   procedure SetProgressMinMax(min,max:integer);
   procedure SetProgress(value:Integer);
end;
Deine Kommunikationklasse bekommt nun dieses Interface im Konstruktor mitgeteilt:
Delphi-Quellcode:
TMyKomm = class(...)
private
  FFeedback : IProgressFeedback;
...
public
  constructor Create(feedback:IProgressFeedback);

  procedure DoWork;
end

constructor TMyKomm.Create(feedback:IProgressFeedback);
begin
  inherited;
  FFeedback := feedback; // speichern für spätere verwendung
end;

procedure TMyKomm.DoWork;
begin
   FFeedback.WriteMessage('starte Kommunikation mit Gerät...';
   FFeedback.SetProgressMinMax(0, ...);
   for i := 0 to ... do
   begin
     FFeedback.SetProgress(i); // mitteilen, wo wir gerade stehen
     ...
   end;
   FFeedback.WriteMessage('download der Daten erfolgreich.';
end;
Jetzt muss das vereinbarte Interface nur noch von irgendeiner Klasse implementiert werden.
Das kann ein eigenes Formular sein oder auch das Formular, von dem der ganze Vorgang angestossen wurde.
Delphi-Quellcode:
TForm1 = class(TForm, IProgressFeedback)
....
protected
   procedure WriteMessage(const msg:string);
   procedure SetProgressMinMax(min,max:integer);
   procedure SetProgress(value:Integer);
...
end;

procedure TForm1.SetProgress(value:Integer);
begin
  self.BringToFront; // Trick: Formular wird automatisch immer wieder nach vorne gebracht
  Progress1.Value := value; // Progressbar setzen
  Progress1.Refresh; // sicherstellen, dass neu gezeichnet wird
end;
Sollte dich diese Technik interessieren, dann sag' Bescheid; ich kann dann auch noch zeigen, wie man die laufende Operation sauber abbrechen kann, falls der Benutzer dies wünscht.
  Mit Zitat antworten Zitat