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

TListView Custom checkboxes (иконка чекбокс "избранное")


ENERGY

Вопрос

Привет.

Я к своему стыду так и не научился толком работать с TListView. 

TListBox это сделать просто, а вот как это сделать в TListView... Это сложный компонент.

Подскажите как правильно реализовать.

Нужно добавить с правой стороны каждого Item иконку избранное, которая работала бы как чекбокс - если нажать по ней то звездочка становится желтой и без заливки (Checked/unchecked) .

Насколько я понял в GlyphButton нельзя добавить картинку.. Как же тогда это сделать?

Спасибо.

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

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

  • 0
17 часов назад, Равиль Зарипов (ZuBy) сказал:

как-то так, но это наверное сложно для понимания)

LVStars.rar

Огромное спасибо Равиль! Как хорошо что вы помогаете.

Итак для тех кто не знает, в TListView есть режим DynamicAppearance , который позволяет добавлять предустановленные элементы - картинки, текст, GlyphButon. В хелпе  написано что их может быть любое количество.

Итак добавляем TListView, в панели Structure  выбираем TListView > ItemAppearance > Item.

В инспекторе объектов выбрать свойство Appearance и  комбобоксе Dynamic Appearance. Рядом в инспекторе появится свойство Objects - нажать на него и там уже добавляем нужные поля. Там же можно переименовать поле, в AppearanceObjectName чтобы позже использовать в RunTime. У меня периодически на этих этапах вылетает Catastrophic Failure и среду приходится терминировать с диспетчера (Berlin Update 2).

Дальше, жмем правой кнопкой мыши по ListView и выбираем Toggle Design Mode, где можно увидеть эти добавленные Custom поля и расставить их мышкой и указать выравнивание.

Это имя затем можно использовать в Runtime, для картинки это индекс в ImageList, который нужно указать в ListView  таким образом (за это еще раз спасибо Равилю! :), почему это сделали так неочевидно и почему это не указано в мануале, остается загадкой.. 

Для TImageObjectAppearance с именем Star - 

ListView1.Items.Add.Data['Star'] := Integer(1);

Например заполняем список с картинками с индексами 0 и 1:

procedure TForm5.FormShow(Sender: TObject);
var
  I: Integer;
begin
  for I := 0 to 9 do
  begin
    with ListView1.Items.Add do
    begin
      Text := 'Item ' + I.ToString;
      Data['Star'] := Integer(I mod 2 = 0);
    end;
  end;
end;


Переключаем с картинки с индексом 1 на 0 и наоборот.

procedure TForm5.ListView1ItemClick(const Sender: TObject; const AItem: TListViewItem);
begin
  AItem.Data['Star'] := AItem.Data['Star'].AsInteger xor 1;
end

;
 

 

 

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

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

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

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

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

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

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

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

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

×
×
  • Создать...