Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#8

AW: Eigene Komponete / Darstellungsfehler?!

  Alt 22. Dez 2014, 14:26
Dank des Owners wird das schon vorher freigegeben.

Delphi-Quellcode:
procedure FAMCard.SetHeader(const Value: FAMPanel);
begin
  FHeader.Free;
  FHeader := Value;
end;
Und was wenn man die selbe Instanz reingibt?
Delphi-Quellcode:
procedure FAMCard.SetHeader(const Value: FAMPanel);
begin
  if FHeader <> Value then
    FreeAndNil(FHeader);
  FHeader := Value;
end;

// oder besser so
procedure FAMCard.SetHeader(const Value: FAMPanel);
begin
  if Assigned(FHeader) and (FHeader.Owner = Self) then
    FreeAndNil(FHeader);
  FHeader := Value;
end;
Wobei hier dein angesprochenes Problem erst Recht gilt, denn wer gibt dann Value frei, wenn die Komponente freigegeben wird.

Aber grundsätzlich bin ich auch für die Assign-Variante, denn das ist eine interne Komponente und die sollte/darf einfach nicht von außen direkt geändert werden können.

PS: Eigentlich braucht man hier garkeinen Setter, denn zum Laden der Property nimmer der DFM-Loader den Getter und weist die Werte den Property der existierenden Instanz zu.
Aber der DFM-Writer ist schon immer totaler Schrott, weil er bei Objekten einen Setter verlangt, denn ohne Diesen werden die Property nicht gespeichert.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (22. Dez 2014 um 14:32 Uhr)
  Mit Zitat antworten Zitat