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:
- Dla każdej komórki stworzyć klasę lub nowy rekord.
StringGrid1.Objects[C, R] := TMyClass.Create;
- 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ę.