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

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


AndroidHalfNoob

Вопрос

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

  • 0
Опубликовано (изменено)

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

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

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

Изменено пользователем krapotkin
  • 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
  • Модераторы
Опубликовано
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
Опубликовано (изменено)
16 минут назад, ZuBy сказал:

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

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

Изменено пользователем Rusland
  • 0
  • Модераторы
Опубликовано

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

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

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

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

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

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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить на вопрос...

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

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

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

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

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

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

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