不会吧,你有4颗星了,怎么还搞错啊
我实践成功之后才发上来的的啊,我写了一个函数
procedure DisplayCheckBoxedAndSubImages(AListView:TListView);
var
Styles:DWORD;
begin
Styles:=ListView_GetExtendedListViewStyle(AListView.Handle );
Styles:=Styles or LVS_EX_CHECKBOXES or LVS_EX_SUBITEMIMAGES or LVS_EX_INFOTIP;
ListView_SetExtendedListViewStyle(AListView.Handle,Styles);
end;
如果要同时显示CheckBoxes和SubImages,先调用一下上面的函数,就解决问题了。
我知道原因了,研究了之后我发现这是Borland的一个Bug,大家看如下VCL代码:
procedure TCustomListView.ResetExStyles;
var
Styles: DWORD;
TempImages: TCustomImageList;
begin
if HandleAllocated then
begin
TempImages := nil;
if StateImages <> nil then
begin
TempImages := StateImages;
StateImages := nil;
end;
Styles := LVS_EX_SUBITEMIMAGES or LVS_EX_INFOTIP;
if FCheckboxes then Styles := LVS_EX_CHECKBOXES;
//上面这条语句明显的错误,就是因为它导致SubImages无法显示
//得改成Styles :=Styles or LVS_EX_CHECKBOXES;
if FGridLines then Styles := Styles or LVS_EX_GRIDLINES;
if FHotTrack then Styles := Styles or LVS_EX_TRACKSELECT;
if FRowSelect then Styles := Styles or LVS_EX_FULLROWSELECT;
if FFlatScrollBars then Styles := Styles or LVS_EX_FLATSB;
if FFullDrag then Styles := Styles or LVS_EX_HEADERDRAGDROP;
if FShowWorkAreas then Styles := Styles or LVS_EX_MULTIWORKAREAS;
if htHandPoint in FHotTrackStyles then
Styles := Styles or LVS_EX_ONECLICKACTIVATE
else if FHotTrackStyles * [htUnderlineHot, htUnderlineCold] <> [] then
Styles := Styles or LVS_EX_TWOCLICKACTIVATE;
if htUnderlineHot in FHotTrackStyles then
Styles := Styles or LVS_EX_UNDERLINEHOT;
if htUnderlineCold in FHotTrackStyles then
Styles := Styles or LVS_EX_UNDERLINECOLD;
ListView_SetExtendedListViewStyle(Handle, Styles);
if TempImages <> nil then
StateImages := TempImages;
end;
end;