-
Немного ниже было написано В KOL размер шрифта указывается в пикселах, в VCL - в пунктах. Не совсем так. Размер шрифта и высота шрифта, параметры абсолютно разные. И не надо со мной спорить, потому что я столкнулся с этой проблемой. Если вы уверены в своей правоте, то обьясните пожалуйста, как выйти из такой ситуации. В Delphi есть такой параметр как Font.Size (В KOL нет) Задавая ему значения я масштабирую шрифт. Но дело в том, что у каждого шрифта своя высота. И меняется она прпорционально масштабированию. Взяли, скажем, Arial у него одна высота. Взяли Тahoma высота при том же размере шрифта стала больше. Теперь... Мне нужно вывести текст в графическом режиме. Причём разными шрифтами в одной строке. Но в силу того что при одном размере высота шрифтов разная, а вывод в горафике ведётся сверху вниз.. То Шрифты "Прыгают" Их надо опустить на общую линию В Delphi это делаю так Задаю размер шрифта. Читаю символ Получаю его высоту. На основе высоты текущего шрифта и ранее вычесленной высотой строки (по высоте самого высокого шрифта) я получаю разницу, которую добавляю к координате Y. Всё строка ровная. В KOL ничего подобного я не обнаружил. Есть только высота текста и высота фонта. Всё... задав высоту фонта ту же высоту получает весь текст... Как в КОL выводить шрифты разного размера, и получать при этом реальную высоту каждого шрифта?
-
И ещё один момент... не работает функция SetTextAlign То есть я опять же не могу выравнить текст... по нижне линии. В VCL работает. Проверил.
-
Не знаю понял ли я вас, но вот код на си из одной моей проги: LOGFONT font = ;
::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)
-
2 Ruzzz © Спасибо, конечно... Но меня интерисует как это сделать на Паскале и именно в KOL. С фонтами я умею работать... Но вот в КОL столько изменено, что добратся до нужного результата подчас бывает очень трудно. Разница в результатах написаного в VCL и KOL при одном и том же коде - значительная. Вот с размером... Задав размер шрифта в VCL я могу получить размер шрифта по вертикали. В КOL этим параметром масштабируется сам шрифт. При этом символ оказывается крупнее. И вот к чему это приводит. Я готовлю в Ворде текст, чтобы вывести его потом в графическом режиме. Форматирую его там. А при переносе в КОL я обнаруживаю, что форматирование сбивается... И дело не в пунктах и в пикселях, а в том что пропорции текста изменились... И нет, или очень трудно добратся до управления рисованием самого символа. Приходится обратится к функции WinApi SetTextAlign. Но в КОL она работает несколько иначе... В VCL при примениии флага TA_Bootom прыжок символа при мзменении фонта малозаметен.... В KOL - ноль эмоций... Спас флаг TA_BaseLine И таких мелочей много...
-
1. KOL - это object-обертка для WinAPI. Либо работайте с шрифтами как Вам посоветовал Ruzzz (в смысле через WinAPI), либо, если в KOL ошибка, исправляйте и, при желании, информируйте коммунити, либо используйте VCL, раз там все работает.
2. Я уже говорил ранее. Если хотите конкретной помощи, то делайте тестовый проект с указанием ошибки, давайте здесь ссылку. У кого будет время, тот посмотрит.
3. Как можно заметить, к KOL дельфи сообщество охладело (вернее та его часть, что была заинтересована). Сейчас никто не рвется править код, оптимизировать его, сохраняя при этом идею минимизации.
4. Лично я использую KOL для создания GUI и все больше перехожу на чистый WinAPI. Из KOL.PAS чаще всего беру те функи, что прописаны были в SysUtils.
|