簡體   English   中英

Delphi XE8 Firemonkey TListView - 如何以編程方式設置背景顏色

[英]Delphi XE8 Firemonkey TListView - How to set a background color programmatically

一個 TListView 與一個樣式相連。 此樣式包含一個名為 background 的 TColorObject。 如果您在樣式設計器中設置 TColorObject.Color(紅色),Treeview 將顯示此顏色。 如果在 TListView 的 ApplyStyleLookup 事件中以編程方式設置顏色,則背景顏色保持在樣式中設置的顏色(紅色)上!!!!

procedure TTest.TreeViewlistApplyStyleLookup(Sender: TObject);
var
 co: TColorObject;
begin
co := nil;
if Sender is TListView then  co := TListView(Sender).FindStyleResource('background') as TColorObject;
if co <> nil then co.Color := TAlphaColors.Black;    
//co is not nil 
//TColorObject background is found and black is set, but it remains on red
end;

您可以添加一個幫助器以在TCustomListView中設置私有變量
盡管出於某種原因,它僅在您添加了一些項目后才起作用

unit ListViewHelper;

interface
uses  FMX.ListView, System.UITypes ;
type
  TListViewHelper = class helper for TCustomListView
    procedure SetItemStyleFillColour(Colour : TAlphaColor);
    procedure SetBackgroundStyleColor(Colour : TAlphaColor);
  end;

implementation

{ TListViewHelper }

procedure TListViewHelper.SetBackgroundStyleColor(Colour: TAlphaColor);
begin
  TCustomListView(self).FBackgroundStyleColor := Colour;
end;

procedure TListViewHelper.SetItemStyleFillColour(Colour: TAlphaColor);
begin
  TCustomListView(self).FItemStyleFillColor := Colour;
end;

end.

然后在要更改背景顏色的任何地方使用該單元,並調用SetItemStyleFillColour

lv1.SetItemStyleFillColour(TAlphaColor($ FF4A494A));
lv1.SetBackgroundStyleColor(TAlphaColorRec.Blue);

例如

unit Main;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
  FMX.ListView.Types, FMX.ListView;

type

  TForm1 = class(TForm)
    lv1: TListView;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation
uses ListViewHelper;

{$R *.fmx}

procedure TForm1.FormCreate(Sender: TObject);
begin
  lv1.Items.Add.Text := FormatDateTime('dd-mm-yyyy HH:NN:SS ZZZ', Now());
  lv1.Items.Add.Text := FormatDateTime('dd-mm-yyyy HH:NN:SS ZZZ', Now());
  lv1.SetItemStyleFillColour(TAlphaColor($FF4A494A));
  lv1.SetBackgroundStyleColor( TAlphaColorRec.Blue);
end;

end.

您可以將TListView放在TRectangle上,並在True中設置listview的Transparent屬性。

使用 System.Rtti;

TRttiContext.Create.GetType(TListView).GetField('FBackgroundStyleColor').SetValue(ListView2, TAlphaColorRec.Orange);

TRttiContext.Create.GetType(TListView).GetField('FItemStyleFillColor').SetValue(ListView2, TAlphaColorRec.Azure);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM