Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Еще о переносимости, как побороть некоторые траблы с графикой 
V
    Опции темы
JusTalionis
Дата 4.8.2006, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



  Далеко-далеко, в Свойствах Экрана (Виндовс), во вкладке Настройка/Дополнительно/Общие есть параметр под названием "Размер шрифта", но он имеет самое прямое отношение к графике, так как задает количество твипов на пиксел.
  Так что, если Вы не хотите, чтобы весь дизайн вашей программы на какой-нибудь машине разъехался по швам, - (правило первое):

Пользуйтесь только твипами! (свойство ScaleMode).

  Обычно этот параметр "Размер шрифта" установлен по умолчанию "Мелкий шрифт", что соответствует нормальному масштабу 100%. (Я сам столкнулся почти случайно: у одной из машин, на которых я работаю, очень старый монитор, и шрифт укрупнен подвижкой этого параметра.) Даже солидные фирменные проги часто забывают про существование такой регулировки Виндовс, и в этой ситуации вся их графика оказывается рассовмещенной.

  Но соблюсти совет пользоваться только твипами, на практике бывает очень затруднительно. Дело в том, что картинки, вставляемые в PictureBox вставляются только в пикселах, независимо от того, какой ScaleMode задан.
  Что же делать в этом случае? Вариантов только два: либо смасштабировать картинку к твипам формы, либо смасштабировать размеры формы  - к пикселам картинки.
  Первый путь чрезвычайно трудоемок, так как для сохранения качества изображения придется применить алгоритмы сглаживания (типа фотошоповских). Я попробовал сделать следующее: набросал отладочную программку, которая попиксельно сканировала рисунок и создавала кучу команд PSet, переведя пиксельные координаты в твипы. В результате получилось то, что я и подозревал: жутко рваные контуры и иссечение всего рисунка муаровой сеткой. Тратить силы на повторение не призываю.
  Масштабировать размеры формы и всего, что на ней, хотя и несколько громоздко, но вполне выполнимо.

Делается так:
для формы  устанавливаем ScaleMode 3 (пикселы).
В Form_Load пишем:
Код

Mx = widthpix / Form1.ScaleWidth
Form1.Width = Form1.Width * Mx
My = heightpix / Form1.ScaleHeight
Form1.Height = Form1.Height * My

где widthpix и heightpix - это ширина и высота формы в пикселах.
Как узнать - в пикселах? Эти величины соответственно равны ScaleWidth и ScaleHeight в случае установки параметра "Размер шрифта" (Виндовс) в 100% (96dpi).  Следует узнать, и затем задать  widthpix и heightpix вручную (напр. числом).
Легко видеть, что Mx и My в результате окажутся масштабами по вертикали и горизонтали.
А дальше всё просто: умножаем на эти коэффициенты соответствующие размеры формы - и дело в шляпе.
  Теоретически, эти масштабы должны бы быть одной величиной, но так как Билл является Гейтсом, как все мы хорошо знаем, то за их фактическое равенство лично я не поручусь!

  Когда форме установлен  ScaleMode 3 (пикселы), координаты и размеры объектов на ней автоматически пересчитываются в пикселы. Но если параметр "Размер шрифта" отличается от 100% (96dpi), то VB6 делает такой пересчет НЕПРАВИЛЬНО!! (Спасибо, Билл!). Поэтому придется в  Form_Load прописать в ручную все координаты и размеры присутствующих на форме объектов. Следует присвоить им именно те значения, которые отображает VB при правильном 100% масштабе. Имейте ввиду, что если текущий масштаб (то есть во время вашей работы в VB) не 100%, т.е. установлен не "мелкий шрифт" 96dpi, то не только отображаемые значения будут неверными, но и сами объекты на форме могут съехать с предназначенных им мест. На это не надо обращать внимание и таскать их мышкой; ориентируйтесь на правильные значения при стопроцентном масштабе.
  Видите, сколько получается заморочек в случае работы с пикселами. Может быть кто-то скажет: "К чему эти сложности! Этот шрифт один дурак из ста подвинет". Ну, не знаю; в отличие от "самого богатого человека", я чувствую жгучий стыд, если моя прога хоть у одного сработает через-пень-колоду.
Может быть, именно поэтому я и не самый богатый человек smile

PM MAIL   Вверх
mihanik
Дата 4.8.2006, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


-=Белый Медведь=-
****


Профиль
Группа: Комодератор
Сообщений: 4054
Регистрация: 24.4.2006
Где: г. Тверь

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



Это всё правильно!
Спасибо за чрезвычайно интересные замечания.
Это весьма и весьма полезно программерам.

Я рассматриваю это не как вопрос, а как крик души.

Что сказать?
Молодец!!!



--------------------
Программистами не рождаются, - это родовая травма...
user posted imageuser posted image
PM MAIL WWW ICQ   Вверх
JusTalionis
Дата 4.8.2006, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



smile
Гыыы!)))) А это не вопрос! Это - ответ)))))
Который я получил в процессе издевательства над другой своей прогой.
Моделируется измерительный прибор со стрелкой, которая движется над рисунком шкалы.
Сравнительно быстро забацал, несу на другую машину - ой, мама!... ну и пошло-покатилось, пока не добил, всё-ж таки.

Вообще переносимость - эт моя любимая мозоль))))) хоцца, чтоб ВЕЗДЕ нормально работали мои творения))))))

(Но VB плохо приспособлен для такого условия smile )

PM MAIL   Вверх
Naghual
Дата 4.8.2006, 18:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1893
Регистрация: 15.5.2004
Где: Украина, Днепр

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



Странно. Я всегда пользовался пикселями - проблем не было


--------------------
Я желаю всем Счастья!
PM ICQ Skype   Вверх
JusTalionis
Дата 8.8.2006, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



При различных значениях настройки Виндов, о которой я писал?
PM MAIL   Вверх
Naghual
Дата 15.8.2006, 09:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1893
Регистрация: 15.5.2004
Где: Украина, Днепр

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



Ага


--------------------
Я желаю всем Счастья!
PM ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по VB обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB6 | Следующая тема »


 




[ Время генерации скрипта: 0.0464 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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