Назначение шрифта TRichEdit после установки цвета фона для выделенного текста - PullRequest
0 голосов
/ 16 мая 2019

У меня есть элемент управления TRichEdit в моей форме Delphi, и я назначаю цвет фона для определенных частей текста, используя метод execute для отправки сообщения Windows в элемент управления.(Текст выбирается с помощью SelStart и SelLength перед вызовом этого кода).

FillChar(Format, SizeOf(Format), 0);
with Format do
begin
  cbSize := SizeOf(Format);
  dwMask := CFM_BACKCOLOR;
  crBackColor := AColor;
  fRichEdit.Perform(EM_SETCHARFORMAT, SCF_SELECTION, Longint(@Format));
end;

Я также хочу, чтобы шрифт мог изменяться пользователем (ПОЛНЫЙ шрифт, он не избирательный, как подсветка фона),поэтому я представляю TFontDialog пользователю, когда он хочет изменить шрифт для поля редактирования, и я назначаю шрифт шрифту элемента управления TRichEdit.

RichEdit.Font.Assign(SelectedFont);

Однако,использование сообщения Windows, кажется, останавливает обновление шрифта.Когда я комментирую метод execute, все работает нормально, но когда я раскомментирую строку, шрифт не обновляется.

Я новичок в сообщениях Windows, пожалуйста, объясните, почему это происходит.

1 Ответ

0 голосов
/ 16 мая 2019

Свойство Font, которое вы устанавливаете, будет устанавливать шрифт для всего RichEdit в целом, а не для текущего выделения текста.Если вы хотите установить шрифт для каждого выбора, вам нужно использовать поля szFaceName, yHeight и bCharset записи CHARFORMAT, которую вы передаете через EM_SETCHARFORMAT.Невозможно назначить объект TFont или даже дескриптор HFONT для каждого выбора.

...