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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как изменить режим отображения на ScrollBox 
:(
    Опции темы
Tero
Дата 19.6.2014, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Желаю переключить режим отображения на MM_HIMETRIC при помощи функции SetMapMode. Но как получить HDC ScrollBox?

Вообще я пишу компонент наследник scrollbox, на котором будут находиться шейпы и имидж (объектные поля моего компонента). И мне надо, чтобы все размеры и координаты объектов этих объектов вводились в сотых долях мм. Есть ли вообще возможность так сделать?

Благодарю всех откликнувшихся
PM MAIL   Вверх
PointerToNil
Дата 19.6.2014, 21:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



*


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

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



пересчет, который ты хочешь поручить windows, не настолько уж сложен (по 2 действия, * и +, с 2 координатами) - я бы делал его сам - больше контроля и понимания, что происходит
PM MAIL   Вверх
Tero
Дата 20.6.2014, 05:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(PointerToNil @ 19.6.2014,  21:20)
пересчет, который ты хочешь поручить windows, не настолько уж сложен (по 2 действия, * и +, с 2 координатами) - я бы делал его сам - больше контроля и понимания, что происходит

Просто возникает один момент. Мой подход такой: все параметры задаются в 0.01 мм, в том числе высота текста. Но размеры объектов зависят от ширины текста. Если я устанавливаю высоту текста 1 см (т.е 1000 единиц), то как определить его ширину в тех же единицах? Перевод из пикселей в 0.01 мм не подходит, поскольку он приближённый.
Из твоего ответа можно подумать, что есть возможность поручить всю работу Windows? Так ли это?
PM MAIL   Вверх
PointerToNil
Дата 20.6.2014, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



*


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

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



ну ок
> как получить HDC ScrollBox?
если ты намерен использовать его функционал скроллирования (а иначе зачем он?), придется поместить внутрь другой контрол, могущий быть больше по размерам
я предложил TPaintBox, еще можно TCustomControl - на их Canvas и рисуй
но на всякий случай - есть еще TControlCanvas
> как определить его ширину в тех же единицах?
Canvas.TextWidth всегда выдает исключительно в тех же единицах (задал высоту в децимикронах - получил ширину в децимикронах, хоть какая там внутри задана система, хоть в парсеках, лишь бы изотропная)
> Перевод из пикселей в 0.01 мм не подходит, поскольку он приближённый
на растровых устройствах все равно текст будет состоять из пикселей, а насчет векторных... тебя не удивляет, что результат TextWidth - integer? таки округляет, по-любому 
> Из твоего ответа можно подумать, что есть возможность поручить всю работу Windows? Так ли это? 
я писал вполне конкретно про пересчет масштаба (из мм в пиксели)
PM MAIL   Вверх
PointerToNil
Дата 20.6.2014, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



*


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

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



Сорри, я немного запутался, тут может быть 2 совершенно разных подхода:
первый вариант - всё рисуется (в MM_HIMETRIC или обычном режиме) на канвасе объекта-подложки и нет никаких отдельных шейпов
(MappingMode задается именно для рисования на канвасе, а не для задания координат и размеров контролов)

второй вариант - у тебя отдельные шейпы, их размеры и координаты в пикселях, никаких MM_HIMETRIC, а только твой пересчет
и канвас/dc ScrollBox в этом варианте не нужен - ты ведь на нем не рисуешь, а вычислить TextWidth можно на любом другом первом попавшемся канвасе
объект-подложка тут тоже не обязателен, хотя полезен для задания рабочего поля
PM MAIL   Вверх
PointerToNil
Дата 20.6.2014, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



*


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

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



а если кто-то когда-то сказал (неужели я?), что TGraphicControl-ы рисуются на DC родительского TWinControl-а - то это не совсем так, у них DC все-таки свои и если и можно куда-то туда впихнуть свой SetMapMode(dc, MM_HIMETRIC), то это будет уже проктостоматологией (получение рабочего результата не исключено, но лезть в кишки VCL не рекомендуется)
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.0651 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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