Code: Select all
Global Pos,myText$
Procedure StringGadgetVCenter(gadget)
SetWindowLongPtr_(GadgetID(gadget),#GWL_STYLE, GetWindowLongPtr_(GadgetID(gadget),#GWL_STYLE)|#ES_LEFT)
lineCount = SendMessage_(GadgetID(gadget), #EM_GETLINECOUNT, 0, 0)
myText$ = GetGadgetText(gadget)
If myText$ = ""
myText$ = " "
EndIf
hDC = GetDC_(GadgetID(gadget))
obj = SelectObject_(hDC, GetGadgetFont(gadget))
GetTextExtentPoint32_(hDC, myText$, Len(myText$), @textXY.SIZE)
DeleteObject_(obj)
ReleaseDC_(GadgetID(gadget), hDC)
eRect.RECT
eRect\left = 2
eRect\top = (GadgetHeight(gadget) - textXY\cy*lineCount) / 2 - 4
eRect\right = GadgetWidth(gadget) - (eRect\left * 2)
eRect\bottom = eRect\top + textXY\cy*lineCount
SendMessage_(GadgetID(gadget), #EM_SETRECT, 0, eRect)
If gadget = 1
SetWindowLongPtr_(GadgetID(1),#GWL_STYLE, GetWindowLongPtr_(GadgetID(1),#GWL_STYLE)|#ES_CENTER)
ElseIf gadget = 2
SetWindowLongPtr_(GadgetID(2),#GWL_STYLE, GetWindowLongPtr_(GadgetID(2),#GWL_STYLE)|#ES_RIGHT)
EndIf
GetCaretPos_(p.POINT)
Pos = SendMessage_(GadgetID(gadget),#EM_CHARFROMPOS,0,p\y<<16+p\x)
SetGadgetText(gadget,myText$)
SendMessage_(GadgetID(gadget), #EM_SETSEL,Pos,Pos)
SendMessage_(GadgetID(gadget), #EM_SCROLLCARET,Pos,Pos)
EndProcedure
LoadFont(0,"Georgia",12)
Text$ = "Test for vertical centered text - horizontal (above) or right aligned (below)..."
OpenWindow(0,0,0,300,200,"Edit Control VCenter",#PB_Window_SystemMenu| #PB_Window_MinimizeGadget| #PB_Window_MaximizeGadget| #PB_Window_SizeGadget| #PB_Window_ScreenCentered)
StringGadget(0,10,10,280,40,Text$,#ES_MULTILINE)
SetGadgetFont(0,FontID(0))
SetGadgetColor(0,#PB_Gadget_FrontColor,$0000FF)
SetGadgetColor(0,#PB_Gadget_BackColor,$D3FEFC)
StringGadgetVCenter(0)
StringGadget(1,10,60,280,40,Text$,#ES_MULTILINE)
SetGadgetFont(1,FontID(0))
SetGadgetColor(1,#PB_Gadget_FrontColor,$00FF00)
SetGadgetColor(1,#PB_Gadget_BackColor,$D3FEFC)
StringGadgetVCenter(1)
StringGadget(2,10,110,280,40,Text$,#ES_MULTILINE)
SetGadgetFont(2,FontID(0))
SetGadgetColor(2,#PB_Gadget_FrontColor,$FF0000)
SetGadgetColor(2,#PB_Gadget_BackColor,$D3FEFC)
StringGadgetVCenter(2)
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
End
Case #PB_Event_SizeWindow
ResizeGadget(0,#PB_Ignore,#PB_Ignore,WindowWidth(0)-20,#PB_Ignore)
StringGadgetVCenter(0)
ResizeGadget(1,#PB_Ignore,#PB_Ignore,WindowWidth(0)-20,#PB_Ignore)
StringGadgetVCenter(1)
ResizeGadget(2,#PB_Ignore,#PB_Ignore,WindowWidth(0)-20,#PB_Ignore)
StringGadgetVCenter(2)
Case #WM_KEYDOWN
GetCaretPos_(p.POINT)
If (GetActiveGadget() = 0 Or GetActiveGadget() = 1 Or GetActiveGadget() = 2 ) And (EventwParam() = 37 Or EventwParam() = 39)
Pos = SendMessage_(GadgetID(GetActiveGadget()),#EM_CHARFROMPOS,0,p\y<<16+p\x)
SetGadgetText(GetActiveGadget(),myText$)
SendMessage_(GadgetID(GetActiveGadget()), #EM_SETSEL,Pos,Pos)
SendMessage_(GadgetID(GetActiveGadget()), #EM_SCROLLCARET,Pos,Pos)
EndIf
Case #PB_Event_Gadget
gadget=EventGadget()
Select gadget
Case 0,1,2
Select EventType()
Case #PB_EventType_Change
StringGadgetVCenter(gadget)
EndSelect
EndSelect
EndSelect
ForEver