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

Вниз

Моргает ListView.(D7)   Найти похожие ветки 

 
O'ShinW ©   (2013-01-17 13:27) [0]

Кто есть кто
procedure TfrmViewPic.FormCreate(Sender: TObject);
begin
 CS := TCriticalSection.Create;
 DoubleBuffered := True;


Это дергается из потока ,который считает и передаёт BMP для предпросмотра

procedure TfrmViewPic.OnNewPicAvailable(Sender: TObject; BMP: TBitmap; FileName: string);
var
 LI: TListItem;
begin
 CS.Enter;
 try
   ilSourceThumb.Add(BMP, nil);
   lvThumbPic.Items.BeginUpdate;  // lvThumbPic: TListView
   try
     LI := lvThumbPic.Items.Add;
     LI.Caption := FileName;
     LI.ImageIndex := lvThumbPic.Items.Count - 1;
   finally
     lvThumbPic.Items.EndUpdate;
   end;
====================================
   // lvThumbPic.Repaint;
   // UpdateWindow( lvThumbPic.Handle);
   // Application.HandleMessage;
   Application.ProcessMessages;
====================================
 finally
   CS.Leave;
 end;


Как надо, чтобы не моргал?


 
clickmaker ©   (2013-01-17 14:53) [1]

UpdateItems.UpdateItems(LastIndex, LastIndex) вместо Repaint
или попробуй DoubleBuffered


 
Сергей М. ©   (2013-01-17 15:19) [2]


> DoubleBuffered := True;


Для TWinControl"а это как для коровы седло.


 
O'ShinW ©   (2013-01-17 17:01) [3]

UpdateItems - Моргает все равно.
Ладно, оставлю, работает же.
Спасибо!


 
Сергей М. ©   (2013-01-17 17:16) [4]


> Это дергается из потока


Что, и Application.ProcessMessages тоже "дергается из потока" ?
ну тогда ССЗБ)


 
Rouse_ ©   (2013-01-17 19:12) [5]


> Сергей М. ©   (17.01.13 15:19) [2]
>
> > DoubleBuffered := True;
>
>
> Для TWinControl"а это как для коровы седло.

Угу, но только не для ListView, у которого буферизация реализуется на уровне системы (в случае если темы включены) :)


 
Rouse_ ©   (2013-01-17 19:13) [6]

ЗЫ: DoubleBuffered выставляй не у формы, а непосредственно у контрола.


 
Rouse_ ©   (2013-01-17 19:14) [7]

ЗЗЫ: кстати не посмотрел что у тебя семерка, тогда попробуй вопользоваться вот этим: http://rouse.drkb.ru/components.php#gslistview
здесь уже нормальная буферизация используется от комконтролов...


 
Сергей М. ©   (2013-01-17 19:57) [8]


> Rouse_ ©   (17.01.13 19:12) [5]


Двойная буферизация нужна для оптимизации отрисовки безоконных контролов, чей парент есть оконный контрол, свойство DoubleBuffered которого рассматривается.
На листвью у топикстартера нет никаких безоконных контролов, потому и листвью.даблбуфферед есть седло)


 
Rouse_ ©   (2013-01-17 19:59) [9]


> потому и листвью.даблбуфферед есть седло)

Не Серег :) При выставлении буферизации у ListView у данного оконного контрола включается расширенный стиль LVS_EX_DOUBLEBUFFER, который к дельфийской буферизации, реализованной через (как ты говоришь) "седло", отношения не имеет :)


 
Сергей М. ©   (2013-01-17 21:21) [10]


> Rouse_ ©   (17.01.13 19:59) [9]


Т.е поведение там перекрыто ?

Спасибо, Саш, верю на слово, посыпаю свою лысину позорным пеплом и впредь имею ввиду)


 
Rouse_ ©   (2013-01-17 21:26) [11]


> Сергей М. ©   (17.01.13 21:21) [10]
> Т.е поведение там перекрыто ?

Угу, начиная с шестой версии CommCtrl32. Я просто разгребал это все в свое время по поводу SysListView32 плотно (см ссылку выше) и еще помню нюансы. А переход с дельфевой буферизации на "через стили", если память не изменяет, была сделана в 2006-ой дельфе и именно с нее DoubleBuffered в данном контроле, в самом VCL начинает работать немного по другому.


 
O'ShinW ©   (2013-01-18 09:02) [12]


> Что, и Application.ProcessMessages тоже "дергается из потока"
> ?

нет, конечно :)


> Rouse_ ©

Спасибо, глянул. Да, не моргает!
На будущее пригодится.
Жаль, что это уже "сдал - приняли"



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

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

Наверх




Память: 0.49 MB
Время: 0.007 c
15-1355480016
azlk52
2012-12-14 14:13
2013.10.06
Запрет приложение вконтакте


15-1367320515
Pit
2013-04-30 15:15
2013.10.06
Потокобезопасно ли ADO?


2-1358698446
Pcrepair
2013-01-20 20:14
2013.10.06
контрол имеющий пару строка-число


2-1358524343
Proshka
2013-01-18 19:52
2013.10.06
Строки после обновления


15-1366947804
Genry_
2013-04-26 07:43
2013.10.06
Oracle between