FireMoneky TListView项目中太多元素的最佳策略

时间:2015-08-14 11:04:44

标签: delphi firemonkey delphi-xe5 delphi-xe8

相信我,在完成帮助之前,我做了功课。我花了3天时间搜索和阅读,但我无法找到解决方案。所以任何帮助都将受到高度赞赏。

我的任务是将ListView连接到数据集,其中ListView项具有以下结构: enter image description here

请记住

  1. 元素4,6和& 8具有固定值&颜色(即标签)
  2. 元素的颜色1& 10取决于元素5,7和&的值。 9
  3. 我得到的最好的是对Delphi标准示例的引用随Embarcadero Delphi示例目录:ListViewMultiDetailAppearance。 这个解决方案提供了为MutliDetailItemAppearance创建我们自己的类,并根据需要注册了许多细节(在我的情况下,我认为我需要额外的8个)。

    现在我的问题:

    1. 这是最好的方法吗?
    2. 如果没有,有什么更好的方法?
    3. 如果是的话,如何添加额外的8个细节会影响到 性能
    4. 最重要的是如何为元素实现自定义着色 每个列表视图项基于值?
    5. 最后如何到达这个部分的边界?和列表项目底部 边界(绿线)?
    6. 非常感谢你提前的想法。

1 个答案:

答案 0 :(得分:1)

我不确定我的方式是否正确,但我在我的fmx项目中使用TListbox也是如此。在从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

您可以在Item中创建并嵌套所有必需的TLayoutsTLabels等,并使用LiveBindings事件处理程序内部的逻辑设置所有必要的设置。