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.我调试该应用程序,过程如下:
顺便说一句:为什么我要问这个问题,因为每次我把第二列画在右边,第二列的前一次数据就会保持不变,所以它看起来是3行(中间行是真正的第2行的前一个位置,应该清理,但不是)。
发布于 2014-10-18 14:47:37
您不应该在DrawItem事件处理程序中执行任何操作,只应该根据所有内容的当前状态(包括列宽度)绘制项。然后,当列表视图中任何需要绘制项的内容发生变化时,DrawItem都会触发。不要更改DrawItem中的列宽度。在其他地方更改它们,然后如果更改需要绘制一个项,则将调用DrawItem。
https://stackoverflow.com/questions/26439990
复制相似问题