![]() |
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]() ![]() ![]() |
|
Tero |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 27.5.2014 Репутация: нет Всего: нет |
Желаю переключить режим отображения на MM_HIMETRIC при помощи функции SetMapMode. Но как получить HDC ScrollBox?
Вообще я пишу компонент наследник scrollbox, на котором будут находиться шейпы и имидж (объектные поля моего компонента). И мне надо, чтобы все размеры и координаты объектов этих объектов вводились в сотых долях мм. Есть ли вообще возможность так сделать? Благодарю всех откликнувшихся |
|||
|
||||
PointerToNil |
|
|||
![]() Профиль Группа: Участник Сообщений: 108 Регистрация: 17.6.2013 Репутация: 3 Всего: 6 |
пересчет, который ты хочешь поручить windows, не настолько уж сложен (по 2 действия, * и +, с 2 координатами) - я бы делал его сам - больше контроля и понимания, что происходит
|
|||
|
||||
Tero |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 27.5.2014 Репутация: нет Всего: нет |
Просто возникает один момент. Мой подход такой: все параметры задаются в 0.01 мм, в том числе высота текста. Но размеры объектов зависят от ширины текста. Если я устанавливаю высоту текста 1 см (т.е 1000 единиц), то как определить его ширину в тех же единицах? Перевод из пикселей в 0.01 мм не подходит, поскольку он приближённый. Из твоего ответа можно подумать, что есть возможность поручить всю работу Windows? Так ли это? |
|||
|
||||
PointerToNil |
|
|||
![]() Профиль Группа: Участник Сообщений: 108 Регистрация: 17.6.2013 Репутация: 3 Всего: 6 |
ну ок
> как получить HDC ScrollBox? если ты намерен использовать его функционал скроллирования (а иначе зачем он?), придется поместить внутрь другой контрол, могущий быть больше по размерам я предложил TPaintBox, еще можно TCustomControl - на их Canvas и рисуй но на всякий случай - есть еще TControlCanvas > как определить его ширину в тех же единицах? Canvas.TextWidth всегда выдает исключительно в тех же единицах (задал высоту в децимикронах - получил ширину в децимикронах, хоть какая там внутри задана система, хоть в парсеках, лишь бы изотропная) > Перевод из пикселей в 0.01 мм не подходит, поскольку он приближённый на растровых устройствах все равно текст будет состоять из пикселей, а насчет векторных... тебя не удивляет, что результат TextWidth - integer? таки округляет, по-любому > Из твоего ответа можно подумать, что есть возможность поручить всю работу Windows? Так ли это? я писал вполне конкретно про пересчет масштаба (из мм в пиксели) |
|||
|
||||
PointerToNil |
|
|||
![]() Профиль Группа: Участник Сообщений: 108 Регистрация: 17.6.2013 Репутация: 3 Всего: 6 |
Сорри, я немного запутался, тут может быть 2 совершенно разных подхода:
первый вариант - всё рисуется (в MM_HIMETRIC или обычном режиме) на канвасе объекта-подложки и нет никаких отдельных шейпов (MappingMode задается именно для рисования на канвасе, а не для задания координат и размеров контролов) второй вариант - у тебя отдельные шейпы, их размеры и координаты в пикселях, никаких MM_HIMETRIC, а только твой пересчет и канвас/dc ScrollBox в этом варианте не нужен - ты ведь на нем не рисуешь, а вычислить TextWidth можно на любом другом первом попавшемся канвасе объект-подложка тут тоже не обязателен, хотя полезен для задания рабочего поля |
|||
|
||||
PointerToNil |
|
|||
![]() Профиль Группа: Участник Сообщений: 108 Регистрация: 17.6.2013 Репутация: 3 Всего: 6 |
а если кто-то когда-то сказал (неужели я?), что TGraphicControl-ы рисуются на DC родительского TWinControl-а - то это не совсем так, у них DC все-таки свои и если и можно куда-то туда впихнуть свой SetMapMode(dc, MM_HIMETRIC), то это будет уже проктостоматологией (получение рабочего результата не исключено, но лезть в кишки VCL не рекомендуется)
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "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. |