Einzelnen Beitrag anzeigen

Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#20

AW: Lebensdauer einer Stringlist

  Alt 21. Aug 2015, 07:59
Du musst immer das große Ganze betrachten um zu verstehen

So sieht die Ableitungskette aus: TCustomCombo <- TCustomComboBox <- TComboBox und hier werden die Items erzeugt
Delphi-Quellcode:
constructor TCustomComboBox.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  // Statt
  FItems := GetItemsClass.Create; // <- da ist
  // wäre auch das hier möglich
  // SetItems( GetItemsClass.Create );
  TCustomComboBoxStrings(FItems).ComboBox := Self;
  FStyle := csDropDown;
  FLastTime := 0;
  FAutoComplete := True;
  FAutoCloseUp := False;
  FAutoCompleteDelay := 500;
  FTextHint := '';
end;
Wenn du auf die Items zugreifst, dann gibt es schon eine Instanz.

Der Grund für diesen Setter liegt darin, dass in TCustomCombo die konkrete TStrings Instanz noch gar nicht bestimmt werden kann. Darum hat man den Setter so gebaut, dass die erste Verwendung die Referenz übernimmt.

Denn wenn du selber mal eine Komponente von TCustomCombo ableiten möchtest, dann hast du keine Möglichkeit an FItems heranzukommen und so bleibt dir der Weg über den Setter.
Delphi-Quellcode:
unit MyCompo;

interface

uses
  Vcl.StdCtrls;

type
  TMyCombo = class( TCustomCombo )
  public
    constructor Create( AOwner: TComponent ); override;
  end;

implementation

constructor TMyCombo.Create( AOwner: TComponent );
begin
  inherited Create( AOwner );
  SetItems( TStringList.Create ); // <- diese Instanz wird jetzt übernommen
end;

end.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat