Moin Matthias,
vereinfach könnte das so aussehen:
Delphi-Quellcode:
TsvListe = class (TListBox)
private
function getColWidths(Index: Integer): INTEGER;
procedure setColWidths(Index: Integer; const Value: INTEGER);
protected
FColWidths: array of integer;
// ...
public
// ...
property ColWidths[Index: Integer]: INTEGER read getColWidths write setColWidths;
end;
implementation
{$R *.DFM}
{ TsvListe }
function TsvListe.getColWidths(Index: Integer): INTEGER;
begin
Result := FColWidths[Index];
end;
procedure TsvListe.setColWidths(Index: Integer; const Value: INTEGER);
begin
FColWidths[Index] := Value;
end;
Interne Felder würde ich allerdings auch immer unter private legen.
Ob Du nun ein statisches oder dynamisches array verwendest hängt davon ab, was Du brauchst.
Bei einem dynamischen array musst Du halt selber die Grösse verwalten, am Besten auch einen Index, der auf das nächste zu nutzende Element zeigt.
Ein dynamisches array sollte möglichst so gross initialisiert werden, wie man es braucht, und nur falls man sich doch verschätzt hat muss man es vergrössern. Deshalb ein Index, da man in diesem Falle nicht mit high(array) arbeiten kann.
Beim Vergrössern werden die Inhalte von dynamischen arrays i.d.R. in den neuen Speicherbereich umkopiert, und das gilt es zu vermeiden.
Wenn Du mindestens eine Pro Version hast kannst Du übrigens einfach mit dem Cursor in die Propertyzeile gehen, und STRG-SHIFT-C drücken, damit die Klasse automatisch vervollständigt wird.