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

listBoxItem управление цветом


walexw

Вопрос

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

Мне нужно сделать простую вещь:

заполняя ListBox (руками) закрашивать новый listBoxItem то красным, то синим цветом.

Думаю многим доводилось делать что-то подобное.

Пригодятся любые конструктивные советы-решения-ссылки.

Спасибо.

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

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

  • 0

Я бы копал в сторону создания двух разных стилей Item один с красной подложкой другой с синей и использовал бы их по очереди при добавлении элементов в listBoxItem

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

А какая задача именно? Может лучше на ListView сделать? Если ListView подойдет могу скинуть ListViewHelper(Zuby), но только он под Delphi Seatle 10, не знаю подойдет ли к Seatle 10 Update 1.

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

Конкретно задача состоит в том, чтобы вывести в списке пары людей, каждый второй должен быть на синем фоне.

Я пока подбираю решение. Совет Крапоткина размещать на элементе прямоугольник (любого цвета) мне понравился,

правда этот прямоугольник перекрывает надписи...

А по поводу listVew: мне бы он подошел, но я не знаю, можно ли на эго элементах разместить кнопку?

(мне кроме синего фона еще кнопка нужна рядом с надписью)

Если не сложно, пришли код ListViewHelper(Zuby), буду изучать.

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

На ListView скролл значительно лучше и без лагов, и вообще очень мощный компонент, все равно, рано или поздно вы откажетесь от ListBOX.

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

 

post-412-0-33189300-1456827157_thumb.png Во первых надо в настройках ListView в ItemAppearance включить ImageListItemBottomDetailRightButton.

Далее в ItemAppearanceObjects -> ItemObjects можете указывать любые настройки, через PlaseOffset.X - Y перемещать текст и детайл текст как хотите и куда хотите, тоже самое с картинкой и кнопкой, менять цвета и шрифты.

Можете повесить обработчик в свойствах на OnItemClick, а также нажатие на саму кнопку OnButtonClick.

При заполнении Item'ам присваивайте Tag и по ним ориентируйтесь. 

Далее для покраски Item'ов подключите Хелпер Zuby(все таки не хелпер, а измененный исходник TListView) FMX.ListView.zip, пропишите пару процедур:

 

procedure myDefaultItemColor(const aLV: TListView; const aItemIndex: integer; const aUseCustomColor: Boolean = false);

begin
  with aLV.Items[aItemIndex] do
  begin
    Data['aUseCustomColor'] := aUseCustomColor;
  end;
end;
 
/// <summary> устанавливаем кастомный цвет для Item'a </summary>
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;
 
Далее к примеру заполняем ListView
 ListViewPoisk.BeginUpdate;
  for i := 0 to 15 do
  begin
    ListViewPoisk.Items.Insert(0);
    ListViewPoisk.Items[0].Tag := i;
    ListViewPoisk.Items[0].Text := 'X_text';
    ListViewPoisk.Items[0].Detail := 'X_detail';
    ListViewPoisk.Items[0].ButtonText := 'X_buttext';
    ListViewPoisk.Items[0].Data['offer'] := 0; //Если нужно хранить не отображаемые данные.
    ListViewPoisk.Items[0].Bitmap.Assign(Image1.Bitmap);
    if i mod 2 = 0 then
       myCustomItemColor(ListViewPoisk, ListViewPoisk.Items[0].Index, TAlphaColors.Lime);
    // TAlphaColors.Lime можно заменить TAlphaColorF.Create(70 / 255, 130 / 255, 180 / 255, 155 / 255).ToAlphaColor;
  end;
  ListViewPoisk.EndUpdate;
Изменено пользователем zairkz
Ссылка на комментарий
  • 0

да, если строк > 10 listBox сразу идет в топку

положить в ListViewItem все нужные компоненты вообще не очень сложно

при этом главное помнить что в FMX можно вкладывать что хочешь куда попало!

и совсем не обязательно использовать уже положенные туда Text Detail и т.д.

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

zairkz, большое спасибо за развернутый ответ! Буду переваривать. Думаю пригодится не только мне.

Для Крапоткина: тоже большое спасибо, учту ваши советы.

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

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

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

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

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

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

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

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

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

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

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