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

Вниз

Перерисовка в Lazarus е   Найти похожие ветки 

 
@!!ex ©   (2008-04-11 19:10) [0]

Прошу прощения что опять в "Прочее" пишу. Шансы получить ответ на этой недели в "FPC" - маловероятный.
Пишу обычное приложение(просмоторщик моделей). С формой.
Нужно форму постоянно перерисовывать. И отображаьб модель.
Как делал в дельфи:
OnPaint:
begin
 //Render
 SwapBuffers(DC);
 InvalidateRect(Handle,nil,false);
end;

Попробовал сделать тоже самое в Lazaruse.
Во-первых - видимо форма перед отрисовкой заливается цветом. В итоге я наблюдаю жесткое мерцание. ПРичем преимущественно вижу не результат отрисовки, а форму залитую цветом.
Второй момент - это то, что прога перестает реагировать на закрытие. Даже на Halt;


 
Eraser ©   (2008-04-11 19:40) [1]

> OnPaint:
> begin
> //Render
> SwapBuffers(DC);
> InvalidateRect(Handle,nil,false);

бесконечное зацикливание, зачем это?

> В итоге я наблюдаю жесткое мерцание

скорее всего проблема в erase background.


 
Sapersky   (2008-04-11 19:48) [2]

If the bErase parameter is TRUE for any part of the update region, the background is erased in the entire region, not just in the given part.
Может, какой-то контрол на форме перерисовывает себя через InvalidateRect фрагмента формы c bErase=True.

Другой способ получить постоянную перерисовку: OnIdle с Done := False, если оно есть в Лазарусе.


 
@!!ex ©   (2008-04-11 20:04) [3]

> бесконечное зацикливание, зачем это?

Надо рисовать анимированный объект. Как иначе?


> If the bErase parameter is TRUE for any part of the update
> region, the background is erased in the entire region, not
> just in the given part.
> Может, какой-то контрол на форме перерисовывает себя через
> InvalidateRect фрагмента формы c bErase=True.

Не. Форма пустая абсолютно.


> Другой способ получить постоянную перерисовку: OnIdle с
> Done := False, если оно есть в Лазарусе.

Нету...

Видимо придется переписать на WinAPI без форм...


 
Eraser ©   (2008-04-12 01:33) [4]

> [3] @!!ex ©   (11.04.08 20:04)
> > бесконечное зацикливание, зачем это?
>
> Надо рисовать анимированный объект. Как иначе?

по таймеру, не обязательно который на принципе wm_timer работает.
а иначе будет всегда 100% загрузка CPU.


 
grisme   (2008-04-12 08:08) [5]


> Eraser ©   (12.04.08 01:33) [4]


а если Sleep(1);? :-)


 
boa_kaa ©   (2008-04-12 08:41) [6]


> Eraser ©   (12.04.08 01:33) [4]

это обычная практика при отрисовке 3D графики
откуда по-твоему fps берутся?


 
Sapersky   (2008-04-12 17:35) [7]

> Другой способ получить постоянную перерисовку: OnIdle с
> Done := False, если оно есть в Лазарусе.
Нету...


На всякий случай уточню: TApplication.OnIdle.

Кстати, не очень понятно, зачем постоянный рендер в просмотрщике моделей. FPS можно посчитать и как 1000/RenderTime, хотя получится "не совсем тот" FPS, но изменения в производительности он отражать будет.



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

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

Наверх




Память: 0.48 MB
Время: 0.016 c
15-1208083430
homm
2008-04-13 14:43
2008.05.25
License information for TMSComm not found.


2-1208946730
Mishka
2008-04-23 14:32
2008.05.25
ibquery и params


3-1198091743
Petr V. Abramov
2007-12-19 22:15
2008.05.25
Прямые запросы к 1С MSSQL


2-1209913873
223001
2008-05-04 19:11
2008.05.25
вопрос на засыпку


15-1207730976
Виталий
2008-04-09 12:49
2008.05.25
Виртуальная машина Linux в домене