Code: Select all
Enumeration
#Win
#Spin
EndEnumeration
Procedure StrGdgtVertCtr(iGdgtID.i, iLeftMargin.i)
;#------------------------------------------------
;NOTE, for this to work, the StringGadget MUST have the #ES_MULTILINE flag applied
;
Protected rRect.RECT
Protected fSize.SIZE
Protected iHwnd.i = GadgetID(iGdgtID)
Protected iLineCnt.i = SendMessage_(iHwnd, #EM_GETLINECOUNT, 0, 0)
Protected iHdc.i = GetDC_(iHwnd)
Protected sStr.s = "ABgy" ;length = 4 chars
Protected iStrLen.i = Len(sStr)
Protected iVertTweak.i = 0 ;corrects the displayed result (requires more logic!)
SelectObject_(iHdc, GetGadgetFont(iGdgtID))
GetTextExtentPoint32_(iHdc, sStr, iStrLen, fSize) ;width & height of sStr
GetClientRect_(iHwnd, rRect)
ReleaseDC_(iHwnd, iHdc)
rRect\left = iLeftMargin
rRect\top = ((GadgetHeight(iGdgtID) - (fSize\cy * iLineCnt)) / 2)
rRect\bottom = (rRect\top + (fSize\cy * iLineCnt) + iVertTweak)
Debug " Text-->" + GetGadgetText(iGdgtID) + "<--"
Debug " iGdgtID-->" + Str(iGdgtID) + "<--"
Debug " fSize\cy-->" + Str(fSize\cy) + "<--"
Debug " iLineCnt-->" + Str(iLineCnt) + "<--"
Debug " rRect\Top-->" + Str(rRect\Top) + "<--"
Debug " rRect\Bottom-->" + Str(rRect\Bottom) + "<--"
Debug "GadgetHeight(iGdgtID)-->" + Str(GadgetHeight(iGdgtID)) + "<--"
Debug "========================================="
Debug " "
If rRect\bottom < GadgetHeight(iGdgtID)
SendMessage_(iHwnd, #EM_SETRECT, 0, rRect)
EndIf
EndProcedure
If OpenWindow(#Win,0,0,500,250,"SpinGadget",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
SpinGadget(#Spin,10,80,450,50,0,10, #PB_Spin_Numeric|#ES_MULTILINE)
StrGdgtVertCtr(#Spin, 6) ; =>works with stringgadget but not with spingadget
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf