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

[ListView] получить список элементов у которых Checkmark=true


Anatoliy

Вопрос

Здравствуйте.

Подскажите, пожалуйста, как правильно получить список элементов итемов (DynamicAppearance) ListView у которых AccessoryType=Checkmark=true?

Только перебор в цикле?

Спасибо.

 

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

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

  • 0

Правильный ответ - все наоборот.

Вы должны отрисовывать ListView по своим имеющимся данным.  Там и нужно брать информацию. Экранные компоненты ни при чем

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

А после этого возвращаемся к п.1

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

krapotkin, прошу прощения не понятно...

Вот есть листбокс на картинке. У чекбокса имя Check.

После нажатия кнопки "Сделать заказ" просто иду в цикле и анализирую если Check Visible=true записываю в список...

Check устанавливается кликом по листбоксу:

void __fastcall TForm1::ListView1ItemClick(TObject * const Sender, TListViewItem * const AItem)

{
 if(AItem->Index == -1)
	 {
	   return;
	 }

   TListItemAccessory * check =
   reinterpret_cast<TListItemAccessory *>(AItem->Objects->FindDrawable(L"Check"));

	  if(check)
	  {
	  if(check->Visible == true)
		{
		 check->Visible = false;
		}
		else
		   {
			check->Visible = true;
		   }
	  }
}

А как Вы бы сделали? Спасибо.

 

listcheck.jpg

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

Все что есть на экране - это отображение чего-то в памяти. например (я в С не очень, но по смыслу поймете)
 

var ListAll, ListSelected: TObjectList<TFoodMenuItem>;  

ListAll := TObjectList<TFoodMenuItem>.Create(True); // все меню
ListSelected := TObjectList<TFoodMenuItem>.Create(False); // отобранные в заказ пункты

//в OnClick нам дается Item. по индексу этого item мы берем объект из ListAll и заносим в ListSelected;

listSelected.add( ListAll[index] );

этот пример корявый и не учитывает количества и т.д. но общий смысл именно такой. По индексу в листе работаем с объектом в памяти

P.S.

если честно, то имеющийся чек какой-то совсем никакой. я бы его поменял на простой собственный image

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

Долго я искал как это сделать в DynamicAppearance. 

procedure TForm1.Button2Click(Sender: TObject);
var
  i: integer;
begin
  Memo1.Lines.Clear;
  for i := 0 to ListView1.ItemCount - 1 do
  begin
    if ListView1.Items.Objects.FindObjectT<TListItemAccessory>('Accessory2')
      .Visible = true then
    begin
      Memo1.Lines.Add('Индекс отмеченного итема= ' + inttostr(i) + ',Значение = ' +
        ListView1.Items.Objects.FindObjectT<TListItemText>('Text3').Text );
    end;
  end;

end;

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

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

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

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

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

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

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

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

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

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

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