Hallo, ich habe ein Projekt mit folgender Daten- und Klassenstruktur:
Delphi-Quellcode:
{ TmySelectableItem }
TmySelectableItem = class(TObject)
private
fString: string;
fselected: boolean;
procedure SetPicture(AValue: gfxImage);
public
constructor Create;
destructor Destroy; override;
property theString : string read fString write fString;
property selected : boolean read fSelected write fSelected;
end;
{ TmySelectableItems }
TmySelectableItems = class(TList) //Erzeugt eine Liste in einer Spalte
private
FSelItems: TList;
function GetSelected(Index: Integer): boolean;
function GetStrings(Index: Integer): String;
procedure SetSelected(Index: Integer; AValue: boolean);
procedure SetStrings(Index: Integer; AValue: String);
public
constructor create;
function AddItem(aItem: TmySelectableItem): Integer;
property Strings[Index: Integer]: String read GetStrings write SetStrings; default;
property Selected[Index: Integer]: boolean read GetSelected write SetSelected;
end;
{ TmySelectBox }
TmySelectBox = class (TmyAnyBox)
public
strings : TmySelectableItems; //Hier entsteht die Spalte die in dieser Klasse auch angezeigt wird
end;
Mein NachfolgeObjekt sieht so aus:
Delphi-Quellcode:
type
TmySelectableMatrixOfCols_And_Rows = class(TList) //Weil ich nicht nur Zeilen, sondern auch Spalten haben will
FColCount: Integer;
FRowCount: Integer;
FGridCols: TmySelectBox.Strings;
//TMySelectBox soll hier die Spalten liefern, deren Inhalt TmySelectableItems sind und zeilenweise angeordnet sind
//TmySelectBox ist sichtbar und enthält das Feld Strings vom Typ TmySelectableItems
function GetCells(ColIX, RowIX: Integer): TmySelectableItem; //TMySelectBox ist die Spalte, die Strings (TmySelectableItems) die Zeileninhalte
function GetCols: Integer;
function GetRows: Integer;
procedure SetCells(ColIX, RowIX: Integer; AValue: TmySelectableItem);
procedure SetCols(AValue: Integer);
procedure SetRows(AValue: Integer);
public
constructor Create;
function AddCol(aCol:TmySelectableItems): Integer;
property GridCells[ColIX,RowIX: Integer]: TmySelectableItem read GetCells write SetCells;
property GridCols: Integer read GetCols write SetCols;
property GridRows: Integer read GetRows write SetRows;
end;
TmySelectableItemsUsingObject = class
GridCells: TmySelectableMatrixOfCols_And_Rows;
end;
procedure TmySelectableMatrixOfCols_And_Rows.SetCells(ColIX, RowIX: Integer;
AValue: TMySelectableItem);
begin
if (ColIX<=GetCols-1) and (RowIX<=GetRows) then
TMySelectableItem(TMySelectBox(GridCols.Items[ColIX]).strings.Items[RowIX]) := AValue; //Hier meckert der Compiler !!!!!!!!!!!!!!!
//Items[] kommt von TList, dem Vorgängerobjekt
end;
constructor TmySelectableItemsUsingObject.Create
begin
for c:=0 to Columns-1 do
begin
TuiItem := TtuiSelectableItem.Create;
GridCells.AddCol(TmySelectBox.Create(
theParentBox,
theX+c*ColWidth+1,
theY,
ColWidth,
RowHeight
));
for r:=0 to Rows-1 do
begin
MyItem.theString:='1234';
TMySelectBox(GridCols.Items[c])).addItem(MyItem); //Hier meckert der FPC Compiler!!!!!!!!!!!!!!!!!!!!
end;
end;
end;
Hier meckert der FPC Compiler an den kommentierten Stellen, der Delphi Compiler wurde das vermutlich auch.
Wie mache ich die Datenabfrage bzw. Zuweisung hier richtig? (Freepascal) Oder ist die Syntax hierfür in Freepascal und Delphi wirklich gleich?