Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2013.10.06;
Скачать: [xml.tar.bz2];

Вниз

Моргает 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.003 c
15-1366917087
О-Сознание
2013-04-25 23:11
2013.10.06
VCL построена на "сигналах-слотах"?


2-1358417243
Pcrepair
2013-01-17 14:07
2013.10.06
Замена указателей на Локал.Перем при работе функции в потоке


15-1366559274
UseSynergy
2013-04-21 19:47
2013.10.06
Ищу программистов для стартапа


2-1358420049
Burn
2013-01-17 14:54
2013.10.06
try..except


15-1363095630
О-Сознание
2013-03-12 17:40
2013.10.06
Трабла с директивой





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский