nesco писал(а):
отрисовка происходит только области, где происходит изменениеЗначит, делаю следующим образом.
Создаю список
ArrayOfCB := NewList;[/code]
Заполняю флажками видимую часть, если там есть строки.
if TableCtl.LVCount < TableCtl.LVPerPage then
while ArrayOfCB.Count < TableCtl.LVCount do
begin
r := TableCtl.LVItemRect(TableCtl.LVTopItem + ArrayOfCB.Count, lvipBounds);
ArrayOfCB.Add(NewCheckbox(TableCtl,'));
PControl(ArrayOfCB.Items[ArrayOfCB.Count-1]).Style := PControl(ArrayOfCB.Items[ArrayOfCB.Count-1]).Style or BS_FLAT;
PControl(ArrayOfCB.Items[ArrayOfCB.Count-1]).width := 13;
PControl(ArrayOfCB.Items[ArrayOfCB.Count-1]).height := 13;
PControl(ArrayOfCB.Items[ArrayOfCB.Count-1]).left := TableCtl.LVColWidth[0] + (TableCtl.LVColWidth[1] div 2) - 7;
PControl(ArrayOfCB.Items[ArrayOfCB.Count-1]).top := r.top;
PControl(ArrayOfCB.Items[ArrayOfCB.Count-1]).Show;
end;
Это происходит в обработчике OnLVCustomDraw.
В этом же обработчике выполнятся:
while (ArrayOfCB.Count > 0) and (ArrayOfCB.Count > TableCtl.LVCount) do
begin
PControl(ArrayOfCB.Items[ArrayOfCB.Count-1]).Free;
ArrayOfCB.Delete(ArrayOfCB.Count-1);
end;
Но когда нажимаю Очистить таблицу, тогда возникает runtime error.