Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2017.07.16;
Скачать: [xml.tar.bz2];

Вниз

Крупный шрифт на D-7 на разных компах выглядит по разному!?   Найти похожие ветки 

 
RZD ©   (2015-08-26 21:32) [0]

Написал программу на DELPHI-7, в которой надписи на 3-х панелях: X, Y, Z служат в качестве индикаторов геометрических перемещений осей реально работающего станка. Чтобы оператор станка их хорошо видел, надписи сделаны крупным шрифтом (Font.Size:= 80). В данном случае для индикации необходим моноширинный шрифт. В Дельфи по умолчанию выбор моноширинных шрифтов невелик. Остановился на 3-х шрифтах: Consolas, Courier, Lusida Console. Путем неких ухищрений с: Font.Charset:= SHIFTJIS_CHARSET; и Font.Style:= [fsBold]; удалось добиться некой приемлемой читабельности шрифта. Однако при запуске программы на других компах (с разными ОС) наблюдается совершенно другое изображение шрифта, одно другого хуже. Пробовал запускать программу на 8-ми других компах: Win7 (32 разр) - 2 шт, WinXP(SP3) - 4 шт, Win98 - 2шт. Везде на разных компах этот крупный шрифт выглядит по разному. Одно другого хуже. Насчитал 5 вариантов отображения.

Вот исходник инициализации шрифтов:

Procedure TForm1.FormCreate(Sender: TObject);
begin
Panel_X.Font.Charset:= SHIFTJIS_CHARSET;
Panel_X.Font.Name:= "Consolas";             //Consolas
Panel_X.Font.Pitch:= fpFixed;
Panel_X.Font.Size:= 80;
Panel_X.Font.Style:= [fsBold];
Panel_X.Caption:= " X - 123 456.789 ";

Panel_Y.Font.Charset:= SHIFTJIS_CHARSET;
Panel_Y.Font.Name:= "Courier";              //Courier
Panel_Y.Font.Pitch:= fpFixed;
Panel_Y.Font.Size:= 80;
Panel_Y.Font.Style:= [fsBold];
Panel_Y.Caption:= " Y - 123 456.789 ";

Panel_Z.Font.Charset:= SHIFTJIS_CHARSET;
Panel_Z.Font.Name:= "Lusida Console";      //Lusida Console
Panel_Z.Font.Pitch:= fpFixed;
Panel_Z.Font.Size:= 80;
Panel_Z.Font.Style:= [fsBold];
Panel_Z.Caption:= " Z - 123 456.789 ";

Panel_X.DoubleBuffered:= true;
Panel_Y.DoubleBuffered:= true;
Panel_Z.DoubleBuffered:= true;
end;

В основной программе решены вопросы на 2 порядка сложнее возникшей проблемы. Что это за "хрень"? Воспоможите граждане!


 
кгшзх ©   (2015-08-26 23:18) [1]

GetDeviceCaps(DC, LOGPIXELSY);

после чего умножать


 
sniknik ©   (2015-08-27 10:14) [2]

при отсутствии шрифта на компе винда предоставляет наиболее подходящий (по ее мнению...)
т.е. то что ты написал - "Courier" вовсе не означает, что написано "Courier-ом".


 
RWolf ©   (2015-08-27 10:38) [3]

В строке названия шрифта ошибка, должно быть Lucida Console.


 
RZD ©   (2015-08-27 19:33) [4]


> В строке названия шрифта ошибка, должно быть Lucida Console.

Спасибо за внимательность. У меня "описка" в продемонстрированном исходнике. На самом деле в программе шрифт для Panel назначен в Инспекторе Объектов. Там действительно "Lucida Console".
-----------------------------------------------------------------------------

> при отсутствии шрифта на компе винда предоставляет наиболее
> подходящий (по ее мнению...)
> т.е. то что ты написал - "Courier" вовсе не означает, что
> написано "Courier-ом".

Интересная мысль. А я то предполагал, что файл скомпилированной программы содержит в себе и необходимый фрагмент шрифта, который был использован в исходнике при компиляции.
--------------------------------------------------------------------------

> GetDeviceCaps(DC, LOGPIXELSY);
>
> после чего умножать

Спасибо. Поисследую "это дело". Заодно в голове появилась мысль и я ее думаю: "навесить сверху" на Panel компонент StringGrid. Тогда в каждую "ячейку" StringGrid я смогу помещать отдельную букву(цифру) любого шрифта и тогда именно моноширинный шрифт не понадобится.

P.S. я не программист. Если один раз в год напишу программу(по необходимости) - то это уже часто.


 
sniknik ©   (2015-08-28 08:34) [5]

> Тогда в каждую "ячейку" ...
извращение.

еще одна "мысль" - нужные шрифты можно "носить" с собой, в сетапе программы к примеру, и устанавливать при необходимости.


 
Игорь Шевченко ©   (2015-08-28 10:32) [6]


> P.S. я не программист. Если один раз в год напишу программу(по
> необходимости) - то это уже часто.


