0
procedure TCnCustBuildForm.lstWizardsDrawItem(Sender: TCustomListView;
Item: TListItem; Rect: TRect; State: TOwnerDrawState);
begin
//When first come here, rect.left = 0, rect.right = 100, which means listview.width = 100.
FillRect(Sender.Canvas.Handle, Rect, GetStockObject(WHITE_BRUSH));
//....
AutoResizeColumn(TListView(Sender), 0);
//set column 0 width to 173
AutoResizeColumn(TListView(Sender), 0);
//set column 1 width to 54
//now row width should be 173 + 54 = 227.
我調試應用程序,與處理如下:大約列表視圖的OnDrawItem
第一呼叫時該功能,listview.width = 100;
重繪第一行後,調用AutoResizeColumn設置listview.width = 227;
然後第二次進入這個函數,重畫第二行,現在rect參數改變了,rect.width = 227;
所以FillRect函數應該填充一個寬度爲227的矩形,但它只填充寬度= 100,這意味着不乾淨所有的行?
BTW:我爲什麼問這個問題,每次的原因我畫的第二列到右側,第二列的以前的數據仍然存在,因此它似乎爲3行(中間行是以前的真正的第二排的地方,應該清理,但不是)。
請注意,調整列大小並不總是觸發重繪,有時您必須'Invalidate()'ListView強制重繪。 – 2014-10-18 14:58:33