AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

StingGrid um Records erweitern

Ein Thema von Texas · begonnen am 10. Apr 2007 · letzter Beitrag vom 11. Apr 2007
Antwort Antwort
Texas

Registriert seit: 15. Jul 2005
Ort: Laatzen
56 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#1

StingGrid um Records erweitern

  Alt 10. Apr 2007, 22:38
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 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:
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.
Soweit klappt alles bis auf das ich die Records aus dem Programm nicht ändern kann

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

Gehört der property item[...] überhaupt nach published damit ich die Werte ändern kann

Ich habe noch nicht so viel Erfahrung mit dem Entwickeln von Komponenten

Für Hilfe schon mal vielen Dank im Voraus
Michael
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: StingGrid um Records erweitern

  Alt 11. Apr 2007, 06:52
Du brauchst das garnicht selber machen. Du kannst doch die Records in .Objects ablegen.
Markus Kinzler
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:30 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz