ListView и кастомная отрисовка

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
velaskes
новенький
Сообщения: 24
Зарегистрирован: 11.03.2016 22:16:17

ListView и кастомная отрисовка

Сообщение velaskes »

Всем привет! Проблема в том, что не могу в ListView
назначить отдельной строке Style шрифта или определенный Size.
Перерыл весь инет - готовые примеры не работают.
Lazarus 1.6.4

Следующий пример не пашет от слова "совсем", зато Color срабатывает :(

Код: Выделить всё

procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView;
  Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
  if Item.Index mod 2 = 0 then
    Sender.Canvas.Font.Style := [fsBold]
  else
    Sender.Canvas.Font.Style := [];
end;     
Последний раз редактировалось velaskes 08.07.2017 22:44:46, всего редактировалось 1 раз.
zub
долгожитель
Сообщения: 2889
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Сообщение zub »

Ну какже не работают. у меня когдато работали
velaskes
новенький
Сообщения: 24
Зарегистрирован: 11.03.2016 22:16:17

Сообщение velaskes »

zub писал(а):Ну какже не работают. у меня когдато работали

Проведите эксперемент на живую) На англоязычном форуме по Лазарю
промелькнуло сообщение (от 2011) что это вообще бага... :|
zub
долгожитель
Сообщения: 2889
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Сообщение zub »

Никто не говорит что без багов. но работают.

>>Проведите эксперемент на живую)
приведенный в первом посте кусок кода явно не проходил такого эксперимента
Аватара пользователя
vitaly_l
долгожитель
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41
Контактная информация:

Сообщение vitaly_l »

velaskes писал(а):это вообще бага

Код: Выделить всё

var
  textStyle: TTextStyle;
begin
textStyle := Sender.Canvas.TextStyle;
{здесь заполняете стиль как надо и потом присваиваете}
Sender.Canvas.TextStyle := textStyle;
velaskes
новенький
Сообщения: 24
Зарегистрирован: 11.03.2016 22:16:17

Сообщение velaskes »

vitaly_l
Изображение
мдэ) Изменений не заметил...
zub писал(а):приведенный в первом посте кусок кода явно не проходил такого эксперимента

; <- в этом смысле? :D
Аватара пользователя
vitaly_l
долгожитель
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41
Контактная информация:

Сообщение vitaly_l »

velaskes писал(а):Изменений не заметил...

Да - это я не то посоветовал

Там есть:

Код: Выделить всё

ListView1CustomDraw(Sender: TCustomListView; const ARect: TRect; var DefaultDraw: Boolean);

У него есть ARect: TRect; с помощью ARect - можно рисовать самому. Соответственно задавать шрифты и прочие установки. Но возможно есть ещё варианты.
velaskes
новенький
Сообщения: 24
Зарегистрирован: 11.03.2016 22:16:17

Сообщение velaskes »

vitaly_l писал(а):с помощью ARect - можно рисовать самому.

что-то не нашел ничего связанного со шрифтами (Font, Canvas, etc)
Аватара пользователя
vitaly_l
долгожитель
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41
Контактная информация:

Сообщение vitaly_l »

velaskes писал(а):ARect

ARect - указывает область на канвасе, в которой нужно рисовать ячейку ListView (ну или написать текст). Соответственно, отключаете стандартное рисование (DefaultDraw) и рисуете всё сами. Я так рисую в стринг-гриде, но я не уверен, что точно также получится рисовать и в ListView. Просто дал идею, как вариант.

Добавлено спустя 4 минуты 39 секунд:
Вот так жирный текст работает:

Код: Выделить всё

  DefaultDraw := false;// если оставить true, то будет рисовать жирным поверх при наведении мышкой
  Sender.Canvas.Font.Color:=clGreen;
  Sender.Canvas.Font.Style:=[fsBold];
  Sender.Canvas.TextOut(0,Item.Index*16,Item.Caption); 
Ответить