AndroidHalfNoob Опубликовано 16 апреля, 2016 Поделиться Опубликовано 16 апреля, 2016 Создаю программно итемы. как можно их раскрасить в разные цвета. например если дата просрочена, то цвет заливки желтый. если отмена, то красный, если все ок, то зеленый. Цитата Ссылка на комментарий
0 krapotkin Опубликовано 16 апреля, 2016 Поделиться Опубликовано 16 апреля, 2016 (изменено) в принципе, все просто, достаточно сделать свой класс и создавать объект этого класса в OnUpdateObjects Пример есть в видео effective using mobile lists или как-то так называется. CodeRage, Ray Konopka А еще Zuby вроде что-то в этом духе запиливал... Изменено 16 апреля, 2016 пользователем krapotkin Равиль Зарипов (ZuBy) 1 Цитата Ссылка на комментарий
0 Модераторы Равиль Зарипов (ZuBy) Опубликовано 17 апреля, 2016 Модераторы Поделиться Опубликовано 17 апреля, 2016 11 час назад, krapotkin сказал: А еще Zuby вроде что-то в этом духе запиливал... http://fire-monkey.ru/topic/1903-listview-color-helper/#comment-9975 krapotkin и Kitty 2 Цитата Ссылка на комментарий
0 AndroidHalfNoob Опубликовано 18 апреля, 2016 Автор Поделиться Опубликовано 18 апреля, 2016 спасибо. буду экспериментировать. Цитата Ссылка на комментарий
0 AndroidHalfNoob Опубликовано 19 апреля, 2016 Автор Поделиться Опубликовано 19 апреля, 2016 (изменено) Эксперимент выдает странный результат. Цитата 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; то все работает как надо и при прокрутке не белеет Изменено 19 апреля, 2016 пользователем AndroidHalfNoob Цитата Ссылка на комментарий
0 Модераторы Равиль Зарипов (ZuBy) Опубликовано 19 апреля, 2016 Модераторы Поделиться Опубликовано 19 апреля, 2016 (изменено) 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); Изменено 19 апреля, 2016 пользователем ZuBy Цитата Ссылка на комментарий
0 AndroidHalfNoob Опубликовано 19 апреля, 2016 Автор Поделиться Опубликовано 19 апреля, 2016 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 Модераторы Равиль Зарипов (ZuBy) Опубликовано 19 апреля, 2016 Модераторы Поделиться Опубликовано 19 апреля, 2016 (изменено) редактор что-то снова гонит... и еще что это за цвета?? цвет там генерируется подругому TAlphaColorF.Create(255 / 170, 255 / 255, 255 / 122, 255 / 193).ToAlphaColor Изменено 19 апреля, 2016 пользователем ZuBy zairkz 1 Цитата Ссылка на комментарий
0 AndroidHalfNoob Опубликовано 19 апреля, 2016 Автор Поделиться Опубликовано 19 апреля, 2016 (изменено) -142.57142639602, 206.809524536133, 255, -55.238094329834 Это бордовый цвет 170.666656494141, -255, -122.476196289063, -193.761901855469 салатовый Изменено 19 апреля, 2016 пользователем AndroidHalfNoob Цитата Ссылка на комментарий
0 Модераторы Равиль Зарипов (ZuBy) Опубликовано 19 апреля, 2016 Модераторы Поделиться Опубликовано 19 апреля, 2016 6 минут назад, AndroidHalfNoob сказал: -142.57142639602, 206.809524536133, 255, -55.238094329834 Это бордовый цвет 170.666656494141, -255, -122.476196289063, -193.761901855469 салатовый отрицательных значении не может быть, увы Цитата Ссылка на комментарий
0 AndroidHalfNoob Опубликовано 19 апреля, 2016 Автор Поделиться Опубликовано 19 апреля, 2016 (изменено) 1 минуту назад, ZuBy сказал: отрицательных значении не может быть, увы у меня же как то работает:) завтра с работы скину полностью проект в архиве Изменено 19 апреля, 2016 пользователем AndroidHalfNoob Цитата Ссылка на комментарий
0 Rusland Опубликовано 19 апреля, 2016 Поделиться Опубликовано 19 апреля, 2016 Кстати, попробовал этот метод на Берлине, отредактировав FMX.ListView.pas. Работает. Цитата Ссылка на комментарий
0 AndroidHalfNoob Опубликовано 20 апреля, 2016 Автор Поделиться Опубликовано 20 апреля, 2016 Выкладываю проект. Если нажать кнопку "Заполнить", то отрабатывает как надо, но если прокручивать вниз, то все итемы белеют. Так же ниже на форме ползунки имеются. Четвертый ползунок отвечает за цвет. остальные за насыщенность и прочее. ColorListView.rar Цитата Ссылка на комментарий
0 Модераторы Равиль Зарипов (ZuBy) Опубликовано 20 апреля, 2016 Модераторы Поделиться Опубликовано 20 апреля, 2016 еще раз повторюсь: отрицательных значении не может быть (посмотрите исходники TAlphaColor - 0..255, TAlphaColorF - 0..1) добавил myInsertIndex для понимания с каким индексом идёт работа ColorListView_2.zip Цитата Ссылка на комментарий
0 Rusland Опубликовано 20 апреля, 2016 Поделиться Опубликовано 20 апреля, 2016 ZuBy, как изменить цвет выделенного itema? Цитата Ссылка на комментарий
0 Модераторы Равиль Зарипов (ZuBy) Опубликовано 20 апреля, 2016 Модераторы Поделиться Опубликовано 20 апреля, 2016 13 минуты назад, Rusland сказал: ZuBy, как изменить цвет выделенного itema? можно попробовать использовать хэлпер Цитата Ссылка на комментарий
0 Rusland Опубликовано 20 апреля, 2016 Поделиться Опубликовано 20 апреля, 2016 (изменено) 16 минут назад, ZuBy сказал: можно попробовать использовать хэлпер Так не работает же хелпер... вот, например, свойство FBackgroundStyleColor в private секции, до него теперь не добраться. Изменено 20 апреля, 2016 пользователем Rusland Цитата Ссылка на комментарий
0 Модераторы Равиль Зарипов (ZuBy) Опубликовано 20 апреля, 2016 Модераторы Поделиться Опубликовано 20 апреля, 2016 у меня пока нет берлина, поэтому не могу сказать точно. Но предложить могу вот так, в новой процедуре в public секции сделать: FSelectionStyleImage := nil; // освобождаем от ресурсов, для использования цвета FSelectionStyleColor := TAlphaColorRec.Green; // присваиваем собственный цвет для выделения в DrawItemsFill нужно проверить текущий индекс на выделение, если выделено, то присвоить FBrush.Color := FSelectionStyleColor; // присваиваем цвет нашему выделенному Index'у Как-то так, должно получится Rusland 1 Цитата Ссылка на комментарий
Вопрос
AndroidHalfNoob
Создаю программно итемы. как можно их раскрасить в разные цвета. например если дата просрочена, то цвет заливки желтый. если отмена, то красный, если все ок, то зеленый.
Ссылка на комментарий
17 ответов на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.