Конференция "KOL" » Проблема со шрифтами
 
  • Lirrk (06.02.10 18:41) [0]
    Немного ниже было написано
    В KOL размер шрифта указывается в пикселах, в VCL - в пунктах.
    Не совсем так. Размер шрифта и высота шрифта, параметры абсолютно разные. И не надо со мной спорить, потому что я столкнулся с этой проблемой. Если вы уверены в своей правоте, то обьясните пожалуйста, как выйти из такой ситуации.
    В Delphi есть такой параметр как Font.Size (В KOL нет)
    Задавая ему значения я масштабирую шрифт. Но дело в том, что у каждого шрифта своя высота. И меняется она прпорционально масштабированию. Взяли, скажем, Arial у него одна высота. Взяли Тahoma высота при том же размере шрифта стала больше.
    Теперь... Мне нужно вывести текст в графическом режиме.
    Причём разными шрифтами в одной строке.
    Но в силу того что при одном размере высота шрифтов разная, а вывод в горафике ведётся сверху вниз.. То Шрифты "Прыгают" Их надо опустить на общую линию
    В Delphi это делаю так
    Задаю размер шрифта.
    Читаю символ
    Получаю его высоту.
    На основе высоты текущего шрифта и ранее вычесленной
    высотой строки (по высоте самого высокого шрифта) я получаю разницу, которую добавляю к координате Y. Всё строка ровная.
    В KOL ничего подобного я не обнаружил. Есть только высота текста и высота фонта. Всё... задав высоту фонта ту же высоту получает весь текст...
    Как в КОL выводить шрифты разного размера, и получать при этом реальную высоту каждого шрифта?
  • Lirrk (06.02.10 21:12) [1]
    И ещё один момент...
    не работает функция SetTextAlign
    То есть я опять же не могу выравнить текст... по нижне линии.
    В VCL работает. Проверил.
  • Ruzzz © (07.02.10 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 (07.02.10 17:30) [3]
    2 Ruzzz ©
    Спасибо, конечно... Но меня интерисует как это сделать на Паскале и именно в KOL.
    С фонтами я умею работать... Но вот в КОL столько изменено, что добратся до нужного результата подчас бывает очень трудно. Разница в результатах написаного в VCL и KOL при одном и том же коде - значительная.
    Вот с размером... Задав размер шрифта в VCL я могу получить размер шрифта по вертикали. В КOL этим параметром масштабируется сам шрифт.
    При этом символ оказывается крупнее.  И вот к чему это приводит. Я готовлю в Ворде текст, чтобы вывести его потом в графическом режиме. Форматирую его там. А при переносе в КОL я обнаруживаю, что форматирование сбивается... И дело не в пунктах и в пикселях, а в том что пропорции текста изменились...
    И нет, или очень трудно добратся до управления рисованием самого символа.  Приходится обратится к функции WinApi SetTextAlign. Но в КОL она  работает несколько иначе...
    В VCL  при примениии флага TA_Bootom прыжок символа при мзменении фонта малозаметен.... В  KOL - ноль эмоций... Спас флаг TA_BaseLine
    И таких мелочей много...
  • MTsv DN (07.02.10 22:17) [4]
    1. KOL - это object-обертка для WinAPI. Либо работайте с шрифтами как Вам посоветовал Ruzzz (в смысле через WinAPI), либо, если в KOL ошибка, исправляйте и, при желании, информируйте коммунити, либо используйте VCL, раз там все работает.

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

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

    4. Лично я использую KOL для создания GUI и все больше перехожу на чистый WinAPI. Из KOL.PAS чаще всего беру те функи, что прописаны были в SysUtils.
 
Конференция "KOL" » Проблема со шрифтами
Есть новые Нет новых   [134431   +10][b:0][p:0.001]