![]() |
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]() ![]() ![]() |
|
Tero |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 27.5.2014 Репутация: нет Всего: нет |
Как изменить режим отображения на канве наследника TShape?
Хочу установить режим MM_HIMETRIC. Перекрыл в наследнике TShape (TMetricShape) метод Paint. Для смены режима отображения на канве MetricShape применил функцию SetMapMode, установил начало координат в левый нижний угол MetricShape. Но, насколько я понимаю, фигура рисуется на канве формы. Так можно подумать, если добавить объект на форму, увеличить его размеры и поместить в левый нижний угол формы. Тогда в границах объекта появится маленькая фигура, уменьшившуяся в соответствии с разрешением экрана и переходом от координам в пикселях к координатам в 0.01 мм. Как добиться того, чтобы фигура находилась на канве MetricShape?
Вот MetricShape на форме http://s1.ipicture.ru/uploads/20140527/thumb/szup4WWu.bmp Буду весьма признателен всем откликнувшимся) Это сообщение отредактировал(а) Tero - 28.5.2014, 10:57 |
|||
|
||||
Illusion Dolphin |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1198 Регистрация: 3.5.2003 Репутация: 36 Всего: 63 |
У Shape нет канфы и у наследника нету, значит никак. Это не оконный компонент, а раз нет окна то и канфу не к чему приделывать. И картинку ничего не понятно - залейте jpeg/png и нормальным размером - может что понятнее будет. -------------------- В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен. Шифрование и организация фотографий - Photo Database 4.5 |
||||
|
|||||
Tero |
|
||||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 27.5.2014 Репутация: нет Всего: нет |
Но канва есть у предка TShape:
Или я что-то не понимаю? Вот картинка: http://s1.ipicture.ru/uploads/20140529/s64Rq2M1.jpg Фигура появилась в поле MetricShape1 в тот момент, когда я переместил объект в левый нижний угол формы. Размеры фигуры малы из-за смены режима отображения с MM_TEXT на MM_HIMETRIC. Так как в MM_TEXT размеры и координаты вводятся в количестве точек и в 1 мм можно уместить около 2.5 точек, а в новом режиме размеры вводятся в 0.01 мм. Ф |
||||
|
|||||
PointerToNil |
|
||||
![]() Профиль Группа: Участник Сообщений: 108 Регистрация: 17.6.2013 Репутация: 3 Всего: 6 |
ты это уже успешно делаешь
Canvas и DC - по сути совсем разные вещи (Canvas просто хранит Pen и Brush, но зачем-то имеет свойство Handle - видимо, для унификации с WindowControl, но оно все равно постоянно перезаписывается - в общем, наворотили борландовцы) кстати, вместо всего этого твоего своего собственного рисования ты мог бы просто вызвать inherited сразу после SetMapMode и SetViewPortOrgEx - на выходе будет то же самое в общем, наверное, нужно так: SetViewPortOrgEx(Handle, Left, Top+Height, nil); Это сообщение отредактировал(а) PointerToNil - 29.5.2014, 08:47 |
||||
|
|||||
Tero |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 27.5.2014 Репутация: нет Всего: нет |
Тем не менее, в методе Paint TShape при рисовании фигур никакой привязки к левому верхнему углу не делается. Добавил Left и Top, фигура начинает ездить в поле TMetricShape, если перемещать объект за верхний и правый край формы. Это сообщение отредактировал(а) Tero - 29.5.2014, 09:22 |
|||
|
||||
PointerToNil |
|
|||
![]() Профиль Группа: Участник Сообщений: 108 Регистрация: 17.6.2013 Репутация: 3 Всего: 6 |
и правда, TWinControl.PaintControls вызывает для каждого дочернего MoveWindowOrg(DC, Left, Top), а там делается SetWindowOrgEx
msdn говорит, что нужно делать либо SetWindowOrgEx, либо SetViewportOrgEx, но не оба сразу, а у тебя получается, что оба будут вызываться так что, видимо, либо WindowOrg нужно сбрасывать в 0, либо как-то иначе это учитывать смотри, как именно у тебя "фигура начинает ездить" и скорректируй это может, нужно вместо Left и Top прибавлять их же, но пересчитанные в metric? |
|||
|
||||
Tero |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 27.5.2014 Репутация: нет Всего: нет |
Благодарю за помощь. Но, по-моему, в результате всех этих манипуляций фигура будет рисоваться в пределах границ MetricShape, но на форме. Это сообщение отредактировал(а) Tero - 29.5.2014, 12:07 |
|||
|
||||
PointerToNil |
|
|||
![]() Профиль Группа: Участник Сообщений: 108 Регистрация: 17.6.2013 Репутация: 3 Всего: 6 |
ну так а где вы хотели её рисовать-то? у GraphicControl-а нет своего окна
если бы я делал подобие графического редактора, то рисовал бы всё на одной канве (как вариант, паинтбокса внутри скроллбокса), а если так нужны отдельные объекты - наследовал бы их просто от TObject ну или, для облегчения сериализации - TPersistent/TComponent |
|||
|
||||
Tero |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 27.5.2014 Репутация: нет Всего: нет |
А где рисуются линии и фигуры в PaintBox? Он, как и Tshape, не является оконным компонетолм. И у них общий предок. Это сообщение отредактировал(а) Tero - 29.5.2014, 19:00 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Общие вопросы" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |