Delphi XE5 Firemonkey移动自定义列表框

时间:2013-12-25 10:58:34

标签: delphi firemonkey delphi-xe5

虽然我正在尝试制作像embarcadero提供的示例的自定义列表框,但它看起来很好但是对于移动应用程序我需要制作一个自定义列表框项目,但是当我右键单击我表单上的任何控件时我都没有得到编辑自定义样式的选项。我需要我的移动应用程序来制作一些自定义列表框项目,以显示每个项目中的2个图像和2个文本。有什么建议吗?

3 个答案:

答案 0 :(得分:0)

您无法在FM移动应用程序中使用“编辑自定义/默认样式”。

我发现旁路,您可以将任何VCL样式加载到位图样式设计器中并将其另存为FireMonkey样式。我确实喜欢这几次,在某些控件中有一些奇怪的行为..但如果你的应用程序中只需要2或3种控件类型,你可以尝试成功。

在VCL样式中,您可以在另一个控件中添加2个TText和2个TImage组件。

对于Android App中的默认设置,您只能使用浅色和深色默认样式,但我转换为Android样式也包含在IDE蓝色和绿色Metropolis样式中,看起来工作正常。

答案 1 :(得分:0)

将控件拖放到列表框项目中,就像您希望的那样,就像使用任何其他控件一样。举个简单的例子,您可以执行以下操作:

ListBox.items.add(''); // blank Text which normally acts as title
BoxItem := ListBox.ListItems[ListBox.Items.Count-1];
NewTitle := TText.create(nil);
NewTitle.Text := 'New Orange Title';
newTitle.color := TAlphaColors.Orange;
NewTitle.parent := BoxItem;
NewTitle.Align := TAlignLayout.Client;

答案 2 :(得分:0)

Jordan Web的答案非常好。我冒昧地扩展他的榜样:

  

将控件拖放到列表框项目中,就像您希望的那样,就像使用任何其他控件一样。举个简单的例子,您可以执行以下操作:

ListBox.items.add(''); // blank Text which normally acts as title
BoxItem := ListBox.ListItems[ListBox.Items.Count-1];
NewTitle := TText.create(nil);
NewTitle.Text := 'New Orange Title';
newTitle.color := TAlphaColors.Orange;
NewTitle.parent := BoxItem;
NewTitle.Align := TAlignLayout.Client;

为:

一个图像和两个文本对象的示例

  procedure TForm10.Button1Click(Sender: TObject);
  var newtitle : Ttext;
      boxitem : tlistboxitem;
      newimage : timage;
      tw : single;
  begin
    ListBox1.items.add('');
    BoxItem := ListBox1.ListItems[ListBox1.Items.Count-1];

    newimage := timage.create(nil);
    newimage.width := 24;
    newimage.height := 24;
    newimage.bitmap := Image1.Bitmap;
    Newimage.Align := TAlignLayout.Left;
    newimage.parent := BoxItem;
    Newimage.HitTest := false;  // otherwise you can't select the listitem

    tw := (ListBox1.Width - newimage.Width)/2;
    NewTitle := TText.create(nil);
    newtitle.TextSettings.Font.Style := [TFontStyle.fsBold];
    NewTitle.Width := tw;   //Set width to avoid partial text
    Newtitle.Margins.Left := 5;
    NewTitle.Text := 'New Orange Title ' + ListBox1.Items.Count.ToString ;
    NewTitle.TextSettings.HorzAlign := TTextAlign.Leading;
    newTitle.color := TAlphaColors.Orange;
    NewTitle.parent := BoxItem;
    NewTitle.Align := TAlignLayout.Left;
    NewTitle.HitTest := false;  //otherwise you can't select the listitem
    boxitem.TagString := NewTitle.Text;  //the required string when clicking the listitem

    NewTitle := TText.create(nil);
    NewTitle.Width := tw;
    NewTitle.Text := 'New Green SubTitle ' + ListBox1.Items.Count.ToString;
    NewTitle.TextSettings.HorzAlign := TTextAlign.Leading;
    newTitle.color := TAlphaColors.Green;
    NewTitle.parent := BoxItem;
    NewTitle.Align := TAlignLayout.right;
    NewTitle.HitTest := false;
  end;


  procedure TForm10.ListBox1Change(Sender: TObject);
  begin
    label1.Text := listbox1.Selected.TagString;
  end;