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
[795] [Controls] ListView의 SubItems의 Default tooltip(힌트) 안뜨게 하기
장성호 [nasilso] 7472 읽음    2008-08-22 11:24
TListView의 ShowHint=false로 설정해 둬도
ListView의 SubItem에  마무스가 가면 Column의 넓이가 string보다 좁은경우 tooltip이 뜹니다.

VCL의 기본 Hint는 THintWindow 라는 클래스인데
ListView의 SubItem에 뜨는 힌트는 tooltips_class32 라는 클래스더군요

TListView의 ShowHint=true로 해둔경우
힌트가 동시에 두개 중복해서 뜨기도 하고 보기에 별로 좋지 않더군요


이 문제를 별로 신경안 썼었는데
오늘 한델의 Q&A에 올라온 질문을 보고 찾아보게 되었습니다.

ListView의 SubItems의 Default tooltip(힌트) 안뜨게 하는 방법은?
ListVeiw의 Extended ListView Style을 재설정하면 됩니다.

관련 메세지
LVM_GETEXTENDEDLISTVIEWSTYLE
LVM_SETEXTENDEDLISTVIEWSTYLE

VCL함수
ListView_GetExtendedListViewStyle
ListView_SetExtendedListViewStyle

Style은?
LVS_EX_INFOTIP             0x400

함수
void __fastcall SetListViewSubItemToolTip(TListView *ListView, bool bInfoTip)
{
  int exStyle;

  exStyle=ListView_GetExtendedListViewStyle(ListView->Handle);
  //exStyle = SendMessage(ListView->Handle, LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0);

  if( bInfoTip) exStyle=exStyle | LVS_EX_INFOTIP;
  else exStyle=exStyle &(~LVS_EX_INFOTIP);

  ListView_SetExtendedListViewStyle(ListView->Handle,exStyle);
  //SendMessage(ListView->Handle, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, exStyle);
}

//사용예
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  SetListViewSubItemToolTip(ListVie1,true);
}



procedure SetListViewSubItemToolTip(ListView : TListView; bInfoTip: boolean);
var
  exStyle: Cardinal;
begin
  exStyle:=ListView_GetExtendedListViewStyle(ListView.Handle);
  if bInfoTip then
    exStyle:=exStyle or LVS_EX_INFOTIP
  else
    exStyle:=exStyle and (not LVS_EX_INFOTIP);

  ListView_SetExtendedListViewStyle(ListView.Handle,exStyle);
end;



아래는 TCustomListView의 ResetExStyles 메소드 코드입니다.
다른 것은 propery가 제공되는데
subitemimages와 infotip은 default로 들어가네요

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; //디폴트로 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;


한가지 주의할점은
Listview의 CheckBox 속성이나 RowSelect 속성등이 변경되면
ResetExStyles 이 호출되게 되어있는데
다른 ExtendStyle의 속성을 변경후에 SetListViewSubItemToolTip를 한번더 호출해줘야
tooltip 속성이 유지될것 같습니다.


그럼...

+ -

관련 글 리스트
795 [Controls] ListView의 SubItems의 Default tooltip(힌트) 안뜨게 하기 장성호 7472 2008/08/22
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.