【发布时间】:2013-12-25 10:58:33
【问题描述】:
虽然我正在尝试像 embarcadero 提供的示例那样制作自定义列表框,但它看起来不错,但对于移动应用程序,我需要制作自定义列表框项目,但是当我右键单击表单上的任何控件时,我没有得到编辑自定义样式的选项。我需要我的移动应用程序来制作一些自定义的列表框项目,以在每个项目中显示 2 个图像和 2 个文本。有什么建议吗?
【问题讨论】:
标签: delphi firemonkey delphi-xe5
虽然我正在尝试像 embarcadero 提供的示例那样制作自定义列表框,但它看起来不错,但对于移动应用程序,我需要制作自定义列表框项目,但是当我右键单击表单上的任何控件时,我没有得到编辑自定义样式的选项。我需要我的移动应用程序来制作一些自定义的列表框项目,以在每个项目中显示 2 个图像和 2 个文本。有什么建议吗?
【问题讨论】:
标签: delphi firemonkey delphi-xe5
您不能在 FM 移动应用程序中使用“编辑自定义/默认样式”。
我发现绕过,您可以将任何 VCL 样式加载到位图样式设计器中并将其保存为 FireMonkey 样式。我确实喜欢过几次,在某些控件中有一些奇怪的行为。但如果您的应用中只需要 2 或 3 种控件类型,您可以尝试成功。
在 VCL 样式中,您可以在另一个控件中添加 2 个 TText 和 2 个 TImage 组件。
对于 Android 应用程序中的默认设置,您只能使用浅色和深色默认样式,但我转换为 Android 样式也包含在 IDE 蓝色和绿色 Metropolis 样式中,看起来工作正常。
【讨论】:
随心所欲地将控件拖放到列表框项目中,就像使用任何其他控件一样。举个简单的例子,你可以这样做:
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;
【讨论】:
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;
【讨论】: