RichEdit Изменения шрифта текста странно - PullRequest
0 голосов
/ 04 ноября 2018

Я использую Delphi XE3. Мне нужно установить некоторые части длинного выражения жирным и красным. Поскольку TLabel не поддерживает такую ​​функцию, хотя объединение нескольких TLabels довольно неудобно, а TJvHTLabel не поддерживает полужирный текст, я решил реализовать это с помощью элемента управления TRichEdit, установив:

  1. BorderStyle to bsNone.
  2. ParentColor в true.
  3. Только для чтения.

Затем используйте следующий код, чтобы выделить 2 символа жирным шрифтом:

  reMsg.SelStart := 2;
  reMsg.SelLength := 2;
  reMsg.SelAttributes.Style := [fsBold];
  reMsg.SelStart := 0;
  reMsg.SelLength := 0;

Но я считаю, что шрифт элемента управления rich edit изменится на странный. Ниже приведено сравнение tlabel control и trichedit control:

enter image description here

Вы можете увидеть во второй подписи, шрифт изменен.

Я пробую много способов, например, установить шрифт элемента управления richedit вручную:

reMsg.Font.Name := labMsg.Font.Name;
reMsg.Font.Charset := labMsg.Font.Charset;

Но все еще не может решить проблему.

Почему?

1 Ответ

0 голосов
/ 04 ноября 2018

Возможно, вам следует установить для свойства TRichEdit ParentFont значение true. В этом случае TRichEdit будет использовать шрифт своего родителя (например, TForm). После этого примените свой код, чтобы выделить часть текста жирным шрифтом, и вы увидите следующее:

На этом изображении «is» в слове «this» выводится с полужирным шрифтом стиль шрифта

Я не изменял свойство Font ни TForm, ни TRichEdit. Только что создал новый проект и поместил компонент в форму. Поскольку все работает как положено, я полагаю, что проблема, описанная в вашем вопросе, связана с измененным вручную свойством TRichEdit Font. Просто верните значения по умолчанию шрифта TRichEdit или установите для его свойства ParentFont значение true.

В качестве дополнительного решения вместо использования TRichEdit для этой цели вам лучше взглянуть на TMDLabel. Он имеет множество функций для воспроизведения стиля текста, цвета, размера и т. Д.

Я не знаю имени автора этого замечательного компонента, но есть его веб-сайт: Infintuary.org

Например, с помощью этого псевдо-HTML-кода вы можете «рисовать» текст по мере необходимости:

<fs:14><fc:clRed>This</fc> is a <fc:clBlue><b>test</b> caption</fc> for TLabel</fs>

После помещения этого текста в TMDLabel вы получите следующее (скриншот из демо-приложения, загруженного с официального сайта):

enter image description here

Существует также демо-приложение, которое объясняет, как использовать этот компонент и какие теги он поддерживает. Стоит попробовать на мой взгляд.

...