Einzelnen Beitrag anzeigen

shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#7

Re: SelectNext aus Datamodule

  Alt 28. Jun 2007, 10:15
Warum sollte man den Focus auf diese Art verändern wollen?
Du musst hier schon etwas genauer den Hintergrund erklären.
Aber generell lässt sich das Problem mit Events lösen:

Delphi-Quellcode:
// ein selbstdefiniertes Event
TStatusEvent = procedure(Sender:TObject; status:integer) of object;

TMyDataModule=class(TDataModule)
private
  procedure DoStatusEvent(status:integer);

public
  procedure DatenImport;

 property StatusEvent:TStatusEvent read FStatusEvent write FStatusEvent;
end;

procedure TMyDataModule.DoStatusEvent(status:integer);
begin
   if Assigned(FStatusEvent) then // falls Event zugewiesen
      FStatusEvent(self, status); // auslösen !
end;


procedure TMyDataModule.DatenImport;
begin
   DoStatusEvent(1);
   Query1.open;
   DoStatusEvent(2);
   if {irgendeine Bedingung } then DoStatusEvent(5);
....
end;
//==============================================================

// und beim Formular
  MyDataModule.StatusEvent = StatusEventHandler;
  MyDataModule.DatenImport;


procedure TForm1.StatusEventHandler(Sender:TObject; status:integer);
begin
   case status of
      // wir sind jetzt im Kontext des Formulars
      // damit können wir hir machen was wir wollen
      // Formular-spezifischer Code bleibt in der richtigen Unit
      // das Datenmodul hat keine Ahnung, dass hier der Focus verändert wird
      5: DBedit666.SetFocus;
   end;
end;
Die Verwendung von Events sind sauber und objektorientiert.
Andreas
  Mit Zitat antworten Zitat