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

Вниз

Когда завершается отрисовка Image?   Найти похожие ветки 

 
i2e   (2011-10-27 12:26) [0]

Выполняется
ImageTx.Picture.Bitmap := mBmp[3];  ImageTx.Invalidate;

С большой вероятностью, попытка начать новую отрисовку изображения приводит к AccessVialation (AV).
Программа работает час-полтора, показывая на "мигающем" индикаторе процесс обмена данными, потом делает AV.
Можно как-то узнавать, что идёт отрисовка, чтобы не начинать новую?


 
Омлет ©   (2011-10-27 12:34) [1]

> С большой вероятностью, попытка начать новую отрисовку изображения приводит к AccessVialation (AV).

С большой вероятностью у тебя ошибка в программе.


 
И. Павел ©   (2011-10-27 20:22) [2]

В справке ясно написано, что ничего страшного при множественном вызове invalidate нет. Контрол перерисуется тогда, когда сможет, а не на каждый invalidate.

"Invalidate informs a control that its entire surface needs to be repainted. Calling Invalidate can prevent flicker caused by a series of partial repaints. There is no performance penalty for calling Invalidate multiple times before the control is actually repainted."


 
Rouse_ ©   (2011-10-27 20:52) [3]

ImageTx.Picture.Bitmap.Assign(mBmp[3])


 
i2e   (2011-10-28 06:39) [4]

Справку читал, да, не должно мешать.
Почему за этот индикатор зацепился - когда просто отключен, программа не виснет.

Попробую еще так:
ImageRx.Picture.Assign(nil);
ImageRx.Picture.Assign(mBmp[3]);

Буду искать. Непременно доложу, что нарыл.


 
И. Павел ©   (2011-10-28 08:24) [5]

> когда просто отключен, программа не виснет

Когда отключен Invalidate или и "Bitmap:=" и "Invalidate"?


 
han_malign   (2011-10-28 09:36) [6]

SetLampState(aLampState)
  InterlockedExchange(FLampState, aLampState);
  PaintBox.Invalidate;

OnPaint
  PaintBox.Canvas.Draw(X, Y, mBmp[FLampState]);


- причем даже - более-менее(Invalidate завязан на родительский список контролов - если он статичен - то абсолютно -)- потокобезопасно...


 
han_malign   (2011-10-28 09:43) [7]

З.Ы. Но правильнее - использовать ImageList - потому что там есть много вкусного...
  ilLamp.DrawOverlay(PainBox.Canvas, X, Y, FLampState, FLampSubState);


 
i2e   (2011-10-28 10:38) [8]

к [5]:
>> когда просто отключен, программа не виснет
>Когда отключен Invalidate или и "Bitmap:=" и "Invalidate"?

когда отключен индикатор (т.е. и Bitmap, и Invalidate).

к [7]:
ImageList и использовал.
было так:
IndicImageList.GetBitmap(LampState, ImageTx.Picture.Bitmap);  ImageTx.Repaint;, где LampState присваивалось 0..5, в зависимости от нужной картинки.
(ранее были сделаны программы, в которых это трудится без нареканий)

"Трясу" дальше...


 
han_malign   (2011-10-28 12:25) [9]


> "Трясу" дальше...

- вариант - OnChange{Invalidate}/OnPaint{<мгновенный штамп или блокировка FIFO>} (я это называю - "ленивый кадр") - помимо отсутствия постоянного создания/разрушения GDI-ресурса  и лишнего копирования растра(ImageList ==> Bitmap ==> Image) - гарантирует отзывчивость интерфейса при дребезге состояний(пропуск кадра)...


 
БезымянныйСтудент   (2011-11-02 11:32) [10]

А зачем вообще Invalidate? Делайте просто Repaint...
Да и думаю врядли из-за этого может быть AV, даже если там несколько потоков... Поищите в другом месте программы...)

> Программа работает час-полтора, ... , потом делает AV.

Ну так мож у вас там утечка памяти где или типа того?



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

Форум: "Начинающим";
Текущий архив: 2012.02.12;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.003 c
2-1320472669
defen2204
2011-11-05 08:57
2012.02.12
представление файла в байтовом виде


2-1320079463
SQLEX
2011-10-31 19:44
2012.02.12
запросы к файлам dbf/ BDE или как то иначе ?


15-1319421182
Nic
2011-10-24 05:53
2012.02.12
Автоматическая сортировка DBGridEh


15-1319708929
Kerk
2011-10-27 13:48
2012.02.12
FireMonkey Webinar Announced


2-1318479725
Pcrepair
2011-10-13 08:22
2012.02.12
Паук(spider) для обработки ХТМЛ-страниц. TWebbrowser или INDY?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский