Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.516 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Form + Frame = ActiveContol = nil

  Alt 2. Nov 2016, 22:11
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 ...
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat