2012-01-29 38 views
5

我在虛擬模式(OwnerData:= True)中使用了TListView(處於報告模式)。除了我知道的那種自動調整列大小的兩種情況之外,所有的工作都很好。它們是:如何使用OwnerData處理TListView中的默認列自動調整true

  1. 雙擊標題列分隔符來自動調整單列
  2. 按Ctrl-KeypadPlus鍵自動調整大小的所有列。

這些事件的默認處理時,在虛擬模式並沒有真正的工作(這似乎自動調整數據的第一行。)我想掛接到的行爲,做自己的列自動調整大小。有誰知道這是怎麼做到的嗎?或者我可能錯過了一些明顯的東西?我正在使用Delphi XE。感謝您的任何建議。

+0

這裏有類似的東西http://stackoverflow.com/q/9255540/960757 – TLama 2012-02-29 21:24:22

回答

1

使用自動調整大小操作時可見的所有項目執行虛擬列表視圖控件的自動大小列。這是德爾福控制的行爲。嘗試在資源管理器中執行相同的操作,您可以很容易地看到這是操作系統標準。

當您在非虛擬模式下操作列表視圖時,執行自動調整大小時將考慮所有行的內容。

我不確定你爲什麼只觀察第一行數據的自動大小。如果這真的是你正在發生的事情,那麼我認爲你的代碼中必須存在一些我們需要看到的錯誤。


你的問題似乎是一個Windows XP的錯誤。就我所見,虛擬列表視圖不會在XP上正確執行自動調整大小。我認爲該探險家從XP和Vista之間的非虛擬化轉爲虛擬化,我不介意賭博探險隊有足夠的內部槓桿來解決問題。

據我所知,您未被通知自動調整大小正在發生,因此我認爲您可能很難解決該問題。如果您想進一步追蹤,則可以嘗試響應標頭控件的HDN_DIVIDERDBLCLICK通知和響應CTRL +的列表。但是,我不確定這種方法是否會產生任何喜悅。

+0

謝謝大衛。我不確定它使用的是什麼方法,但是在我的XP系統中,它似乎沒有使用可見行來進行自動調整(或者它的測量不正確,似乎將其設置得較小,以至於我得到大量的省略號,有時由幾個字符,有時由更多。)在任何情況下,我的問題是如何控制行爲,因爲默認不符合我的需要。 – MarkF 2012-01-29 20:49:35

+0

我在Windows 7上進行了實驗。我將在XP機器上窺視一下。看看它的表現如何。 – 2012-01-29 20:58:59

+0

謝謝,感謝您的更新。我的主要開發機器是XP,但當然我打算升級到Win 7 64bit,所以我可以玩XE2。我看到一些C++的論壇帖子提到他們必須使用他們自己的頭控件來解決這個問題,所以我認爲你可能對缺乏歡樂是正確的......我只是感到驚訝,因爲它似乎是某種東西將會有用於覆蓋。 – MarkF 2012-01-30 03:10:33

相關問題