Code: Select all
Global oldCallback,ListIcon,StrHwnd,oldproc, header_h
Procedure Hheight(hwnd, msg, wParam, lParam)
Select msg
Case #HDM_LAYOUT
result = CallWindowProc_(oldproc, hwnd, msg, wParam, lParam)
*hdlayout.HD_LAYOUT = lParam
If *hdlayout\prc <> 0
*rect.RECT = *hdlayout\prc
*rect\top = header_h
EndIf
If *hdlayout\pwpos <> 0
*windowpos.WINDOWPOS = *hdlayout\pwpos
*windowpos\cy = header_h
EndIf
Default
result = CallWindowProc_(oldproc, hWnd, Msg, wParam, lParam)
EndSelect
ProcedureReturn result
EndProcedure
Procedure LIcallback(hwnd, msg, wparam, lparam)
result = CallWindowProc_(oldCallback, hwnd, msg, wparam, lparam)
Select msg
Case #WM_LBUTTONDOWN
pInfo.LVHITTESTINFO
pInfo\pt\x = (lParam & $FFFF)
pInfo\pt\y = (lParam>> 16 & $FFFF)
SendMessage_(ListIcon,#LVM_SUBITEMHITTEST,0,@pInfo)
r.RECT
r\top = pInfo\iSubItem
r\left = #LVIR_BOUNDS
SendMessage_(ListIcon, #LVM_GETSUBITEMRECT, pInfo\iItem, @r)
GetClientRect_(ListIcon,rw.RECT)
If r\right > rw\right
r\right = rw\right
EndIf
MoveWindow_(StrHwnd,r\left+GadgetX(0)+2,r\top+GadgetY(0)+4,r\right-r\left-2,r\bottom-r\top,1)
BringWindowToTop_(StrHwnd)
SetGadgetText(1, GetGadgetItemText(0, pInfo\iItem,pInfo\iSubItem))
EndSelect
ProcedureReturn result
EndProcedure
LoadFont(1, "Arial", 14)
SetGadgetFont(#PB_Default, FontID(1))
OpenWindow(0,0,0,640,480,"Test",#PB_Window_SystemMenu| #PB_Window_ScreenCentered)
ListIcon = ListIconGadget(0,10,60,620,360,"",0,#PB_ListIcon_GridLines)
hdc = GetDC_(ListIcon)
SelectObject_(hdc, FontID(1))
GetTextMetrics_(hdc, @tm.TEXTMETRIC)
AddGadgetColumn(0,1,"Column 1",210)
AddGadgetColumn(0,2,"Column 2",200)
AddGadgetColumn(0,3,"Column 3",200)
For i = 0 To 16
linestr.s = LSet(Str(i),3," ")
AddGadgetItem(0, -1, Chr(10)+"Text on Line "+linestr+" in Column 1"+Chr(10)+"Text on Line "+linestr+" in Column 2"+Chr(10)+"Text on Line "+linestr+" in Column 3")
Next
header_h = 40 ;Set Header Height
Header = SendMessage_(ListIcon, #LVM_GETHEADER, 0, 0)
oldproc = SetWindowLongPtr_(Header, #GWL_WNDPROC, @Hheight())
SendMessage_(ListIcon, #LVM_SCROLL, 0, 0)
StrHwnd = StringGadget(1,0,0,0,0,"" ,#PB_String_BorderLess)
;SetGadgetColor(1, #PB_Gadget_BackColor, $E1FEFD)
SetGadgetColor(1, #PB_Gadget_FrontColor, $0F0FFE)
StringGadget(2,10,10,250,tm\tmheight+4,"")
oldCallback = SetWindowLongPtr_(ListIcon, #GWL_WNDPROC, @LIcallback())
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Quit = 1
Case #PB_Event_Gadget
Select EventGadget()
Case 2
;MoveWindow_(StrHwnd,0,0,0,0,1)
EndSelect
EndSelect
Until Quit = 1