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

Как разместить программно TTimeEdit в ListView?


Kitty

Вопрос

Приложение создается для платформы Андроид.
Из INI файла читается время и помещается в список. Рисунок прилагается. Для размещения этого времени справа в списке я использую стандартный пример, который идет в Samples студии:

const System::UnicodeString sText = L"CA";
void __fastcall TForm1::ListView1UpdatingObjects(const TObject *Sender, const TListViewItem *AItem,
		  bool &AHandled)
{
 TListItemText * LCaption = reinterpret_cast<TListItemText*>((const_cast<TListViewItem*>(AItem))->Objects->FindObject(sText));
 if (LCaption == NULL)
	{
		LCaption = new TListItemText((TListItem*)AItem);
		LCaption->Name = sText;
		LCaption->Align = TListItemAlign::Trailing;
		LCaption->VertAlign = TListItemAlign::Trailing;
		LCaption->PlaceOffset->X = 15;
		LCaption->PlaceOffset->Y = 12;
		LCaption->TextAlign = TTextAlign::Center;
		LCaption->Trimming = TTextTrimming::Character;
		LCaption->IsDetailText = True;
		LCaption->Width = 90;
		LCaption->Height = 45;
	}
}

//в другом месте программы цикл и в нем фрагмент заполнения:
TListViewItem * item = ListView1->Items->Add();
//*********************
//в (*It).first например значение: 08:00:00
item->Data[sText] = TValue::From<UnicodeString>((*It).first);

Подскажите, пожалуйста, как вместо простого текста в этих местах размещать программно компонент TTimeEdit чтобы читать в него значения, и иметь возможность править эти значения времени прямо в ListView?

Спасибо.

post-132-0-10091900-1406033051.jpg

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

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

  • 0

У меня оба варианта не работают. Как правильно?

void __fastcall TMainForm::Button3Click(TObject *Sender)
{
//ItemAppearance=Custom
ListView1->BeginUpdate();
 for (int i = 0; i < 10; i++)
  {
   TListViewItem * item = ListView1->Items->Add();
   item->Text = "Текст: " + IntToStr(i);
   item->Detail = "Детальный текст: " + IntToStr(i);
   TTimeEdit * VideoTimeEdit = new TTimeEdit(item->Parent);
   VideoTimeEdit->Parent = item->Parent;
   VideoTimeEdit->Position->X = 140;
   VideoTimeEdit->Position->Y = 10;
   VideoTimeEdit->TimeFormatKind = 1;
  }
ListView1->EndUpdate();
 
}
void __fastcall TMainForm::Button3Click(TObject *Sender)
{
//ItemAppearance=Custom
TListViewItem * item;
TTimeEdit * VideoTimeEdit;
ListView1->BeginUpdate();
int j = 0;
 for (int i = 0; i < 10; i++)
  {
   item = new TListViewItem(ListView1);
   item->Text = "Текст: " + IntToStr(i);
   item->Detail = "Детальный текст: " + IntToStr(i);
   VideoTimeEdit = new TTimeEdit(item->Parent);
   VideoTimeEdit->Parent = item->Parent;
   VideoTimeEdit->Position->X = 140;
   VideoTimeEdit->Position->Y = 10 ;
   VideoTimeEdit->TimeFormatKind = 1;
   ListView1->AddObject(item);
  }
ListView1->EndUpdate();
}
//Could not find a match for 'TListViewItem::TListViewItem(TListView *)'

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

Главные отличия TListView от TListBox в:

  1. TListBoxItem - контрол, TListViewItem - нет
  2. В TListBoxItem можно добавлять любые контролы, используя Parent. В TListVIewItem - нет.
  3. TListVIewItem хранит только данные для отображения
  4. TListVIewItem сам выполняет отрисовку хранимых данных через метод Render
  5. За счет собственно ручной отрисовки в TListVIewItem достигается прирост скорости и малое потребление памяти (хранение только актуальных данных)
  6. Чтобы создать свой вариант TListViewItem, нужно создать свой класс итема, в нем реализовать требуемые данные (например время) и создать in-place редактор для редактирования времени, зарегистрировать его и тд.

P.S. В вашем случае, проще использовать Master-Detail подход. При котором по нажатию на итем, будет открываться вкладка для редактирования информации об итеме, в том числе время через TTimeEdit. Это будет быстрее и проще.

 

P.S.P.S. Если же вы все-таки хотите создать свой итем, будьте готовы, что придется детально изучить, как это делается в самом TListVew.

Ссылка на комментарий
Гость
Эта тема закрыта для публикации ответов.
×
×
  • Создать...