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