Очевидно, следует нанять программиста, а не клянчить по форумам.


 
SergP ©   (2015-08-28 12:17) [7]


> Очевидно, следует нанять программиста, а не клянчить по
> форумам.


Это коронная фраза Плохиша...

С таким подходом, можно все форумы заменить на страничку с фразой:
"Если Вас что-то интересует - наймите специалиста соответствующего профиля"


 
sniknik ©   (2015-08-28 14:38) [8]

> можно все форумы заменить на страничку с фразой:
аналогично если бы на форуме хирургов спрашивали, "я не врач вообще но мне тут аппендицит вырезать нужно, что для этого потребуется?"... логично же - "хирург" (как минимум).
и тут же "зачем форум вообще? повесьте страничку - обратитесь к специалисту". ... так форум то как раз для общения этих самых специалистов (и желающих ими стать, а не "не если раз в жизни апендикс вырежу то это уже часто...").


 
RZD ©   (2015-08-28 21:43) [9]


> Очевидно, следует нанять программиста, а не клянчить по
> форумам.

---------------------------------------------------------------------------

> Это коронная фраза Плохиша...
>
> С таким подходом, можно все форумы заменить на страничку
> с фразой:
> "Если Вас что-то интересует - наймите специалиста соответствующего
> профиля"

----------------------------------------------------------------------------
Понимаю ваш юношеский максимализм.  Я не программист, а электронщик-аппаратчик. Пишу программы на 7-ми компиляторах (когда возникает необходимость, в свободное от работы время). Основное увлечение - микроконтроллеры фирмы ATMEL, для которых пишу программы на языке СИ. На Дельфи пишу крайне редко. Обратился сюда на форум за помощью (мелкий конкретный вопрос). Вместо конкретной помощи от специалистов (пока не вижу однозначного ответа на мой вопрос) наблюдаю элементы обструкции. Ребята  (специалисты), вы сначала ответьте на мой вопрос (если сможете), а уж потом мне "кости перемывайте".
P.S. учиться - никогда не поздно. Никто не рождается сразу Норбертом Винером.
P.S. -2. Даже у врачей-специалистов есть понятие "консилиум", когда специалисты врачевания принимают совместное решение. И никто их за ""это дело" не подвергает обструкции.


 
Юрий Зотов ©   (2015-08-28 22:26) [10]

> В Дельфи ... выбор моноширинных шрифтов невелик.

Delphi тут ни при чем. Если не принимать специальных мер, то Delphi "видит" все те (и только те) шрифты, которые установлены в Windows.

> при запуске программы на других компах (с разными ОС)
> наблюдается совершенно другое изображение шрифта


Вероятно, это потому, что Вы использовали шрифт, который есть не везде. Текст, в конечном счете, рисует тоже Windows (а не Delphi) - и если Windows не находит назначенный Вами шрифт, то использует наиболее (по ее мнению) похожий. А он обычно не похожий - отсюда и искажения.

=============

Используйте шрифт, который гарантированно есть везде. Например, Courier New или Microsoft Sans Serif.


 
Юрий Зотов ©   (2015-08-28 22:37) [11]

Еще вариант (правда, он намного более сложный, но зато гарантирует, что везде будет использован один и тот же шрифт) - зашить нужный шрифт в ресурсы программы и все делать руками (грузить и т.д.). Но для этого придется плотно разобраться с функциями WinAPI. Если решитесь на этот смелый поступок, то рекомендую книгу П. Румянцева (в Сети она есть). Ну и MSDN, само собой.


 
Smile ©   (2015-08-29 07:11) [12]

Screen.Fonts
Fixedsys?


 
sniknik ©   (2015-08-30 01:55) [13]

> когда специалисты врачевания принимают совместное решение.
ключевое слово "специалисты", а вот если кто заявит на консилиуме "я не врач, маляр, помогите больного правильно разрезать"... и сразу будут "обструкции".

> пока не вижу однозначного ответа на мой
однозначного ответа на много вариантов не бывает... если только не начальник приказывает "делать по второму варианту и точка!".

> вы сначала ответьте на мой вопрос (если сможете)
я смог! (гордо) см [5].

Юрий Зотов ©   (28.08.15 22:37) [11]
> зашить нужный шрифт в ресурсы
я бы все таки советовал сетап... одна строчка в сетап компилере (а то и 1 галочка в визуальном), и нет проблем.


 
invis ©   (2015-08-30 02:39) [14]

Для начала надо заменить SHIFTJIS_CHARSET (японский? зачем?) на ANSI_CHARSET, если это латинница.

Если не поможет и придётся таскать шрифт с собой, то возможно проще будет не возиться с .ttf, а подготовить картинку с заранее выведенными нужными символами, и формировать текст из кусочков этой картинки. В играх такой подход обычно используется.

А с хирургами - это конечно передёргивание. Не такого уровня в данной ветке задачи. "Маляр" вполне осилит при некоторой помощи.


 
sniknik ©   (2015-08-30 23:28) [15]

> проще будет не возиться с .ttf
сетап делал когда нибудь? ни с чем там возится не приходится, просто запись и он сам из исходной системы нужное вытащит и после в целевую вставит.

> А с хирургами - это конечно передёргивание. Не такого уровня в данной ветке задачи. "Маляр" вполне осилит при некоторой помощи.
при чем тут уровень? ему помогали, он сам начал выпячивать "я не программист" чего ждал? помощь будет качественнее? реакция вполне адекватная, не программист - не программируй.


 
invis ©   (2015-08-31 12:20) [16]

ни с чем там возится не приходится, просто запись и он сам из исходной системы нужное вытащит и после в целевую вставит.

Может быть. Это ЮЗ пугает какими-то сложностями.

при чем тут уровень?

Я не маляр, но хочу покрасить забор, посоветуйте...
Я не хирург, но хочу вырезать аппендицит, посоветуйте...
- по-моему всё-таки есть некоторая разница.


 
RZD ©   (2015-09-01 23:57) [17]

Огромное спасибо всем, кто отвечал на мой вопрос.  Зашел на этот форум не случайно, поскольку при входе на форум(конференцию) было заманчивое приглашение от администрации форума: "Если вы новичок, то вам - сюда". Ну и задал вопрос, впервые за последние 10 лет (получается, что вопросы задаю не часто). Моя основная программа на DELPHI-7 содержит несколько  тыс. строк исходника. У меня возникли проблемы с визуализацией результатов на экране компа. Я ведь никому не задавал вопросы по организации алгоритма работы ПИД-регуляторов ведения осей металлорежущего станка и обработке сигналов с энкодеров осей с помощью квадратурных декодеров. Эти вопросы я решил самостоятельно, хотя я и не программист.


> Очевидно, следует нанять программиста, а не клянчить по
> форумам.


Я работаю на небольшом машиностроительном заводике, КАМАЗ называется. Профессиональных программистов полно. Плюнь куда-нибудь в сторону: обязательно в программиста попадешь. Они от решения этой задачи отказались: "Вот если по базам данных, то мы могём, а это - не наш профиль".


> Если не поможет и придётся таскать шрифт с собой, то возможно
> проще будет не возиться с .ttf, а подготовить картинку с
> заранее выведенными нужными символами, и формировать текст
> из кусочков этой картинки. В играх такой подход обычно используется.
>


Большое спасибо. Воспользовался вашей идеей(предложением). Изготовил картинки (Image) цифр и букв шрифта, которые теперь встроены в "тело" *.exe файла и этими картинками заполняю ячейки StringGrid. От шрифтов текущей версии Windows это уже не зависит, поскольку картинки(Image) букв и цифр четко определены и их изменить Windows не может(не хочет).


 
DVM ©   (2015-09-02 10:40) [18]


> RZD ©   (01.09.15 23:57) [17]


> Изготовил картинки (Image) цифр и букв шрифта, которые теперь
> встроены в "тело" *.exe файла и этими картинками заполняю
> ячейки StringGrid.

Есть еще другой вариант, но посложнее. Картинки можно было не изготавливать и не вшивать в исполняемый файл, а генерировать на лету, но не средствами Windows GDI (все же разные версии его рисуют чуть по разному), а средствами библиотеки FreeType (http://www.freetype.org/). Получим те же картинки для букв, которые можем всегда вывести где нам надо.


 
RZD ©   (2015-09-09 21:28) [19]

DVM ©   (02.09.15 10:40) [18]


> Есть еще другой вариант, но посложнее. Картинки можно было
> не изготавливать и не вшивать в исполняемый файл, а генерировать
> на лету, но не средствами Windows GDI (все же разные версии
> его рисуют чуть по разному), а средствами библиотеки FreeType
> (http://www.freetype.org/). Получим те же картинки для букв,
>  которые можем всегда вывести где нам надо.

Огромное спасибо за ответ. Но всё-таки я выбрал вариант "встраивания картинок" цифр и букв понравившегося мне шрифта в тело *.EXE файла исполняемой программы. Некоторые элементы (символы) выбранного мной шрифта я подредактировал в программе ACDSee. В частности: знак "минус"(или тире) -  был коротковат, символы "точка" и "запятая" - были какие-то "тощие", буква "O" - была "слишком пузатая". А теперь - все нормально, и все меня устраивает.
P.S. хочу отметить, что встроенные в тело *.EXE файла картинки - это константы и программе не нужно тратить время для их генерации.


 
имя   (2015-10-20 17:03) [20]

Удалено модератором



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2017.07.16;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.52 MB
Время: 0.002 c
8-1243163026
Ferreira_II
2009-05-24 15:03
2017.07.16
Конвертирование аудиофайлов


15-1463907824
Jeer
2016-05-22 12:03
2017.07.16
Питерцы - победители в чм по программированию.


11-1265717864
tippa
2010-02-09 15:17
2017.07.16
runtime error 216


2-1442377244
vegarulez
2015-09-16 07:20
2017.07.16
Twebbrowser+IIHTMLDocument2 парсинг + innerhtml ?


2-1445341467
lewka
2015-10-20 14:44
2017.07.16
Бездействие программы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский