![]() |
StingGrid um Records erweitern
Hallo
ich habe eine Frage zum StrinGrid, und zwar möchte ich eine Komponente von StringGrid ableiten und so erweitern das man für jede Cell einen Record zu Verfügung hat. Eigentlich wie Cell[x,y] nur eben nicht ein TEXT sondern einen Record. Ich habe schon eine ganze Weile :gruebel: und getestet mit wenig Erfolg, da ich es nicht schaffe die Werte in dem Record der Komponente aus dem Programm zu ändern. Auslesen klappt. Komponente sieht im Moment noch so aus
Delphi-Quellcode:
Soweit klappt alles bis auf das ich die Records aus dem Programm nicht ändern kann
unit RecordGrid;
interface uses SysUtils, Classes, Controls, Grids, Graphics; type PCellRec = ^TCellRec; // Zeiger auf Record TCellRec = record Color: TColor; Text: string; Font: TFont; TextColor: TColor; Push: Boolean; Coll: Integer; Row: Integer; Cell: Integer; end; type TRecordGrid = class(TStringGrid) private FRecList: TList; // TList für alle Records ARecord: PCellRec; function Get(Index: Integer): TCellRec; procedure Put(Index: Integer; const Value: TCellRec); procedure Neu; { Private-Deklarationen } protected { Protected-Deklarationen } public constructor Create(AOwner: TComponent); override; destructor Destroy; override; procedure Deleteall; function Count: integer; function CountCells: integer; property item[index: integer]: TCellRec read Get write Put; { Public-Deklarationen } published { Published-Deklarationen } end; procedure Register; implementation procedure Register; begin RegisterComponents('Beispiele', [TRecordGrid]); end; constructor TRecordGrid.Create(AOwner: TComponent); begin FRecList := TList.Create; inherited Create(AOwner); Neu; end; destructor TRecordGrid.destroy; begin; Deleteall; inherited destroy; end; function TRecordGrid.count: Integer; begin Result := FRecList.Count; end; function TRecordGrid.CountCells: integer; begin result := (self as TStringGrid).RowCount * (self as TStringGrid).ColCount; end; function TRecordGrid.Get(Index: Integer): TCellRec; begin result := PCellRec(FRecList.Items[Index])^; end; procedure TRecordGrid.Put(Index: Integer; const Value: TCellRec); begin ARecord^ := value; FRecList[Index] := ARecord; end; procedure TRecordGrid.Neu; var i, j, k: integer; begin // Erzeugen und Beschreiben der Records für jede Cell über einen TList Eintrag k := 0; for i := 0 to (self as TStringGrid).RowCount-1 do for j := 0 to (self as TStringGrid).ColCount-1 do begin New(ARecord); ARecord^.Row := i; ARecord^.Coll := j; ARecord^.Cell := k; FRecList.add(ARecord); inc(k); end; end; procedure TRecordGrid.Deleteall; var i: integer; begin for i := FRecList.Count-1 downto 0 do begin ARecord := FRecList.Items[i]; Dispose(ARecord); FRecList.Delete(i); end; FRecList.Clear; end; end. wenn ich dann aber property item[index: integer]: TCellRec read Get write Put; nach published verschiebe bekomme ich beim Compilieren eine Fehlermeldung Item kann nicht vom Typ Array sein :gruebel: Gehört der property item[...] überhaupt nach published damit ich die Werte ändern kann :gruebel: Ich habe noch nicht so viel Erfahrung mit dem Entwickeln von Komponenten Für Hilfe schon mal vielen Dank im Voraus |
Re: StingGrid um Records erweitern
Du brauchst das garnicht selber machen. Du kannst doch die Records in .Objects ablegen.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:55 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz