2015-08-14 3 views
1

Поверьте мне, я сделал домашнее задание, прежде чем обратиться за помощью. Я провел последние 3 дня поиска и чтения, но я не мог прийти к решению. Поэтому любая помощь будет высоко оценена.Лучшая стратегия для слишком большого количества элементов в FireMoneky TListView.

Моя задача состоит в том, чтобы иметь ListView подключен к Dataset, где ListView Пункт имеет следующую структуру: enter image description here

иметь в виду, что

  1. Elements 4, 6, имеют фиксированные значения & цвета (т.е. этикетки)
  2. цвета элементов 1 & 10 зависит от значений элементов 5, 7, 9 &

Лучшее, что я получил, это ссылки на стандартный пример Delphi, который перемещается с помощью каталога примеров Embarcadero Delphi: ListViewMultiDetailAppearance. Это решение предлагает создать собственный класс для MutliDetailItemAppearance и зарегистрировать столько деталей, сколько нам нужно (в моем случае мне нужны дополнительные 8, я думаю).

Теперь мои вопросы:

  1. Является ли это лучший подход?
  2. Если нет, то какой подход лучше?
  3. если есть, то как добавление дополнительных 8 деталей повлияет на производительность ?
  4. и самое главное, как достичь пользовательской раскраски для элементов для каждого элемента просмотра списка на основе значений?
  5. и, наконец, как добраться до этих границ раздела? и позиция внизу внизу бордюры (зеленая линия)?

Благодарим вас за внимание.

+0

Номер 4 будет подлежать другому вопросу, и я не уверен, что вы имеете в виду под номером 5. Но я уверен, что 4 можно легко понять в коде, который я предоставил. –

+0

@JerryDodge на картинке вы видите вертикальные линии между 3 секциями. и нижняя зеленая линия ко всему элементу просмотра списка. Что касается числа 4, любые идеи? –

+1

«TListItemText» может быть настроен так, чтобы соответствовать любому стилю шрифта, который вы хотите, а для строк вы можете наследовать свой собственный класс из «TListItemObject» и делать рисунок по мере необходимости. –

ответ

1

Я не уверен, что мой путь был верным, но я использовал TListbox для такой же цели в моем проекте fmx. Структура его изделий была сформирована следующим образом во время заполнения от DataSource по LiveBindings.

procedure THMICD10Fr.LinkListControlToField1FillingListItem(Sender: TObject; 
    const AEditor: IBindListEditorItem); 
begin 
    if (Assigned(AEditor)) and (HDM2.FDQicd_detail_for_TreeView.Active) then 
    try 
     if (AEditor.CurrentObject as TMetropolisUIListBoxItem).ChildrenCount = 2 
     then 
     begin 

     with TPanel.Create(AEditor.CurrentObject as TMetropolisUIListBoxItem) do 
     begin 
      Parent := (AEditor.CurrentObject as TMetropolisUIListBoxItem); 
      Align := TAlignLayout.alRight; 
      Width := 45; 
      Margins.Bottom := 1; 
      Margins.Top := 1; 
     end; 

     with TLabel.Create((AEditor.CurrentObject as TMetropolisUIListBoxItem) 
      .Children.Items[2] as TPanel) do 
     begin 
      Parent := (AEditor.CurrentObject as TMetropolisUIListBoxItem) 
      .Children.Items[2] as TPanel; 
      Text := '↓'; 
      VertTextAlign := TTextAlign.taCenter; 
      TextAlign := TTextAlign.taCenter; 
      Align := TAlignLayout.alClient; 
      HitTest := true; 
      AutoSize := false; 
      StyledSettings := StyledSettings - [TStyledSetting.ssStyle]; 
      Font.Style := Font.Style + [TFontStyle.fsBold]; 
      Tag := HDM2.FDQicd_detail_for_TreeView.FieldByName('id').AsInteger; 
      TagString := HDM2.FDQicd_detail_for_TreeView.FieldByName 
      ('category_etiology').AsString; 
      OnClick := LabelInListBox1Click; 
     end; 
     end; 

    except 

    end; 
end; 

Этот код дал мне следующее: Внешность enter image description here

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

+0

Спасибо @ asd-tm К сожалению, использование TListBox не является вариантом для повышения производительности. Это был бы идеальный подход, я думаю, если я смогу использовать TListBox в своем приложении, но мне действительно нужно решение, связанное с TListView. –

+0

Спасибо, но не можете ли вы сделать то же самое с элементами «TListView» при обработке OnFillingListItemEvent, поскольку это относится не к типу контейнера, а к механизму «LiveBindings»? –

+0

Наверное, нет. поскольку элемент TListView не принимает дочерние элементы управления. Имеет ли это? –