바로 아랫팁과 관련 자료를 검색해다가
델마당에서 찾은 내용입니다.
http://www.delmadang.com/community/bbs_view.asp?bbsNo=3&bbsCat=43&indx=196304&keyword1=LVS_EX_INFOTIP&keyword2=
버그의 내용은?
제목에서 기술하였듯이
TListView의 CheckBoxs=true 일때 SubItems의 이미지가 표지안도는것입니다.
SubItem이미지 뿐만 아니라 subitems의 디폴트 tooltip도 안보입니다.
원인은
TCustomListView의 ResetExStyles 함수에 있습니다.
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; //이부분에 버그가
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;
위 함수에 내용을보면 FCheckboxes = true일때
Styles := LVS_EX_SUBITEMIMAGES or LVS_EX_INFOTIP;
if FCheckboxes then Styles := LVS_EX_CHECKBOXES; //이부분에 버그가
이부분이
Styles := LVS_EX_SUBITEMIMAGES or LVS_EX_INFOTIP;
if FCheckboxes then Styles := Styles or LVS_EX_CHECKBOXES; //이렇게 변경되어야
이렇게 되어있어야
SubItemImages 와 InfoTip 스타일이 설정이 되겟죠
해결방법은?
ListView의 Exstyle이 변경된후에 직접 Exstyle을 변경해줘야 합니다.
//C++Builder
void __fastcall SetListViewSubItemsStyle(TListView *ListView)
{
if (ListView->Checkboxes)
{
Styles =ListView_GetExtendedListViewStyle(ListView->Handle);
Styles =Styles | LVS_EX_SUBITEMIMAGES | LVS_EX_INFOTIP ;
ListView_SetExtendedListViewStyle(ListView->Handle, Styles );
}
}
//delphi
procedure SetListViewSubItemsStyle(ListView : TListView);
var
Styles: Cardinal;
begin
if (ListView.Checkboxes) then
begin
Styles :=ListView_GetExtendedListViewStyle(ListView.Handle);
Styles :=Styles or LVS_EX_SUBITEMIMAGES or LVS_EX_INFOTIP ;
ListView_SetExtendedListViewStyle(ListView.Handle, Styles );
end;
end;
그럼....
|