Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.024 c
6-1134211668
chistik
2005-12-10 13:47
2006.03.26
приём почты с hotmail


15-1141713885
Ega23
2006-03-07 09:44
2006.03.26
С Днём рождения! 7 марта


15-1141411309
Лёха
2006-03-03 21:41
2006.03.26
MiniExel на паскале ;)


8-1129300196
Ayer
2005-10-14 18:29
2006.03.26
mp3 в mp3 через Lame.dll


2-1141896678
VitV
2006-03-09 12:31
2006.03.26
Использование LookUpField с отображением в dbgrid




   Наверх