Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2017.03.26;
Скачать: CL | DM;

Вниз

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

 
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 вся ветка

Текущий архив: 2017.03.26;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.005 c
15-1459036034
Kilkennycat
2016-03-27 02:47
2017.03.26
Неплохая мимика у робота. и цель в жизни тож.


15-1459546202
Юрий
2016-04-02 00:30
2017.03.26
С днем рождения ! 2 апреля 2016 суббота


15-1458782603
Kilkennycat
2016-03-24 04:23
2017.03.26
Защита прав потребителя


4-1282284939
Dmitriy
2010-08-20 10:15
2017.03.26
перерисовка надписи


4-1282063966
kolj
2010-08-17 20:52
2017.03.26
Как закрить все екземпляры программы на терминальном сервере.