StringGadget Vertical?
Posted: Fri Dec 16, 2005 4:33 am
Can you vertically specify with StringGadget?
Thanks
Thanks
http://www.purebasic.com
https://www.purebasic.fr/english/
Code: Select all
If OpenWindow(0, 0, 0, 640, 400, #PB_Window_SystemMenu, "Angled text!")
hdc = GetDC_(WindowID())
SetBkMode_(hdc, #TRANSPARENT)
hfont = CreateFont_(30,16, 2700,0,0,0,0,0,0,0,0,0,0,"ARIAL")
SelectObject_(hdc, hfont)
TextOut_(hdc, 310, 100,"Pure Basic", 10)
DeleteObject_(hfont)
ReleaseDC_(WindowID(), hdc)
Repeat
EventID.l = WaitWindowEvent()
Until EventID = #PB_EventCloseWindow
EndIf
End
Code: Select all
; Up
;
; Center
;
; Down
Code: Select all
#PB_String_MultiLine|#ES_AUTOVSCROLL
Code: Select all
; ************************************************
; Code: Verticaly and Horizontaly centered text
; in a multiline StringGadget
; Author: Sparkie
; Date: December 20, 2005
; OS: Windows only
; ************************************************
; ************************************************
; Procedure: Center text in Multiline StringGadget
; ************************************************
Procedure StringGadgetVCenter(gadNum)
;--> Get line count of StringGadget
lineCount = SendMessage_(GadgetID(gadNum), #EM_GETLINECOUNT, 0, 0)
myText$ = GetGadgetText(gadNum)
;--> Get width and height of text on one line
hdc = GetDC_(GadgetID(gadNum))
GetTextExtentPoint32_(hdc, myText$, Len(myText$), @textXY.SIZE)
ReleaseDC_(GadgetID(gadNum), hdc)
;--> Set rect coordinates for StringGadget
eRect.RECT
eRect\left = 0
eRect\top = (GadgetHeight(gadNum) - textXY\cy*lineCount) / 2
eRect\right = GadgetWidth(gadNum) - (eRect\left * 2)
eRect\bottom = eRect\top + textXY\cy*lineCount
SendMessage_(GadgetID(gadNum), #EM_SETRECT, 0, eRect)
EndProcedure
; ************************************************
; Main Window
; ************************************************
If OpenWindow(0, 0, 0, 300, 200, #PB_Window_SystemMenu | #PB_Window_ScreenCentered, "StringGadget Centered Text") And CreateGadgetList(WindowID(0))
;--> #ES_CENTER will not work with a singleline StringGadget on Win95/NT4
StringGadget(0, 50, 10, 200, 80, "Vertical and Horizontal" + #CRLF$ + "Centered Text in" + #CRLF$ + "Multiline StringGadget", #PB_String_MultiLine | #ES_CENTER)
StringGadgetVCenter(0)
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
End
Code: Select all
; ************************************************
; Code: Verticaly and Horizontaly centered text
; in a multiline StringGadget
; Author: Sparkie + srod! (But mostly Sparkie!)
; Date: December 20, 2005
; OS: Windows only
; ************************************************
; ************************************************
; Procedure: Center text in Multiline StringGadget
; ************************************************
Procedure StringGadgetVCenter(gadNum)
;--> Get line count of StringGadget
lineCount = SendMessage_(GadgetID(gadNum), #EM_GETLINECOUNT, 0, 0)
myText$ = GetGadgetText(gadNum)
;--> Get width and height of text on one line
hdc = GetDC_(GadgetID(gadNum))
GetTextExtentPoint32_(hdc, myText$, Len(myText$), @textXY.SIZE)
ReleaseDC_(GadgetID(gadNum), hdc)
eRect.RECT
;--> Set rect coordinates for StringGadget
;The following line is used to set the left and right boundaries and takes any scrollbars
;into account.
getclientrect_(GadgetID(gadNum), eRect)
eRect\top = (GadgetHeight(gadNum) - textXY\cy*lineCount) / 2
eRect\bottom = eRect\top + textXY\cy*lineCount
;Check if the rectangle is too high.
if eRect\bottom<gadgetheight(gadNum)
SendMessage_(GadgetID(gadNum), #EM_SETRECT, 0, eRect)
endif
EndProcedure
; ************************************************
; Main Window
; ************************************************
If OpenWindow(0, 0, 0, 300, 200, #PB_Window_SystemMenu | #PB_Window_ScreenCentered, "StringGadget Centered Text") And CreateGadgetList(WindowID(0))
;--> #ES_CENTER will not work with a singleline StringGadget on Win95/NT4
StringGadget(0, 50, 10, 200, 80, "Vertical and Horizontal" + #CRLF$ + "Centered Text in" + #CRLF$ + "Multiline StringGadget", #PB_String_MultiLine | #ES_CENTER|#WS_VSCROLL|#ES_AUTOVSCROLL)
StringGadgetVCenter(0)
numlines = sendmessage_(gadgetid(0), #EM_GETLINECOUNT,0,0)
Repeat
eventid=waitwindowevent()
if eventtype() = #PB_EventType_Change and eventgadgetid() = 0 and numlines<>sendmessage_(gadgetid(0), #EM_GETLINECOUNT,0,0)
numlines = sendmessage_(gadgetid(0), #EM_GETLINECOUNT,0,0)
StringGadgetVCenter(0)
endif
Until eventid = #PB_Event_CloseWindow
EndIf
End
Code: Select all
Procedure StringGadgetVCenter(GadgetID)
hwndEdit = GadgetID(GadgetID)
LineCount = SendMessage_(hwndEdit,#EM_GETLINECOUNT, 0, 0)
hdc = GetDC_(hwndEdit)
SelectObject_(hdc,GetGadgetFont(0))
GetTextExtentPoint32_(hdc,"ABC",3,fsz.SIZE)
ReleaseDC_(hwndEdit,hdc)
GetClientRect_(hwndEdit,eRect.RECT)
eRect\top = (GadgetHeight(GadgetID) - fsz\cy * LineCount) / 2
eRect\bottom = eRect\top + (fsz\cy * LineCount) + 4
If eRect\bottom < GadgetHeight(GadgetID)
SendMessage_(hwndEdit,#EM_SETRECT,0,eRect)
EndIf
EndProcedure
Text$ = "Vertical and Horizontal" + #CRLF$ + "Centered Text in" + #CRLF$ + "Multiline StringGadget"
OpenWindow(0,0,0,300,200,"Edit Control VCenter",#WS_SYSMENU | #WS_CAPTION | 1)
CreateGadgetList(WindowID(0))
StringGadget(0,10,10,280,180,Text$,#ES_MULTILINE | #ES_CENTER )
SetGadgetFont(0,LoadFont(0,"Arial",12))
StringGadgetVCenter(0)
LinesNum = SendMessage_(GadgetID(0), #EM_GETLINECOUNT,0,0)
Repeat
EventID = WaitWindowEvent()
Select EventGadget()
Case 0
If EventType() = #PB_EventType_Change And LinesNum <> SendMessage_(GadgetID(0),#EM_GETLINECOUNT,0,0)
LinesNum = SendMessage_(GadgetID(0),#EM_GETLINECOUNT,0,0)
StringGadgetVCenter(0)
EndIf
EndSelect
Until EventID = #PB_Event_CloseWindow