Форум: "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.002 c