Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перерисовка канвы, События для перерисовки 
V
    Опции темы
Roman1
Дата 4.10.2010, 09:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 12.10.2007

Репутация: -1
Всего: нет



Всем доброго времени суток. Прошу подсказать решение следующей задачи. Рисую на канве компонента Draw3D (Delphi 2007). Поверх этого компонента выводятся различные формы. Их, естественно, можно перемещать мышкой.  Для перерисовки канвы при перемещении форм использую события самих этих форм - OnEndDrag  и т.п. в обработчике которых перерисовываю канву.  Но если выводится форма сообщения через функцию Showmessage или форма проводника через функцию ShellExecute, то их перемещение стирает канву и я никак не могу подобрать события компонента Draw3D для перерисовки канвы при перемещении этих форм. События OnDragOver, OnEndDrag, OnPaint и т.п. почему-то не работают. Что в этом случае нужно сделать?
Спасибо.
PM MAIL   Вверх
Amphiluke
Дата 4.10.2010, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


   ☽
***


Профиль
Группа: Завсегдатай
Сообщений: 1253
Регистрация: 26.8.2009

Репутация: 6
Всего: 112



Почему бы не использовать событие OnPaint самого компонента Draw3D?
PM   Вверх
Roman1
Дата 4.10.2010, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 12.10.2007

Репутация: -1
Всего: нет



Оно почему-то не генерируется. Может, нужно что-то в свойствах изменить. Сам пока не нашел. По крайней мере по этому событию перерисовки канвы не происходит. Для описанного случая удалось только-что сделать перерисовку через событие  OnPaint самой формы, но при этом чуть только мышь уходит в область кнопок сразу начинается мерцание - перерисовка идет одна за одной. 
PM MAIL   Вверх
Amphiluke
Дата 4.10.2010, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


   ☽
***


Профиль
Группа: Завсегдатай
Сообщений: 1253
Регистрация: 26.8.2009

Репутация: 6
Всего: 112



Установите свойство BufferedDisplay := False и напишите обработчик события OnPaint. Проверил — всё работает. smile

Добавлено через 5 минут и 43 секунды
Код

procedure TForm1.Draw3D1Paint(Sender: TObject; const ARect: TRect);
begin
  Draw3D1.Canvas.Cone(True, 5, 50, 150, 150, 0, 100, True, 50);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Draw3D1.BufferedDisplay := False;
end;

PM   Вверх
Roman1
Дата 4.10.2010, 16:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 12.10.2007

Репутация: -1
Всего: нет



Да, действительно. У меня это свойство стояло в true. Большое спасибо Amphiluke , удачи, здоровья.

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0465 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.