Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Подкрашивание фона в `TRichEdit` в Delphi 2009: обход пробелов

Delphi , Графика и Игры , Цвета и Палитра

Подкрашивание фона в TRichEdit в Delphi 2009: обход пробелов

Вопрос о подкрашивании фона в компоненте TRichEdit в Delphi часто встречается у разработчиков, работающих с богатым текстовым редактированием. Особенностью данной задачи является необходимость исключения из подкрашивания определенных символов, например, пробелов.

Исходная задача

Пользователь нашел код для подкрашивания выделенного текста в TRichEdit, но ему необходимо исключить из этого процесса пробелы. В качестве примера кода для подкрашивания выделенного текста предоставлена функция RE_SetSelBgColor, которая изменяет фоновый цвет выделенного текста на указанный.

Решение проблемы

Для решения задачи можно использовать следующий подход: сначала необходимо выделить все слова, а затем применить к ним форматирование, исключая пробелы. Пример кода для подкрашивания каждого слова в TRichEdit представлен в функции SetWordBackGroundColor, которая принимает в качестве параметров компонент TRichEdit, слово (или символы, которые нужно считать словом) и цвет фона.

procedure SetWordBackGroundColor(RichEdit : TRichEdit; aWord : String; AColor: TColor);
var
  Format: CHARFORMAT2;
  Index : Integer;
  Len   : Integer;
begin
  FillChar(Format, SizeOf(Format), 0);
  Format.cbSize := SizeOf(Format);
  Format.dwMask := CFM_BACKCOLOR;
  Format.crBackColor := AColor;

  Index := 0;
  Len := Length(RichEdit.Lines.Text);
  Index := RichEdit.FindText(aWord, Index, Len, []);

  while Index <> -1 do
  begin
    RichEdit.SelStart := Index;
    RichEdit.SelLength := Length(aWord);
    RichEdit.Perform(EM_SETCHARFORMAT, SCF_SELECTION, Longint(@Format));
    Index := RichEdit.FindText(aWord, Index + Length(aWord), Len, []);
  end;
end;

Чтобы подкрасить все слова, кроме пробелов, можно использовать функцию GetListofWords для извлечения списка слов из текста TRichEdit, а затем применить функцию SetWordBackGroundColor к каждому слову из этого списка.

procedure GetListofWords(Text : String; var ListofWords : TStringList);
var
  DummyStr  : String;
  FoundWord : String;
begin
  DummyStr := Text;
  FoundWord := '';
  if (Length(Text) = 0) then exit;

  while (Pos(' ', DummyStr) > 0) do
  begin
    FoundWord := Copy(DummyStr, 1, Pos(' ', DummyStr) - 1);
    ListofWords.Add(FoundWord);
    DummyStr := Copy(DummyStr, Pos(' ', DummyStr) + 1, Length(DummyStr) - Length(FoundWord) + 1);
  end;

  if (Length(DummyStr) > 0) then
    ListofWords.Add(DummyStr);
end;

Пример использования этих функций в обработчике нажатия кнопки:

procedure TForm1.Button1Click(Sender: TObject);
var
  ListofWords : TStringList;
  i           : Integer;
begin
  ListofWords := TStringList.Create;
  try
    GetListofWords(RichEdit1.Lines.Text, ListofWords);
    if ListofWords.Count > 0 then
      for i := 0 to ListofWords.Count - 1 do
        SetWordBackGroundColor(RichEdit1, ListofWords[i], clYellow);
  finally
    ListofWords.Clear;
    ListofWords.Free;
  end;
end;

Заключение

Таким образом, разработчики могут использовать предоставленные функции для подкрашивания фона в TRichEdit, исключая из подкрашивания пробелы. Это решение было протестировано в среде Delphi 2010 и операционной системе Windows 7, но должно работать и в Delphi 2009. Однако стоит учитывать, что поиск слов по одному может быть медленным для очень больших текстов, и в таких случаях может потребоваться оптимизация алгоритма.

Создано по материалам из источника по ссылке.

Пользователь ищет способ подкрасить фон в компоненте `TRichEdit` в Delphi 2009, не затрагивая пробелы, и рассматривает функции для подкрашивания слов отдельно друг от друга.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Цвета и Палитра ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-03-14 09:17:11/0.0033471584320068/0