2015-03-02 57 views
2

它可以使用自定義繪製的VCL TListView的,它允許你以色個別項目(使用把一個TColor在項目的Data的模模糊糊的方法here is an exampleFireMonkey TListView:如何在運行時着色項目?

然而,在XE7 FMX版本的TListVew控件,沒有OnCustomDraw事件。我嘗試了一些選擇,但似乎沒有改變顏色。我該怎麼做呢?

+1

你沒有重新開放任何東西。你正在問一個關於新話題的新問題。這個新問題是關於FMX的。 – 2015-03-02 19:16:04

+1

舊的問題是關於VCL和Windows。你的新問題是關於完全不同的UI框架(FMX)和完全不同的操作系統(Android)。 – 2015-03-02 21:24:35

+0

已編輯 - 您在詢問FMX控制。 FMX的工作方式與VCL完全不同,並不是事件已經結束,但它不存在(也沒有)。相反,你需要一種不同的方法。重寫以表明這一點。 – 2015-03-02 22:10:55

回答

4

您可以使用TListViewItem.Objects.DetailObject.TextColor屬性更改每個列表項文本的顏色。但是沒有用於更改每個列表項背景顏色的本地屬性。

因此到TListView Items background color

如何改變的TListView項的背景顏色?
...
你必須使用一種風格。因此,添加樣式表或者使用Delphi自帶的 樣式之一,或者右鍵單擊列表視圖「編輯自定義 樣式」以創建樣式。在樣式手冊上點擊以打開樣式 並修改listview樣式。

但是這並不能解釋如何對每個列表項應用不同的樣式。

2

每個項目都有一個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; 
1

Here是解決方案。

這個現代的ListView組件可用於Delphi 10 Berlin,FireMonkey在Android,IOS,OSX和Windows上。一個很好的功能是它具有水平和垂直模式。 SetColorItemSelected,SetColorItemFill,SetColorBackground,SetColorItemSeparator,SetColorText,SetColorTextSelected,SetColorTextDetail,SetColorHeader,SetColorTextHeader和許多其他屬性。

+0

你能解釋更多的解決方案嗎?該鏈接可能有一天會消失 – inye 2017-03-26 14:48:34

+0

這是一個自定義單元FMX.ListView.pas和FMX.ListView.Types.pas。你可以在這裏測試演示https://github.com/rzaripov1990/ModernListView – alitrun 2017-03-26 23:38:15