На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi · Книги по Delphi
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как прочитать список файлов, поддиректорий в директории?
5. Как запустить программу/файл?
... (продолжение следует) ...

Вопросы, подробно описанные во встроенной справочной системе Delphi, не несут полезной тематической нагрузки, поэтому будут удаляться.
Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.


Внимание
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки бан.
Мат в разделе - бан на три месяца...
Модераторы: jack128, D[u]fa, Shaggy, Rouse_
  
> Работает ли кернинг в RichEdit?, Что я не так делаю?
В Delphy7 написал код:
ExpandedWrap disabled
    procedure reSetKern(RichEdit:TRichEdit; k:word);
    var
      Format: CHARFORMAT2;
    begin
      FillChar(Format, SizeOf(Format), 0);
      with Format do
      begin
        cbSize   := SizeOf(Format);
        dwMask   := CFM_KERNING;
    //  dwMask   := CFM_SPACING; // - как вариант
        wKerning := k;
        Richedit.Perform(EM_SETCHARFORMAT, SCF_SELECTION, Longint(@Format));
      end;
    end;

Он никак не работает. Аналогичный код для изменения цвета фона текста:
ExpandedWrap disabled
    procedure reSetBkColor(RichEdit:TRichEdit; AColor: TColor);
    var
      Format: CHARFORMAT2;
    begin
      FillChar(Format, SizeOf(Format), 0);
      with Format do
      begin
        cbSize := SizeOf(Format);
        dwMask := CFM_BACKCOLOR;
        crBackColor := AColor;
        Richedit.Perform(EM_SETCHARFORMAT, SCF_SELECTION, Longint(@Format));
      end;
    end;

отлично выполняет свою функцию.

Может быть кернинг просто не поддерживается? Или я что-то делаю не так?
Справку смотрел?
Цитата
wKerning

Type: WORD

Value of the font size, above which to kern the character (yHeight).
This value has no effect on the text displayed by a rich edit control; it is included for compatibility with TOM interfaces. To use this member, set the CFM_KERNING flag in the dwMask member.
Справка справкой, но в программировании всегда существует много вариантов обходных путей - о них я и спрашиваю.

Я нашёл, что отправка команды с CFM_CERNING при выделенном куске текста вызывает вставку тегов /kerningXX и /kerning0 в начало и конец выделенного куска, где XX = (wKerning div 10).
Визуально это никак не проявляется не только в элементе RichEdit, но даже и в MS WordPad, если туда этот кусок перенести копипастом.

Существуют ли сторонние разработки, которые учитывают кернинг?
Я пробовал работать с API-функциями вывода символов на Canvas и там нет проблемы учесть кернинг, но самому разрабатывать аналог RichEdit как-то не хочется.
Сообщение отредактировано: swe -
Я из сторонних использовал только SynEdit, но там по умолчанию идет работа с моноширинным шрифтом и на вскидку ничего связанного с кернингом не нашел поиском по коду.
1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
0 пользователей:


Рейтинг@Mail.ru
[ Script Execution time: 0,0873 ]   [ 20 queries used ]   [ Generated: 16.04.21, 01:13 GMT ]