powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Перерисовка отдельных айтемов в TListBox
4 сообщений из 4, страница 1 из 1
Перерисовка отдельных айтемов в TListBox
    #39554374
Vizit0r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имею листбокс с кастомной отрисовкой айтемов.

Приходит из потока событие, нужно перерисовать один из айтемов.
Кидаю запрос на перисовку айтема так.
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
procedure TBaseMainFormTransport.UpdateCharItemInList(var Sender : TObject);
var i : Integer;
    r : TRect;
begin
  i := StealthForm.CharListBox.Items.IndexOfObject(Sender);
  if i <> -1 then
  begin
    StealthForm.SystemJournalMemo.Lines.Add('UpdateCharItemInList, index ' + i.ToString);
    r := StealthForm.CharListBox.ItemRect(i);
    InvalidateRect(StealthForm.CharListBox.Handle, @r, False);
  end;
end;



Сегодня в рамках (очередного) поиска узких мест обнаружил, что запрос кидается на перерисовку одного айтема, а перерисовываются ВСЕ. А учитывая не самую легкую отрисовку и много айтемов - получаются знатные тормоза.

Вот лог для трех айтемов в списке:
UpdateCharItemInList, index 2
CharListBoxDrawItem, index 0
CharListBoxDrawItem, index 1
CharListBoxDrawItem, index 2
UpdateCharItemInList, index 2
CharListBoxDrawItem, index 0
CharListBoxDrawItem, index 1
CharListBoxDrawItem, index 2
UpdateCharItemInList, index 2
CharListBoxDrawItem, index 0
CharListBoxDrawItem, index 1
CharListBoxDrawItem, index 2

Подскажите, как делать правильно?
...
Рейтинг: 0 / 0
Перерисовка отдельных айтемов в TListBox
    #39554384
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Двойная буферизация включена?
...
Рейтинг: 0 / 0
Перерисовка отдельных айтемов в TListBox
    #39554385
Vizit0r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DoubleBuffered = True
...
Рейтинг: 0 / 0
Перерисовка отдельных айтемов в TListBox
    #39554387
Vizit0r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
выключил, стало работать правильно.
Спасибо за намек.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Перерисовка отдельных айтемов в TListBox
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]