Вниз
Скачать: 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.028 c
3-1138719392
Ega23
2006-01-31 17:56
2006.03.26
Refresh TClientDataSet по Master-Detail связке


2-1142336251
zorik
2006-03-14 14:37
2006.03.26
Репликация


2-1141878722
tolians
2006-03-09 07:32
2006.03.26
Ребят ну помогите сделать этот Запрос


2-1142192465
Ilg
2006-03-12 22:41
2006.03.26
Список файлов в ComboBox


15-1141183929
Mozart
2006-03-01 06:32
2006.03.26
заблокировать dvd




   Наверх