FireMonkey TListView:如何在运行时为项目着色?

时间:2015-03-02 19:02:44

标签: android delphi listview firemonkey

可以使用VCL TListView的自定义绘图,它允许您使用将TColor置于Data的相当狡猾的方法为单个项目着色(here is an example项。)

但是,在TListVew控件的XE7 FMX版本中,没有OnCustomDraw事件。我尝试了一些选项,但似乎没有什么改变颜色。我该怎么做?

3 个答案:

答案 0 :(得分:5)

您可以使用TListViewItem.Objects.DetailObject.TextColor属性更改每个列表项文本的颜色。但是没有用于更改每个列表项的背景颜色的原生属性。

相应于TListView Items background color

  

如何更改TListView项目的背景颜色?
  ...
  你必须使用一种风格。所以添加一个样式书,或者使用其中一个   Delphi附带的样式或右键单击listview"编辑自定义   风格"制作风格。 dubbleclick在样式簿上打开风格   并修改listviewstyle。

但这并没有解释如何为每个列表项应用不同的样式。

答案 1 :(得分:3)

每个项目都有一个OnPaint事件。分配如下的事件处理程序。

procedure TfrmModelArchiver.lst1Paint(Sender: TObject; Canvas: TCanvas;
  const ARect: TRectF);
begin
    Canvas.Fill.Color := TAlphaColorRec.Red;
    Canvas.FillRect(ARect, 0, 0, AllCorners, 0.2);
end;

在此事件处理程序中,不透明度设置为0.2,因此文本可以显示。如果将不透明度设置为1,则需要编写文本以及绘制背景,如下所示。

procedure TfrmModelArchiver.lst1Paint(Sender: TObject; Canvas: TCanvas;
  const ARect: TRectF);
begin
    Canvas.Fill.Color := TAlphaColorRec.Red;
    Canvas.FillRect(ARect, 0, 0, AllCorners, 1);
    Canvas.Fill.Color := TAlphaColorRec.Black;
    Canvas.FillText(ARect, 'some text', False, 1, [],
      TTextAlign.taLeading);
end;

答案 2 :(得分:3)

Here是解决方案。

这个现代的ListView组件适用于Android,IOS,OSX和Windows上的带有FireMonkey的Delphi 10 Berlin。一个很好的功能是它具有水平和垂直模式。 SetColorItemSelected,SetColorItemFill,SetColorBackground,SetColorItemSeparator,SetColorText,SetColorTextSelected,SetColorTextDetail,SetColorHeader,SetColorTextHeader以及许多其他属性。

相关问题