TStringsGrid: смещение CheckBox в таблице при прокрутке

Я сделал таблицу TStringsGrid и добавляю в одну колонку текст, а в другую TCheckBox. Но когда я динамически увеличиваю число строк и появляется вертикальная полоса прокрутки, то при прокрутке у меня чекбоксы все смещаются. Хотелось бы пример кода, как динамически менять позиции чекбоксов таблицы при прокрутке вверх/вниз.

TMyStringsGridForm = class(TForm)
  ...
  MyStringGrid: TStringGrid;
  procedure FormCreate(Sender: TObject);
  procedure FormResize(Sender: TObject);
  ...
private
  ...
protected
  MyCheckBoxList:       TList;
public
  ...
end;

procedure TMyStringsGridForm.FormCreate(Sender: TObject);
var i, tmpIndex: integer;
begin
    with TMyStringsGrid do
    begin
    Cells[0,0] := 'Данные';
    Cells[1,0] := 'Управление';
    for i := 1 to 100 do
    begin
        Cells[0,i] := 'Пункт ' + IntToStr(i);
        //////////////////////////////////////
        tmpIndex := MyCheckBoxList.Add(TCheckBox.Create(self));
        with TCheckBox(MyCheckBoxList[tmpIndex]) do
        begin
            Height      := 13;
            Width       := 13;
            Caption     := '';
            ParentColor := False;
            Color       := clWindow;
            Tag         := i;
            Enabled     := False;
            OnClick     := MapPollingCheckboxClick;
            Parent      := TabSheet1;
            Objects[1, i] := TCheckBox(MyCheckBoxList[tmpIndex])
        end;
    end;
    FormResize(Self)
end;

procedure TMyStringsGridForm.FormResize(Sender: TObject);
var i, tmpIndex: integer;
begin
     with TMyStringsGrid do
     begin
        ColWidths[0] := 272;
        ColWidths[1] := 90;
        
        for i := 0 to MyCheckBoxList.Count - 1 do
        begin
            TCheckBox(MyCheckBoxList[i]).Left := Left + CellRect(1, i+1).Left + 48;
            TCheckBox(MyCheckBoxList[i]).Top  := Top + CellRect(1, i+1).Top + 11;
        end
    end
end;

Ответы (1 шт):

Автор решения: MBo

Используйте событие OnDrawCell, в него передаётся прямоугольник ячейки. Чтобы знать, какие прятать - TopRow и VisibleRowCount

Текст, правда, тоже придётся самому рисовать.

→ Ссылка