![]() |
|
Модераторы: Akina |
![]()
|
|
| JusTalionis |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 576 Регистрация: 11.7.2006 Репутация: 6 Всего: 17 |
Далеко-далеко, в Свойствах Экрана (Виндовс), во вкладке Настройка/Дополнительно/Общие есть параметр под названием "Размер шрифта", но он имеет самое прямое отношение к графике, так как задает количество твипов на пиксел.
Так что, если Вы не хотите, чтобы весь дизайн вашей программы на какой-нибудь машине разъехался по швам, - (правило первое): Пользуйтесь только твипами! (свойство ScaleMode). Обычно этот параметр "Размер шрифта" установлен по умолчанию "Мелкий шрифт", что соответствует нормальному масштабу 100%. (Я сам столкнулся почти случайно: у одной из машин, на которых я работаю, очень старый монитор, и шрифт укрупнен подвижкой этого параметра.) Даже солидные фирменные проги часто забывают про существование такой регулировки Виндовс, и в этой ситуации вся их графика оказывается рассовмещенной. Но соблюсти совет пользоваться только твипами, на практике бывает очень затруднительно. Дело в том, что картинки, вставляемые в PictureBox вставляются только в пикселах, независимо от того, какой ScaleMode задан. Что же делать в этом случае? Вариантов только два: либо смасштабировать картинку к твипам формы, либо смасштабировать размеры формы - к пикселам картинки. Первый путь чрезвычайно трудоемок, так как для сохранения качества изображения придется применить алгоритмы сглаживания (типа фотошоповских). Я попробовал сделать следующее: набросал отладочную программку, которая попиксельно сканировала рисунок и создавала кучу команд PSet, переведя пиксельные координаты в твипы. В результате получилось то, что я и подозревал: жутко рваные контуры и иссечение всего рисунка муаровой сеткой. Тратить силы на повторение не призываю. Масштабировать размеры формы и всего, что на ней, хотя и несколько громоздко, но вполне выполнимо. Делается так: для формы устанавливаем ScaleMode 3 (пикселы). В Form_Load пишем:
где widthpix и heightpix - это ширина и высота формы в пикселах. Как узнать - в пикселах? Эти величины соответственно равны ScaleWidth и ScaleHeight в случае установки параметра "Размер шрифта" (Виндовс) в 100% (96dpi). Следует узнать, и затем задать widthpix и heightpix вручную (напр. числом). Легко видеть, что Mx и My в результате окажутся масштабами по вертикали и горизонтали. А дальше всё просто: умножаем на эти коэффициенты соответствующие размеры формы - и дело в шляпе. Теоретически, эти масштабы должны бы быть одной величиной, но так как Билл является Гейтсом, как все мы хорошо знаем, то за их фактическое равенство лично я не поручусь! Когда форме установлен ScaleMode 3 (пикселы), координаты и размеры объектов на ней автоматически пересчитываются в пикселы. Но если параметр "Размер шрифта" отличается от 100% (96dpi), то VB6 делает такой пересчет НЕПРАВИЛЬНО!! (Спасибо, Билл!). Поэтому придется в Form_Load прописать в ручную все координаты и размеры присутствующих на форме объектов. Следует присвоить им именно те значения, которые отображает VB при правильном 100% масштабе. Имейте ввиду, что если текущий масштаб (то есть во время вашей работы в VB) не 100%, т.е. установлен не "мелкий шрифт" 96dpi, то не только отображаемые значения будут неверными, но и сами объекты на форме могут съехать с предназначенных им мест. На это не надо обращать внимание и таскать их мышкой; ориентируйтесь на правильные значения при стопроцентном масштабе. Видите, сколько получается заморочек в случае работы с пикселами. Может быть кто-то скажет: "К чему эти сложности! Этот шрифт один дурак из ста подвинет". Ну, не знаю; в отличие от "самого богатого человека", я чувствую жгучий стыд, если моя прога хоть у одного сработает через-пень-колоду. Может быть, именно поэтому я и не самый богатый человек |
|||
|
||||
| mihanik |
|
|||
![]() -=Белый Медведь=- ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 4054 Регистрация: 24.4.2006 Где: г. Тверь Репутация: 11 Всего: 109 |
Это всё правильно!
Спасибо за чрезвычайно интересные замечания. Это весьма и весьма полезно программерам. Я рассматриваю это не как вопрос, а как крик души. Что сказать? Молодец!!! |
|||
|
||||
| JusTalionis |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 576 Регистрация: 11.7.2006 Репутация: 6 Всего: 17 |
Гыыы!)))) А это не вопрос! Это - ответ))))) Который я получил в процессе издевательства над другой своей прогой. Моделируется измерительный прибор со стрелкой, которая движется над рисунком шкалы. Сравнительно быстро забацал, несу на другую машину - ой, мама!... ну и пошло-покатилось, пока не добил, всё-ж таки. Вообще переносимость - эт моя любимая мозоль))))) хоцца, чтоб ВЕЗДЕ нормально работали мои творения)))))) (Но VB плохо приспособлен для такого условия |
|||
|
||||
| Naghual |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1893 Регистрация: 15.5.2004 Где: Украина, Днепр Репутация: 26 Всего: 49 |
Странно. Я всегда пользовался пикселями - проблем не было
-------------------- Я желаю всем Счастья! |
|||
|
||||
| JusTalionis |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 576 Регистрация: 11.7.2006 Репутация: 6 Всего: 17 |
При различных значениях настройки Виндов, о которой я писал?
|
|||
|
||||
| Naghual |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1893 Регистрация: 15.5.2004 Где: Украина, Днепр Репутация: 26 Всего: 49 |
Ага
-------------------- Я желаю всем Счастья! |
|||
|
||||
![]()
|
| Правила форума "VB6" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | VB6 | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |