![]() |
|
Модераторы: Snowy, MetalFan, bems, Poseidon |
![]()
|
|
| shaukote |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 13.2.2013 Репутация: нет Всего: нет |
Всем доброго времени суток.
Понадобилось мне использовать функцию SetWorldTransform() для изменения осей координат при рисовании на TCanvas. Однако я столкнулся с крайне пренеприятной странностью - действие этой функции постоянно словно бы сбрасывалось. К примеру, если у меня есть две кнопки на форме, в одной я вызываю SetWorldTransform(), а в другой рисую, допустим, квадрат, как-то так:
То квадрат рисуется в стандартной системе координат, т.е. нарисуется лишь четвертая четверть квадрата в верхнем левом углу. В то же время если объединить процедуры btnChangeClick и btnDrawClick:
То квадрат, как и задумывалось, будет рисоваться сдвинутым и повёрнутым. Объясните, пожалуйста, это нормальное поведение SetGraphicsMode() или нет и можно ли как-нибудь сделать так, чтобы изменения осей координат сохранялись независимо от того, где они были выполнены? Это сообщение отредактировал(а) shaukote - 13.2.2013, 01:29 |
||||
|
|||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 18 Всего: 88 |
это не поведение SetGraphicsMode а особенности работы VCL с хендлами контекстов устройств. Она даже не гарантирует что между двумя нажатиями кнопок у Canvas.Handle сохранится одно и тоже значение, не то что сохранность настроек графического режима.
оно и понятно, ведь TPaintBox и его родитель разделяют общий канвас, и при любой перерисовке содержимого у VCL возникает необходимость рисовать на той же канве что-то свое короче хендл тебе не принадлежит, а только дают попользоваться -------------------- Обижено школьников: 8 |
|||
|
||||
| shaukote |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 13.2.2013 Репутация: нет Всего: нет |
bems, а можно как-то это "обойти"?
Просто мне было бы очень хорошо засунуть вызов SetWorldTransform() в приватный метод класса, который будет вызываться интерфейсным методом класса, который будет вызываться из отдельного (от VCL-треда) треда. Глубоко и далеко, в общем. Или тут биться лбом нет смысла, нужно искать обходные пути? Это сообщение отредактировал(а) shaukote - 13.2.2013, 04:29 |
|||
|
||||
![]()
|
| Правила форума "Delphi: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |