
Вроде многие рисуют элементы сами, но как осуществляют скрытие элементов из невидимых строк?
Или можно узнать первую отображаемую строку в stringgrid?
Модератор: Модераторы
procedure TForm1.StringGrid1DrawCell(Sender: TObject; aCol, aRow: Integer;
aRect: TRect; aState: TGridDrawState);
procedure TCustomGrid.DrawAllRows;
var
i: Integer;
begin
// Draw Rows
with FGCache.VisibleGrid do
for i:=Top to Bottom do
DrawRow(i);
// Draw Fixed Rows
for i:=0 to FFixedRows-1 do
DrawRow(i);
end;
mirk писал(а):выше был предложен более универсальный и правильный способ вставки компонентов в таблицу через отрисовку, используйте его, тогда раскраска будет без проблем
Его и использовал, но при большом количестве строк начинаются глюки при скроллинге.
Причина глюков: checkbox привязываются к stringgrid (.Parent:=StringGrid), а не к ячейке. Т.е. они (checkbox'ы) начинают перекрывать друг друга и вызывать различные визуальные аретфакты. Необходимо динамически отслеживать какие строки не показываются и скрывать их checkbox'ы. Но как это сделать я не знаю - не нашел свойство показывающее первую отображаемую строку в stringgrid.
Плюс не очень понятно как бороться с множественным вызовом OnDrawCell - это вызывает затупы и мерцания.
procedure TForm1.StringGrid1TopLeftChanged(Sender: TObject);
var
i:integer;
begin
for i:=0 to stringgrid1.TopRow-1 do
begin
if TCheckBox(List[i]^) <> nil then TCheckBox(List[i]^).Visible:=false;
end;
for i:=stringgrid1.VisibleRowCount to stringgrid1.rowcount-1 do
begin
if TCheckBox(List[i]^) <> nil then TCheckBox(List[i]^).Visible:=false;
end;
end;
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 237