Показать сообщение отдельно
  #5  
Старый 12.05.2014, 10:08
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от saw_vitali
Как я понимаю далее мне необходимо программно по символьно выводить строку и форматировать её во время вывода.
Можно и так. Но так как функция RE_SetCharFormat работает на выделении, то можно сразу поместить всю строку в RichEdit, а потом выделяя (SelStart-SelLength) нужные части применять эту функцию.

Кстати эта функция имитирует верхний/нижний индекс просто делая смещение текста вверх/вниз. Но у RichEdit есть и официальный способ сделать верхний/нижний индекс.

Вот исправленная версия этой функции, которая делает "настоящий" верхний/нижний индекс:
Код:
procedure RE_SetCharFormat2(aRichEdit: TRichEdit; CharacterFormat: TCharacterFormat);
var
  Format: TCharFormat2;
begin
  FillChar(Format, SizeOf(Format), 0);
  with Format do
  begin
    cbSize := SizeOf(Format);
    dwMask := RichEdit.CFM_SUBSCRIPT;

    case CharacterFormat of
      CFM_Superscript: dwEffects := CFE_SUPERSCRIPT;
      CFM_Subscript: dwEffects := CFE_SUBSCRIPT;
      CFM_Normal: dwEffects := 0;
    end;

  end;
  aRichEdit.Perform(EM_SETCHARFORMAT, SCF_SELECTION, Longint(@Format));
end;
Ответить с цитированием