[Delphi] StringGrid + Objects + Properties

0

Witam,

mam problem z StringGrid.Objects

Z różnych powodów potrzebuję w danej komórce Stringgrida przechować numer ID (losowy). Z tego co wiem można w tym celu wykorzystać Objekty.

Z tego co zdążyłem przczytać można zrobić to na dwa sposoby:

  1. Dla każdej komórki stworzyć klasę lub nowy rekord.
StringGrid1.Objects[C, R] := TMyClass.Create;
  1. Uzyć konstrukcji
procedure TViewDataDlg.StringGrid1DrawCell(Sender: TObject; ACol, ARow:
Integer; Rect: TRect; State: TGridDrawState);
begin
    with (Sender as TStringGrid) do
    begin
        Canvas.Font := Font;
        if (gdFixed in State) then
            Canvas.Brush.Color = FixedColor
        else if (ACol = 3) then
            Canvas.Brush.Color = TColor(Objects[ACol, ARow])
        else if (gdSelected in State) then
        begin
            Canvas.Brush.Color = clHighlight;
            Canvas.Font.Color = clHighlightText;
        end else
            Canvas.Brush.Color = Color;
 
        Canvas.FillRect(Rect);
        if (ACol < 3) then
            Canvas.TextRect(Rect, Rect.Left, Rect.Top, Cells[ACol, ARow]);
 
        if (gdFocused in State) then
            Canvas.DrawFocusRect(Rect);
    end;
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
    ...
    StringGrid1.RowCount := ...
 
    StringGrid1.Cells[0, 0] := '';
    StringGrid1.Cells[1, 0] := 'Selected';
    StringGrid1.Cells[2, 0] := 'Range';
    StringGrid1.Cells[3, 0] := 'Colour';
 
    StringGrid1.Cells[0, 1] := 'RPM';
    StringGrid1.Cells[1, 1] := 'No';
    StringGrid1.Cells[2, 1] := '8000';
    StringGrid1.Cells[3, 1] := '';
    StringGrid1.Objects[3, 1] := TObject(clRed);
 
      ...
end;

Niestety nie rozumiem, dlaczego w drugiej metodzie nie trzeba robic kontruktora .Create dla obiektów.

Czy ktoś mógłby zatem pokazać mi w jaki sposób przechować w StringGrid.Objects[c,r] np. jedną liczbę typu integer ale bez koniecnzości używania create tak jak w drugim przykładzie.

z góry dziękuję.

0

Nie robiłem tego nigdy, ale idąc analogią, musisz mieć stworzoną komórkę. Tzn. przykładowo komórka(3, 1), musi istnieć.

I wtedy możesz normalnie do niej obiekt "przypisać".
Ty robisz proste rzutowanie. Normalnie tam będzie przechowany wskaźnik.
Tak więc spokojnie możesz się posłużyć drugą konstrukcją - bez użycia konstruktora.

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