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
Текст, правда, тоже придётся самому рисовать.