![]() |
Модераторы: Snowy, Alexeis, MetalFan |
![]() ![]() ![]() |
|
Гость_Александр |
|
|||
Unregistered |
Добрый день!
Пишу программу, которая строит расписание дежурств. На самой важной форме, отображающей это самое расписание визуально, сидит чёртова туча компонентов. И когда форма по какой-то причине (изменение размера, открытие-закрытие панели и т.п.) отрисовывает себя по новой, это выглядит, как нервный тик - всё начинает "моргать" и дёргаться. Прошёл по списку компонентов, выставил всем DoubleBuffer. "Моргать" перестало, но время отрисовки формы выросло настолько, что можно чуть ли не кофе попить, пока она приводит себя в порядок. Думаю, я не первый сталкиваюсь с такими вещами. Кто уже решал подобные проблемы - поделитесь опытом, плиз! Спасибо заранее. |
|||
|
||||
Borland_Delphi_6 |
|
|||
![]() LoneLINEss ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2509 Регистрация: 5.11.2002 Где: in fortune dreams ... Репутация: нет Всего: 20 |
У меня похожая проблема: Timage должен двигаться, из-за этого его сильно глючит
![]() -------------------- Blind Guardian Fan :: BMSTU Student :: A polar bear is a rectangular bear after a coordinate transform. Мои фотографии |
|||
|
||||
ZLDO |
|
|||
Unregistered |
Зачем двигать TImage? Нужно двигать изображение на TImage, а чтобы не моргало нужно всё прорисовывать в памяти (например временных TBitmap), а потом за один раз выдавать на экран - ...Canvas.Draw или BitBlt
|
|||
|
||||
<Spawn> |
|
|||
![]() Око кары:) ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2776 Регистрация: 29.1.2003 Где: Екатеринбург Репутация: 2 Всего: 64 |
Гость_Александр у тебя какая машина, что так тормозит от DoubleBuffered? И зачем для каждого контрола ее выставлять? Достаточно для формы поставить. У тебя точно на таймерах\потоках ни чего не сидит?
-------------------- "Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков. |
|||
|
||||
Гость_Александр |
|
|||
Unregistered |
Машина - второй пень. Тормозит она не так страшно, но задержка в несколько секунд с прорисовкой - это хреново. Просто на форме много всякого понавешано.
Насчёт DoubleBuffered для формы - ты знаешь, если выставить для формы или если выставить для каждого компонента, программа ведёт себя по-разному. |
|||
|
||||
dm9 |
|
||||
![]() Дмитрий Копытин ![]() ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 3876 Регистрация: 22.7.2002 Где: Москва Репутация: 3 Всего: 137 |
Borland_Delphi_6, насчёт TImage.
Передо мной стояла задача периодической перерисовки изображения - всё работало очень плавно. Двигать Image - изврат. Я бы просто перерисовывал изображение на канве парента с новыми координатами. Делается так. Сам обработчик onPaint:
(Подумав) О, Господи. А теперь надо рассказать, как по-простому загрузить картинку в HBitmap, как использовать CreateDIBSection... А сейчас 5 утра. В общем, извините. Если ЭТО кому-то надо - будет. Если нет - то нет. Просто сейчас писать про всё это очень не хочется... ![]() Добавлено @ 04:03 Если интересно - напишите, и завтра я опишу всё подробно. |
||||
|
|||||
Borland_Delphi_6 |
|
|||
![]() LoneLINEss ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2509 Регистрация: 5.11.2002 Где: in fortune dreams ... Репутация: нет Всего: 20 |
dm9
Нужно, нужно ![]() -------------------- Blind Guardian Fan :: BMSTU Student :: A polar bear is a rectangular bear after a coordinate transform. Мои фотографии |
|||
|
||||
dm9 |
|
|||
![]() Дмитрий Копытин ![]() ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 3876 Регистрация: 22.7.2002 Где: Москва Репутация: 3 Всего: 137 |
Borland_Delphi_6, что-то я тогда загнался
![]() DIB - это хорошо, но в данном случае совершенно ни к чему. Просто создаёшь динамически j : TJPEGImage, грузишь туда картинку и затем отрисовываешь картинку на форме: Form1.Canvas.Draw (X, Y, j); Единственное, можно допустить такую ошибку. На таймере или как там поставить изменение координат X и Y, и затем написать Form1.Repaint или Form1.Refresh. Тогда будет моргать. А надо писать просто Form1.Canvas.Draw (X, Y, j). Всё плавно - я проверил. На на onPaint форсы тоже на забыть отрисовку. А то тут хотел уж рассказывать, как работать с DIB и DDB ![]() |
|||
|
||||
Borland_Delphi_6 |
|
||||
![]() LoneLINEss ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2509 Регистрация: 5.11.2002 Где: in fortune dreams ... Репутация: нет Всего: 20 |
Смысл этого предложения мне не понятен... ![]() И еще. Вот у меня был такой код:
(это что-то вроде скринсевера) Как мне теперь узнать аналог Image1.Left и Image1.Top? -------------------- Blind Guardian Fan :: BMSTU Student :: A polar bear is a rectangular bear after a coordinate transform. Мои фотографии |
||||
|
|||||
dm9 |
|
|||
![]() Дмитрий Копытин ![]() ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 3876 Регистрация: 22.7.2002 Где: Москва Репутация: 3 Всего: 137 |
Borland_Delphi_6, в простейшем случае я имел в виду это (см. файл).
Если более сложно - там надо писать ещё обработчик onPaint для формы и делать не столь халявную перерисовку. Добавлено @ 01:39 PS Там что-то типа 5 килобайт... Присоединённый файл ( Кол-во скачиваний: 18 ) ![]() |
|||
|
||||
Borland_Delphi_6 |
|
|||
![]() LoneLINEss ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2509 Регистрация: 5.11.2002 Где: in fortune dreams ... Репутация: нет Всего: 20 |
dm9
Спасибо, примерчик очень хороший! Тока я взялся попробовать написать эту прогу на API, а то уж слишком большая она получается. ![]() -------------------- Blind Guardian Fan :: BMSTU Student :: A polar bear is a rectangular bear after a coordinate transform. Мои фотографии |
|||
|
||||
dm9 |
|
|||
![]() Дмитрий Копытин ![]() ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 3876 Регистрация: 22.7.2002 Где: Москва Репутация: 3 Всего: 137 |
Borland_Delphi_6, О! А вот здесь тогда как раз понадобится работа с DIB
![]() И отрисовку делать надо будет, как я написал. Будет время - скину примерчик. |
|||
|
||||
Borland_Delphi_6 |
|
|||
![]() LoneLINEss ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2509 Регистрация: 5.11.2002 Где: in fortune dreams ... Репутация: нет Всего: 20 |
dm9
Спасибо, как раз хотел тебе попрасить об этом ![]()
-------------------- Blind Guardian Fan :: BMSTU Student :: A polar bear is a rectangular bear after a coordinate transform. Мои фотографии |
|||
|
||||
dm9 |
|
|||
![]() Дмитрий Копытин ![]() ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 3876 Регистрация: 22.7.2002 Где: Москва Репутация: 3 Всего: 137 |
Вот тебе примерчик отрисовки, всё на чистом WinAPI. (Не мой).
Что там тебе ещё надо. Таймер? ![]() Да, и не забывай всякие DeleteDC, DeleteObject, etc. Кстати, мои эксперименты показывают, что при такой отрисовке BeginPaint и EndPaint не спасают от мерцания почему-то... Это если движение картинки делать. Добавлено @ 17:04 PS Компиляция - запуск батника. Там < 30 кБайт. Присоединённый файл ( Кол-во скачиваний: 23 ) ![]() |
|||
|
||||
Albinos_x |
|
|||
![]() Evil Skynet ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3288 Регистрация: 28.5.2004 Где: X-6120400 Y-1 4624650 Репутация: 1 Всего: 108 |
имеются две фазы обновления окна.
1. привыводе окна винда посылает сообщение WM_ERASEBKGND, оповещяющее онеобходимости стирания фона перед процедурой рисования. Затем посылается сообщение WM_PAINT, служащее сигналом для закрашивания. Первое сообщение можно пропустить а) форсируя обновление самому с помощью вызова функции InvalidateRect(Handle, Nil, False) ; б) Можно указать VCL не стирать фон ControlStyle := ControlStyle + [csOpaque]; В этом случае от моргания можно избавиться. PS: Второй выриант в ХР не срабатывает почему-то (имею ввиду, что всё равно моргает), первый не проверял, но работать должен. -------------------- "Кто владеет информацией, тот владеет миром" Уинстон Черчилль |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Звук, графика и видео" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делится вскрытыми компонентами
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |