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

Вниз

Проблема со шрифтами   Найти похожие ветки 

 
Lirrk   (2010-02-06 18:41) [0]

Немного ниже было написано
В KOL размер шрифта указывается в пикселах, в VCL - в пунктах.
Не совсем так. Размер шрифта и высота шрифта, параметры абсолютно разные. И не надо со мной спорить, потому что я столкнулся с этой проблемой. Если вы уверены в своей правоте, то обьясните пожалуйста, как выйти из такой ситуации.
В Delphi есть такой параметр как Font.Size (В KOL нет)
Задавая ему значения я масштабирую шрифт. Но дело в том, что у каждого шрифта своя высота. И меняется она прпорционально масштабированию. Взяли, скажем, Arial у него одна высота. Взяли Тahoma высота при том же размере шрифта стала больше.
Теперь... Мне нужно вывести текст в графическом режиме.
Причём разными шрифтами в одной строке.
Но в силу того что при одном размере высота шрифтов разная, а вывод в горафике ведётся сверху вниз.. То Шрифты "Прыгают" Их надо опустить на общую линию
В Delphi это делаю так
Задаю размер шрифта.
Читаю символ
Получаю его высоту.
На основе высоты текущего шрифта и ранее вычесленной
высотой строки (по высоте самого высокого шрифта) я получаю разницу, которую добавляю к координате Y. Всё строка ровная.
В KOL ничего подобного я не обнаружил. Есть только высота текста и высота фонта. Всё... задав высоту фонта ту же высоту получает весь текст...
Как в КОL выводить шрифты разного размера, и получать при этом реальную высоту каждого шрифта?


 
Lirrk   (2010-02-06 21:12) [1]

И ещё один момент...
не работает функция SetTextAlign
То есть я опять же не могу выравнить текст... по нижне линии.
В VCL работает. Проверил.


 
Ruzzz ©   (2010-02-07 05:46) [2]

Не знаю понял ли я вас, но вот код на си из одной моей проги:
    LOGFONT font = {0,};
    ::GetObject(GetCurrentObject(hdcMem, OBJ_FONT), sizeof(font), &font);
    font.lfUnderline = skinSettings.textFontItalic;
    font.lfWeight = (skinSettings.textFontBold) ? FW_BOLD : FW_NORMAL;
    font.lfHeight = -MulDiv(skinSettings.textFontSize, GetDeviceCaps(hdcMem, LOGPIXELSY), 72);
    font.lfWidth = 0;
    StringCchCopy(font.lfFaceName, 32, skinSettings.textFontName);
    HFONT oldFont = (HFONT)::SelectObject(hdcMem, ::CreateFontIndirect(&font));

Может он как-то поможет разобраться с размерами шрифтов. Попробуйте поиск по font.lfHeight = -MulDiv(, GetDeviceCaps(hdcMem, LOGPIXELSY), 72)


 
Lirrk   (2010-02-07 17:30) [3]

2 Ruzzz ©
Спасибо, конечно... Но меня интерисует как это сделать на Паскале и именно в KOL.
С фонтами я умею работать... Но вот в КОL столько изменено, что добратся до нужного результата подчас бывает очень трудно. Разница в результатах написаного в VCL и KOL при одном и том же коде - значительная.
Вот с размером... Задав размер шрифта в VCL я могу получить размер шрифта по вертикали. В КOL этим параметром масштабируется сам шрифт.
При этом символ оказывается крупнее.  И вот к чему это приводит. Я готовлю в Ворде текст, чтобы вывести его потом в графическом режиме. Форматирую его там. А при переносе в КОL я обнаруживаю, что форматирование сбивается... И дело не в пунктах и в пикселях, а в том что пропорции текста изменились...
И нет, или очень трудно добратся до управления рисованием самого символа.  Приходится обратится к функции WinApi SetTextAlign. Но в КОL она  работает несколько иначе...
В VCL  при примениии флага TA_Bootom прыжок символа при мзменении фонта малозаметен.... В  KOL - ноль эмоций... Спас флаг TA_BaseLine
И таких мелочей много...


 
MTsv DN   (2010-02-07 22:17) [4]

1. KOL - это object-обертка для WinAPI. Либо работайте с шрифтами как Вам посоветовал Ruzzz (в смысле через WinAPI), либо, если в KOL ошибка, исправляйте и, при желании, информируйте коммунити, либо используйте VCL, раз там все работает.

2. Я уже говорил ранее. Если хотите конкретной помощи, то делайте тестовый проект с указанием ошибки, давайте здесь ссылку. У кого будет время, тот посмотрит.

3. Как можно заметить, к KOL дельфи сообщество охладело (вернее та его часть, что была заинтересована). Сейчас никто не рвется править код, оптимизировать его, сохраняя при этом идею минимизации.

4. Лично я использую KOL для создания GUI и все больше перехожу на чистый WinAPI. Из KOL.PAS чаще всего беру те функи, что прописаны были в SysUtils.



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

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

Наверх





Память: 0.46 MB
Время: 0.001 c
2-1396021466
DQ
2014-03-28 19:44
2017.03.26
Использование типов данных "Перечисление" и "Множество"


15-1459502027
KSergey
2016-04-01 12:13
2017.03.26
"Говорилка" Windows: через API узнать мужской или женский голос?


15-1459320686
DayGaykin
2016-03-30 09:51
2017.03.26
WaitableTimer vs Sleep


11-1265470866
Lirrk
2010-02-06 18:41
2017.03.26
Проблема со шрифтами


2-1437985170
Gray-Gray
2015-07-27 11:19
2017.03.26
Ошибки проекта Delphi XE8, creatin VCL Forms Application





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский