На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА 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, но там по умолчанию идет работа с моноширинным шрифтом и на вскидку ничего связанного с кернингом не нашел поиском по коду.
          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
          0 пользователей:


          Рейтинг@Mail.ru
          [ Script execution time: 0,0225 ]   [ 16 queries used ]   [ Generated: 18.04.24, 11:34 GMT ]