2011-08-14 24 views
1

我有一個文件下載器,所以列表視圖中包含這樣的列:文件名,速度,文件大小,下載大小,剩餘/經過時間,已完成百分比(進度條) - >我需要繪製圖標,文本,背景,進度條等。什麼是存儲所有數據以在列表視圖中繪製的有效方法?Delphi:用於在列表視圖中繪圖的數據存儲器

例如,我畫了一個文本「錯誤」,然後背景必須是紅色的。我可以檢查一個錯誤並用if SameText(Item.SubItems[5], 'error') then這樣的東西繪製,但是我不知道用這種方法繪製所有項目是否快,將所有數據存儲在列表視圖中?

回答

3

ListView是數據項的線性列表的直觀表示。 ListView本身不應該被用作數據容器。

您的正確做法是讓單獨的TList有記錄或對象,每個對應一個下載的項目。當您向ListView添加「項目」時,您可以指定關聯的用戶數據。您的用戶數據是對記錄或對象的引用。

當您需要繪製一個列表視圖項目時,您將從關聯的記錄或對象中獲取數據。實際上,如果你有一個已下載項目的列表,那麼你已經擁有了你需要做的所有事情,而且這個謎題中缺少的部分是listview項目可以容納對用戶數據的引用。

+0

所以我應該創建我自己的類(基於TList)併爲每個項目創建一個類對象,然後將該對象分配給Data屬性?我只能使用列表視圖來處理我的目標。但我不知道它是否有效...... – maxfax

+1

@maxfax TList是您的數據對象的容器(您可能已經有了)。您真正需要的是描述項目狀態的數據對象。不,你不能僅僅使用listview來處理你的目標。儘管你現在可以製作一個技巧並保持一個listview,但這是一個破碎的設計,將來你會發現它。 –

+2

@daemon_x即使在非虛擬所有者繪製模式下,代碼也應該知道從何處獲取數據,並且數據對象是源代碼。 –

相關問題