Page 1 of 1

HeaderToolTip

Posted: Tue Apr 26, 2016 9:26 am
by incaroad
Have a nice day everyone!

How do I show a tooltip for the header area of a Purebasic ListIconGadget? (windows os)
I think something similar like this photo.

Image

Thank you in advance for your help!

Re: HeaderToolTip

Posted: Tue Apr 26, 2016 5:17 pm
by RASHAD
Hi

Code: Select all

Global TTip,ti.TOOLINFO

#TTS_BUBBLE = $40
#TTF_TRACK       =  $20
#TTF_ABSOLUTE  =  $80

ti.TOOLINFO
ti\cbSize = SizeOf(ti) 
ti\hInst = GetModuleHandle_(0)


TTip = CreateWindowEx_(#WS_EX_TOPMOST, "tooltips_class32", 0, #TTS_ALWAYSTIP| #TTS_NOPREFIX| #WS_POPUP| #TTS_BUBBLE,0,0,0,0, 0, 0, GetModuleHandle_(0), 0)
SetWindowTheme_(TTip, @null.w, @null.w)
SendMessage_(ttip,#TTM_SETDELAYTIME,#TTDT_INITIAL,0)
SendMessage_(ttip,#TTM_SETDELAYTIME,#TTDT_AUTOPOP,1500) 
SendMessage_(TTip,#TTM_SETTIPTEXTCOLOR,$0202FD,0)
SendMessage_(TTip,#TTM_SETTIPBKCOLOR,$DCFFFF,0)
SendMessage_(TTip,#TTM_SETTIPBKCOLOR,$DCFFFF,0)
;SetRect_(r.RECT,5,5,5,5)                                           ;Tip Margins
;SendMessage_(ttip,#TTM_SETMARGIN,0,r)
  
LoadFont(0,"Arial",12)
OpenWindow(0, 0, 0, 640, 300, "ListIconGadgets", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ListIconGadget(0,  10,  10, 620, 280, "Column 0", 150,#PB_ListIcon_GridLines)
SetGadgetFont(0,FontID(0))
AddGadgetColumn(0, 1, "Column 1" , 150)
AddGadgetColumn(0, 2, "Column 2" , 150)
For i = 0 To 10
AddGadgetItem(0, i, "Row "+Str(i)+"  Column "+Str(1)+Chr(10)+"Row "+Str(i)+"  Column "+Str(2)+Chr(10)+"Row "+Str(i)+"  Column "+Str(3)+Chr(10))
Next

header = SendMessage_(GadgetID(0),#LVM_GETHEADER,0,0)

Repeat
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow
      Quit = 1
      
    Case #WM_MOUSEMOVE
        GetCursorPos_ (@p.POINT) 
        ScreenToClient_ (header, @p)
        h.HD_HITTESTINFO
        h\pt\x = p\x
        h\pt\y = p\y  
        hitem = SendMessage_(header,#HDM_HITTEST,0,@h)
        If hitem < 0
           SendMessage_(TTip, #TTM_ACTIVATE, 0, ti)
        Else
           SendMessage_(TTip, #TTM_ACTIVATE, 1, ti)
        EndIf
        Select hitem
          Case 0
            ti\uId = header
            ti\uFlags = #TTF_IDISHWND | #TTF_SUBCLASS
            text$ = "Header Column 0"+#CRLF$+"Second Line"
            ti\lpszText = @text$
            SendMessage_(TTip, #TTM_SETTITLE, 0, "Column 0 Info")
            SendMessage_(TTip, #TTM_ADDTOOL, 0, ti)
          Case 1
            ti\uId = header
            ti\uFlags = #TTF_IDISHWND | #TTF_SUBCLASS
            ti\lpszText = @"Header Column 1"
            SendMessage_(TTip, #TTM_SETTITLE, 1, "Column 1 Info")
            SendMessage_(TTip, #TTM_ADDTOOL, 0, ti)
          Case 2
            ti\uId = header
            ti\uFlags = #TTF_IDISHWND | #TTF_SUBCLASS
            ti\lpszText = @"Header Column 2"
            SendMessage_(TTip, #TTM_SETTITLE, 2, "Column 2 Info")
            SendMessage_(TTip, #TTM_ADDTOOL, 0, ti)             
        EndSelect
  EndSelect
      
Until  Quit = 1
    

Re: HeaderToolTip

Posted: Tue Apr 26, 2016 5:54 pm
by incaroad
Hello RASHAD!

This is very nice work!
Thank you very much! :)

Re: HeaderToolTip

Posted: Tue Apr 26, 2016 9:14 pm
by RASHAD
@incaroad
You are welcome

Re: HeaderToolTip

Posted: Wed Apr 27, 2016 11:52 am
by incaroad
Dear RASHAD!
Even I have a question.

How to color the header :?:

(The PureCOLOR_SetColumnHeaderColor unfortunately does not work.)

Many thanks! :)

Re: HeaderToolTip

Posted: Wed Apr 27, 2016 12:01 pm
by RSBasic

Re: HeaderToolTip

Posted: Wed Apr 27, 2016 12:24 pm
by incaroad
I inserted my program.
It works flawlessly.
Thank you very much! :)

Re: HeaderToolTip

Posted: Sun May 23, 2021 2:51 pm
by firace
RASHAD wrote: Tue Apr 26, 2016 5:17 pm Hi

Code: Select all

Global TTip,ti.TOOLINFO

#TTS_BUBBLE = $40
#TTF_TRACK       =  $20
#TTF_ABSOLUTE  =  $80

ti.TOOLINFO
ti\cbSize = SizeOf(ti) 
ti\hInst = GetModuleHandle_(0)


TTip = CreateWindowEx_(#WS_EX_TOPMOST, "tooltips_class32", 0, #TTS_ALWAYSTIP| #TTS_NOPREFIX| #WS_POPUP| #TTS_BUBBLE,0,0,0,0, 0, 0, GetModuleHandle_(0), 0)
SetWindowTheme_(TTip, @null.w, @null.w)
SendMessage_(ttip,#TTM_SETDELAYTIME,#TTDT_INITIAL,0)
SendMessage_(ttip,#TTM_SETDELAYTIME,#TTDT_AUTOPOP,1500) 
SendMessage_(TTip,#TTM_SETTIPTEXTCOLOR,$0202FD,0)
SendMessage_(TTip,#TTM_SETTIPBKCOLOR,$DCFFFF,0)
SendMessage_(TTip,#TTM_SETTIPBKCOLOR,$DCFFFF,0)
;SetRect_(r.RECT,5,5,5,5)                                           ;Tip Margins
;SendMessage_(ttip,#TTM_SETMARGIN,0,r)
  
LoadFont(0,"Arial",12)
OpenWindow(0, 0, 0, 640, 300, "ListIconGadgets", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ListIconGadget(0,  10,  10, 620, 280, "Column 0", 150,#PB_ListIcon_GridLines)
SetGadgetFont(0,FontID(0))
AddGadgetColumn(0, 1, "Column 1" , 150)
AddGadgetColumn(0, 2, "Column 2" , 150)
For i = 0 To 10
AddGadgetItem(0, i, "Row "+Str(i)+"  Column "+Str(1)+Chr(10)+"Row "+Str(i)+"  Column "+Str(2)+Chr(10)+"Row "+Str(i)+"  Column "+Str(3)+Chr(10))
Next

header = SendMessage_(GadgetID(0),#LVM_GETHEADER,0,0)

Repeat
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow
      Quit = 1
      
    Case #WM_MOUSEMOVE
        GetCursorPos_ (@p.POINT) 
        ScreenToClient_ (header, @p)
        h.HD_HITTESTINFO
        h\pt\x = p\x
        h\pt\y = p\y  
        hitem = SendMessage_(header,#HDM_HITTEST,0,@h)
        If hitem < 0
           SendMessage_(TTip, #TTM_ACTIVATE, 0, ti)
        Else
           SendMessage_(TTip, #TTM_ACTIVATE, 1, ti)
        EndIf
        Select hitem
          Case 0
            ti\uId = header
            ti\uFlags = #TTF_IDISHWND | #TTF_SUBCLASS
            text$ = "Header Column 0"+#CRLF$+"Second Line"
            ti\lpszText = @text$
            SendMessage_(TTip, #TTM_SETTITLE, 0, "Column 0 Info")
            SendMessage_(TTip, #TTM_ADDTOOL, 0, ti)
          Case 1
            ti\uId = header
            ti\uFlags = #TTF_IDISHWND | #TTF_SUBCLASS
            ti\lpszText = @"Header Column 1"
            SendMessage_(TTip, #TTM_SETTITLE, 1, "Column 1 Info")
            SendMessage_(TTip, #TTM_ADDTOOL, 0, ti)
          Case 2
            ti\uId = header
            ti\uFlags = #TTF_IDISHWND | #TTF_SUBCLASS
            ti\lpszText = @"Header Column 2"
            SendMessage_(TTip, #TTM_SETTITLE, 2, "Column 2 Info")
            SendMessage_(TTip, #TTM_ADDTOOL, 0, ti)             
        EndSelect
  EndSelect
      
Until  Quit = 1
    
Is there a way to modify this code so that a tooltip immediately pops up if the mouse moves over a different column header even if an existing tooltip is still showing ? Ie, I would like to achieve the same behavior as the default system tooltips for the minimize - maximize - close buttons?

Hope my question is clear enough :)