"EhLib.Com"
https://forum.ehlib.com/ru/

Отрисовка части (!) текста в ячейке грида другим цветом
https://forum.ehlib.com/ru/viewtopic.php?f=4&t=2710
Страница 1 из 1

Автор:  GoldMedium [ 19 дек 2018, 11:24 ]
Заголовок сообщения:  Отрисовка части (!) текста в ячейке грида другим цветом

Добрый день.
Подскажите, пожалуйста, как в ячейке грида часть (!) текста отрисовывать другим цветом.
Если возможно - хотя бы простой пример.

Большое спасибо!

Автор:  EhLibSupport [ 27 дек 2018, 10:44 ]
Заголовок сообщения:  Re: Отрисовка части (!) текста в ячейке грида другим цветом

Добрый день.

К сожалению, в библиотеки нет специальных функций или классов для отрисовки мультиформатного текста.
Один из вариантов, это использовать RichText, но его надо будет где-то хранить. В БД или динамически создавать.

Другой вариант - рисовать куски текста самому в событии TColumnEh.OnAdvDrawDataCell.
Вот пример обработчика события для подмены цвета, первого слова в содержимом ячейки.

Код:
procedure TForm1.DBGridEh1Columns2AdvDrawDataCell(Sender: TCustomDBGridEh; Cell,
  AreaCell: TGridCoord; Column: TColumnEh; const ARect: TRect;
  var Params: TColCellParamsEh; var Processed: Boolean);
var
  s1, s2: String;
  TextRect: TRect;
begin
  //Draw background
  //Just use default draw method with Text = ''
  Params.Text := '';
  Sender.DefaultDrawColumnDataCell(Cell, AreaCell, Column, ARect, Params);

  //Draw foreground
  Sender.Canvas.Brush.Style := bsClear;
  if (Column.DisplayText = 'South America') then
  begin
    Sender.Canvas.Font.Color := $000042CA;
    s1 := 'South ';
  end
  else
  begin
    Sender.Canvas.Font.Color := $00FF8000;
    s1 := 'North ';
  end;
  TextRect := ARect;
  TextRect.Top := TextRect.Top + 2;
  TextRect.Left := TextRect.Left + 2;
  Sender.Canvas.TextRect(TextRect, s1);

  TextRect.Left := TextRect.Left + Sender.Canvas.TextWidth(s1);
  s2 := 'America';
  Sender.Canvas.Font.Color := clWindowText;
  Sender.Canvas.TextRect(TextRect, s2);

  Processed := True;

end;


Вложения:
sshot-18.png
sshot-18.png [ 20.77 KiB | Просмотров: 1869 ]

Автор:  GoldMedium [ 27 дек 2018, 16:52 ]
Заголовок сообщения:  Re: Отрисовка части (!) текста в ячейке грида другим цветом

Красота! Спасибо огромное, отдельное за исчерпывающий пример!
Жаль что нет готового решения, такого ни у кого нет и это было бы преимуществом EhLib.
Но значит пока придётся вручную.

Ещё раз большое спасибо!

Автор:  maratvg [ 28 дек 2018, 09:12 ]
Заголовок сообщения:  Re: Отрисовка части (!) текста в ячейке грида другим цветом

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

Сейчас для таких случаев я пользуюсь джедаевской ItemHTDraw в событии OnAdvDrawDataCell грида.

Автор:  Stalker4 [ 28 дек 2018, 11:15 ]
Заголовок сообщения:  Re: Отрисовка части (!) текста в ячейке грида другим цветом

maratvg писал(а):
Тогда уж сразу поддержку html-тегов хотя бы небольшого их количества. Там и стили и цвета будут.

А я давно просил автора добавить в грид в поддержку html-тегов (например как в библиотеках от TMS) - но пока воз и ныне там. Видать мало оно кому нужно ;-(

Автор:  OlegX [ 28 дек 2018, 14:13 ]
Заголовок сообщения:  Re: Отрисовка части (!) текста в ячейке грида другим цветом

Я бы плюсанул эту хотелку

Автор:  AndrewP [ 29 дек 2018, 09:02 ]
Заголовок сообщения:  Re: Отрисовка части (!) текста в ячейке грида другим цветом

Присоединяюсь к предыдущим авторам.

Автор:  Cinemaizer [ 15 дек 2019, 09:47 ]
Заголовок сообщения:  Re: Отрисовка части (!) текста в ячейке грида другим цветом

Да, было бы отлично, хотя бы на минимальном уровне (цвет шрифта, толщина, наклон, перечеркивание...).

Автор:  Cinemaizer [ 16 дек 2019, 07:19 ]
Заголовок сообщения:  Re: Отрисовка части (!) текста в ячейке грида другим цветом

И еще бы вставку картинки в произвольном месте, как в html-тегах.

Страница 1 из 1 Часовой пояс: UTC
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/