Einzelnen Beitrag anzeigen

Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.034 Beiträge
 
Delphi 12 Athens
 
#8

AW: Wie kann ich feststellen, ob Sub-Klasse schon gelöscht ist

  Alt 15. Sep 2023, 10:03
Eine ziemlich bequeme Möglichkeit wäre es, die Klassen von TComponent abzuleiten und mit FreeNotification zu arbeiten. Das könnte dann in etwa so aussehen:
Delphi-Quellcode:
type
  TValues = class(TComponent)
  public
    x: Double;
    y: Double;
  end;

  TTest = class(TComponent)
  public
    Name: String;
  private
    FValues: TValues;
    procedure SetValues(const Value: TValues);
  protected
    procedure Notification(AComponent: TComponent; Operation: TOperation); override;
  public
    property Values: TValues read FValues write SetValues;
  end;

procedure TTest.Notification(AComponent: TComponent; Operation: TOperation);
begin
  if (AComponent = FValues) and (Operation = opRemove) then
    FValues := nil;
  inherited;
end;

procedure TTest.SetValues(const Value: TValues);
begin
  if FValues <> Value then
  begin
    if FValues <> nil then
      FValues.RemoveFreeNotification(Self);
    FValues := Value;
    if FValues <> nil then
      FValues.FreeNotification(Self);
  end;
end;
Die verbleibenden public Fields würde ich aber gleich auch noch in Properties umwandeln.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat