Вверх ↑
Ответов: 1926
Рейтинг: 172
#1: 2009-08-01 19:45:14 ЛС | профиль | цитата
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.
карма: 9
0