Komponent potomek TStringGrid

0

Witam w nowym roku.

Dziobie sobie komponent i nie mogę dać sobie rady z TRecordEquation
zadeklarowałem go na stałe ograniczając do 50 kolumn;

A chciałbym uzależnić rozmiar tabeli od ColCount, ale brak mi koncepcji

Jakiś prosty pomysł ?

Z góry dziękuje za pomoc.

Pozdrawiam
Janusz

type
   TRecorEquation = array [0..50] of Integer;

type
  TdStringGrid = class(TStringGrid)
  private
        FColorLine1 : TColor;
        FColorLine2 : TColor;
        FColorSelectBrush : TColor;
        FColorSelectFont : TColor;
        FColorLineOn : boolean;
        FFixedColorFont : TColor;
        FPrintControl : TPrintControl;
//        Procedure SetmLeft(value:integer);
//        Function  GetmLeft : integer;
        procedure SetPrintControl(Value: TPrintControl);
  protected
        procedure DrawCell(ACol, ARow: Longint; ARect: TRect; AState: TGridDrawState); override;
  public
        DEquationCol : TRecorEquation;
        constructor Create(AOwner : TComponent); override;
        destructor Destroy; override;
        procedure AutoSizeCol;


[....]
// użycie z poziomu formy

       dStringGrid1.DEquationCol[5] := DT_SINGLELINE or DT_CENTER or DT_VCENTER;
       dStringGrid1.DEquationCol[6] := DT_SINGLELINE or DT_CENTER or DT_VCENTER;
       dStringGrid1.DEquationCol[7] := DT_SINGLELINE or DT_CENTER or DT_VCENTER;

0

TRecordEquation jako tablica dynamiczna. Potem nadpisujesz własność ColCount aby robiła swoje + SetLength(TRecordEquation).

0

" SetLength(TRecordEquation). "

Z tym próbowałem ale D7 nieche tego skompilować

0

O coś takiego mi chodziło bardziej...

type
  TEquationRec = array of Integer;

  TEquationGrid = class(TStringGrid)
  private
    FColCount :Integer;
    function FGetColCount() :Integer;
    procedure FSetColCount(ACount :Integer);
  public
    EquationRec :TEquationRec;

    property ColCount :Integer read FGetColCount write FSetColCount;
  end;

  TForm4 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form4: TForm4;

implementation

{$R *.dfm}

{ TEquationGrid }

function TEquationGrid.FGetColCount: Integer;
begin
  Result := FColCount;
end;

procedure TEquationGrid.FSetColCount(ACount: Integer);
begin
  if ACount <> FColCount then
  begin
    FColCount := ACount;
    SetLength(EquationRec, FColCount);
  end;
end;
0

Jako wartość startową dałem ColCount:=5
Jeżeli zwiększą tą wartość to występują błędy

Access violation at address 7C91302C in module. Write of address 5100D668.

I tego nie potrafię zrozumieć "setLength" nie działa poprawnie w komponencie.
Zanim zadałem pytanie na forum już tego próbowałem, trochę inaczej ale rezultat
był identyczny co do błędów.

0
var
  tablica: array of integer; //czy jakikolwiek inny typ
begin
  setLength(tablica, 10); //zwiększa wielkość tablicy do 10 elementów(od 0, czyli 0..9)
  tablica:=nil; //gdy już nie będziesz używał tablicy musisz ją zwolnić.
end;

MUSI działać, nie ma bata.
Błąd musisz mieć gdzie indziej, chyba, że robisz coś inaczej.

A jeśli faktycznie z jakiegoś powodu nie działa, to nie masz innego wyjścia jak zamiast tablic dynamicznych posłużyć się listą.

1 użytkowników online, w tym zalogowanych: 0, gości: 1