Перейти к содержанию
Fire Monkey от А до Я
  • 0

Как раскраcить ListView


AndroidHalfNoob

Вопрос

Создаю программно итемы. как можно их раскрасить в разные цвета. например если дата просрочена, то цвет заливки желтый. если отмена, то красный, если все ок, то зеленый.

Ссылка на комментарий

Рекомендуемые сообщения

  • 0

в принципе, все просто, достаточно сделать свой класс и создавать объект этого класса в OnUpdateObjects

Пример есть в видео effective using mobile lists или как-то так называется. CodeRage, Ray Konopka

А еще Zuby вроде что-то в этом духе запиливал...

Изменено пользователем krapotkin
Ссылка на комментарий
  • 0
  • Модераторы
11 час назад, krapotkin сказал:

А еще Zuby вроде что-то в этом духе запиливал...

http://fire-monkey.ru/topic/1903-listview-color-helper/#comment-9975

Ссылка на комментарий
  • 0

Эксперимент выдает странный результат.

Цитата

procedure myCustomItemColor(const aLV: TListView; const aItemIndex: integer; const aCustomColor: TAlphaColor;
  const aUseCustomColor: Boolean = true);
begin
  with aLV.Items[aItemIndex] do
  begin
    Data['aUseCustomColor'] := aUseCustomColor;
    Data['aCustomColor'] := aCustomColor;
  end;
end;

Процедура построения ListView1

Цитата

procedure TForm4.Button1Click(Sender: TObject);
var
  i: integer;

      LItem: TListViewItem;
begin

  ListView1.Items.Clear;
  ListView1.BeginUpdate;
  for i := 0 to 25 do
  begin
       LItem := ListView1.Items.Add;
     Text := 'Item Random ' + i.ToString;
       if (i=10) or(i=15) or (i=20) then  myCustomItemColor(ListView1, 0, TAlphaColorF.Create(-142.57142639602, 206.809524536133, 255, -55.238094329834).ToAlphaColor)
       else
       myCustomItemColor(ListView1, 0, TAlphaColorF.Create(170.666656494141, -255, -122.476196289063, -193.761901855469).ToAlphaColor)
   end;
  ListView1.EndUpdate;
end;

закрашивает все добавенные итемы в зеленый цвет. а при прокрутке ListView1 дальше 6 итема, все итемы становятся белыми.

Если изменить код и добавить то что выделено жирным шрифтом

Цитата

 

 for i := 0 to 25 do
  begin
    with ListView1.Items.Insert(0) do
    begin

     LItem := ListView1.Items.Add;
      LItem.Text := 'Item Random ' + i.ToString;
    
       if (i=10) or(i=15) or (i=20) then  myCustomItemColor(ListView1, 0, TAlphaColorF.Create(-142.57142639602, 206.809524536133, 255, -55.238094329834).ToAlphaColor)
       else
       myCustomItemColor(ListView1, 0, TAlphaColorF.Create(170.666656494141, -255, -122.476196289063, -193.761901855469).ToAlphaColor)
    end;
  end;
  ListView1.EndUpdate;
end;

то все работает как надо и при прокрутке не белеет

Изменено пользователем AndroidHalfNoob
Ссылка на комментарий
  • 0
  • Модераторы
with ListView1.Items.Insert(0) do
LItem := ListView1.Items.Add;

WTF??

Вас не смущает эта процедура и её параметры?

procedure myCustomItemColor(const aLV: TListView; const aItemIndex: integer; const aCustomColor: TAlphaColor;
  const aUseCustomColor: Boolean = true);

Изменено пользователем ZuBy
Ссылка на комментарий
  • 0
24 минуты назад, ZuBy сказал:

with ListView1.Items.Insert(0) do
LItem := ListView1.Items.Add;

WTF??

Вас не смущает эта процедура и её параметры?

procedure myCustomItemColor(const aLV: TListView; const aItemIndex: integer; const aCustomColor: TAlphaColor;
  const aUseCustomColor: Boolean = true);

да. я понимаю что тут как бы двойная вставка получается, но если это убрать, то суть не меняется. элементы раскрашиваются каждый пятый, но при прокрутке все равно становятся все белые.

Ссылка на комментарий
  • 0
  • Модераторы

редактор что-то снова гонит...

2016-04-19_18-44-54.png

 

 

 

 

 

 

 

и еще что это за цвета??

цвет там генерируется подругому

TAlphaColorF.Create(255 / 170, 255 / 255, 255 / 122, 255 / 193).ToAlphaColor

 

Изменено пользователем ZuBy
Ссылка на комментарий
  • 0

-142.57142639602, 206.809524536133, 255, -55.238094329834     Это бордовый цвет
 170.666656494141, -255, -122.476196289063, -193.761901855469        салатовый

 

Изменено пользователем AndroidHalfNoob
Ссылка на комментарий
  • 0
  • Модераторы
6 минут назад, AndroidHalfNoob сказал:

-142.57142639602, 206.809524536133, 255, -55.238094329834     Это бордовый цвет
 170.666656494141, -255, -122.476196289063, -193.761901855469        салатовый

отрицательных значении не может быть, увы

Ссылка на комментарий
  • 0
1 минуту назад, ZuBy сказал:

отрицательных значении не может быть, увы

у меня же как то работает:) завтра с работы скину полностью проект в архиве

 

Изменено пользователем AndroidHalfNoob
Ссылка на комментарий
  • 0

Выкладываю проект.

Если нажать кнопку "Заполнить", то отрабатывает как надо, но если прокручивать вниз, то все итемы белеют.

Так же ниже на форме ползунки имеются. Четвертый ползунок отвечает за цвет. остальные за насыщенность и прочее.

ColorListView.rar

Ссылка на комментарий
  • 0
  • Модераторы

еще раз повторюсь:

  1. отрицательных значении не может быть (посмотрите исходники TAlphaColor - 0..255, TAlphaColorF - 0..1)
  2. добавил myInsertIndex для понимания с каким индексом идёт работа

ColorListView_2.zip

Ссылка на комментарий
  • 0
  • Модераторы
13 минуты назад, Rusland сказал:

ZuBy, как изменить цвет выделенного itema?

можно попробовать использовать хэлпер

Ссылка на комментарий
  • 0
16 минут назад, ZuBy сказал:

можно попробовать использовать хэлпер

Так не работает же хелпер... вот, например, свойство FBackgroundStyleColor в private секции, до него теперь не добраться.

Изменено пользователем Rusland
Ссылка на комментарий
  • 0
  • Модераторы

у меня пока нет берлина, поэтому не могу сказать точно.

Но предложить могу вот так, в новой процедуре в public секции сделать:

FSelectionStyleImage := nil; // освобождаем от ресурсов, для использования цвета
FSelectionStyleColor := TAlphaColorRec.Green; // присваиваем собственный цвет для выделения

в DrawItemsFill нужно проверить текущий индекс на выделение, если выделено, то присвоить 

FBrush.Color := FSelectionStyleColor; // присваиваем цвет нашему выделенному Index'у

Как-то так, должно получится

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...