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.