Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.03.26;
Скачать: CL | DM;

Вниз

Прорисовка одной строки в ListBox e   Найти похожие ветки 

 
Slaga ©   (2006-02-20 18:45) [0]

Добрый вечер, такой у меня вопрос.

Я использую некую разновидность ListBoxа (TcxMCListBox), но вопрос у меня впринципо по ListBox, а именно:

я изменяю запись в ListBox
 
 ListBox.Items.String[1] := "test";

это у меня делает около 20 потоков практически паралельно, тоесть часто, и от постоянного изменения лисбокса он мерцает, очень неприятно.

А все потому что он полностью перерисовывается.
Как мне перерисовавывать только одну обновляемую строку а несь листбокс ?


 
clickmaker ©   (2006-02-21 12:06) [1]


> Как мне перерисовавывать только одну обновляемую строку
> а несь листбокс ?

SendMessage(LB.Handle, LB_GETITEMRECT,0, Rect);
InvalidateRect(LB.Handle, Rect, 0, FALSE);

можно заюзать ListView, у него есть метод для обновления только диапазона строк


 
Slaga ©   (2006-02-21 13:18) [2]

спасибо, надо попробовать


 
Leonid Troyanovsky ©   (2006-02-21 13:44) [3]


> Slaga ©   (20.02.06 18:45)  

> Как мне перерисовавывать только одну обновляемую строку
> а несь листбокс ?


Прежде всего, у него должен быть Style = lbOwnerDraw*.
Далее, отображаемый текст должен храниться не в Items,
а, например, в sl : TStringList. Т.е., OnDrawItem:

{Кол-во пустых строк в листбоксе равно sl.Count}
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
 Rect: TRect; State: TOwnerDrawState);
begin
 with Control as TListBox do
   begin
     Canvas.FillRect(Rect);
     Canvas.TextOut(Rect.Left, Rect.Top, sl[Index]);
   end;
end;


Тогда, после изменения значения sl[i] достаточно сделать:

var
 r: TRect;
..
 r := ListBox1.ItemRect(i);
 InvalidateRect(ListBox1.Handle,@r, False);

--
Regards, LVT.


 
slaga ©   (2006-02-21 14:09) [4]

спасибо



Страницы: 1 вся ветка

Текущий архив: 2006.03.26;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.043 c
1-1140346133
-matrix-
2006-02-19 13:48
2006.03.26
Проблема поиска


2-1141888762
YDS
2006-03-09 10:19
2006.03.26
ClsID программы


15-1141191597
Ega23
2006-03-01 08:39
2006.03.26
Не високосный, но всё-таки: С Днём рождения! 29 февраля


10-1115047338
KZPAPGSNZAARET
2005-05-02 19:22
2006.03.26
Регистрация сервера приложений


15-1141162232
Volf_555
2006-03-01 00:30
2006.03.26
Что случилось с eMule? Когда он работать начнёт нормально?