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.