Man kann sich auch selber ein ActiveControl schreiben, welches auf die TopForm weiterleitet.
Delphi-Quellcode:
type
TActiveCompHelper = class helper for TCustomForm
private
function GetMyActiveControl: TWinControl;
procedure SetMyActiveControl(const Value: TWinControl);
public
property MyActiveControl: TWinControl read GetMyActiveControl write SetMyActiveControl;
end;
function TActiveCompHelper.GetMyActiveControl: TWinControl;
{begin
// nur die eigene Form
Result := GetParentForm(Self, True).ActiveControl;
if GetParentForm(Self, False) <> GetParentForm(Result, False) then
Result := nil;
end;}
var
P: TWinControl;
begin
// SubForms erlaubt
Result := GetParentForm(Self, True).ActiveControl;
P := GetParentForm(Result, False);
while Assigned(P) and (P <> Self) do
Result := GetParentForm(P.Parent, False);
if not Assigned(P) then
Result := nil;
end;
procedure TActiveCompHelper.SetMyActiveControl(const Value: TWinControl);
begin
GetParentForm(Self, True).ActiveControl := Value;
end;
Will man aber nur wissen, was das ActiveControl ist, egal wo, um es mit einer Componente der eigenen Form zu vergleichen, dann kann man auch global werden.
if Screen.ActiveControl = {Self.}Edit1 then ...