2015-08-26 2 views
1

TListView est connecté avec un style. Ce style contient un arrière-plan TColorObject nommé. Si vous définissez TColorObject.Color (rouge) dans le styledesigner, l'arborescence affichera cette couleur. Si la couleur est définie par programme dans l'événement ApplyStyleLookup de TListView la couleur d'arrière-plan reste sur la couleur (rouge) définie dans le style !!!!Delphi XE8 Firemonkey TListView - Comment définir une couleur d'arrière-plan par programme

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; 

Répondre

0

Vous pouvez placer TListView à l'intérieur de TRectangle et définir la propriété Transparent de listview dans True.

+0

Si je mets la transparence, pas ListViewItem est visible, mais je pense aussi qu'il pourrait fonctionner, si je mets la couleur de fond dans le style à la couleur transparente, mais il est en conséquence, si TListView a la possibilité de appliquer un style qui est seulement modifiable dans le concepteur .. –

2

Vous pouvez ajouter une aide pour définir la variable privée dans le TCustomListView
bien pour une raison quelconque, il fonctionne seulement après avoir ajouté quelques articles dans

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. 

puis utilisez cette unité où vous voulez changer la couleur de fond et appelez le SetItemStyleFillColour

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

par exemple.

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. 
+0

Cela ne fonctionne plus sur Delphi Seattle + car les deux variables sont maintenant privées. – Machado