C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 팁&트릭
C++Builder Programming Tip&Tricks
[796] [Controls] TListView의 ExStyles 관련 버그 - (CheckBoxes가 true일때 subitem에 이미지 표시안됨)
장성호 [nasilso] 7332 읽음    2008-08-22 11:52
바로 아랫팁과 관련 자료를 검색해다가
델마당에서 찾은 내용입니다.


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;


그럼....

+ -

관련 글 리스트
796 [Controls] TListView의 ExStyles 관련 버그 - (CheckBoxes가 true일때 subitem에 이미지 표시안됨) 장성호 7332 2008/08/22
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.