Hi Fangbeast. Firstly, thank you. Secondly, just a small clarification: the captions in
are already being centered automatically, both horizontally as well as vertically.
. But, since you seem to require absolute text centering for this as well, here's a modification of
Code: Select all
;==============================================================
; modified version especially for Fangbeast - 7th May 2014
; #PB_Text_Center will center text horizontally & vertically
;==============================================================
; TextGadgetEx() enables border settings, text alignment,
; foreground & background colours, and text formatting
; including italics, bold & underline.
;
; tested & working on WinXP x86, Win7 x64, OSX x64
; running PureBasic v5.21, v5.22, v5.20 respectively
;
; by TI-994A - free to use, improve, share...
;
; 20th April 2014
;==============================================================
;TextGadgetEx() wrapped into a single procedure
Procedure TextGadgetEx(gadgetNo, txtXPos, txtYPos, txtWidth, txtHeight, caption.s, flags = 0, foreColor = 0, backColor = 16777215)
If flags & #PB_Text_Border
border = 1
borderOffset = 4
EndIf
regular = LoadFont(#PB_Any, "Arial", 10)
bold = LoadFont(#PB_Any, "Arial", 10, #PB_Font_Bold)
italics = LoadFont(#PB_Any, "Arial", 10, #PB_Font_Italic)
underline = LoadFont(#PB_Any, "Arial", 10, #PB_Font_Underline)
italicBold = LoadFont(#PB_Any, "Arial", 10, #PB_Font_Italic | #PB_Font_Bold)
boldUnderline = LoadFont(#PB_Any, "Arial", 10, #PB_Font_Bold | #PB_Font_Underline)
italicUnderline = LoadFont(#PB_Any, "Arial", 10, #PB_Font_Italic | #PB_Font_Underline)
fullFormat = LoadFont(#PB_Any, "Arial", 10, #PB_Font_Italic | #PB_Font_Bold | #PB_Font_Underline)
If gadgetNo = #PB_Any
gadgetNo = CanvasGadget(gadgetNo, txtXPos, txtYPos, txtWidth, txtHeight, border)
Else
CanvasGadget(gadgetNo, txtXPos, txtYPos, txtWidth, txtHeight, border)
EndIf
If StartDrawing(CanvasOutput(gadgetNo))
Box(0, 0, txtWidth, txtHeight, backColor)
For pass = 1 To 2
For captionLoop = 1 To Len(caption)
Select Mid(caption, captionLoop, 3)
Case "<i>"
iFlag = 1
captionLoop + 2
Case "<b>"
bFlag = 1
captionLoop + 2
Case "<u>"
uFlag = 1
captionLoop + 2
Case "</i"
iFlag = 0
captionLoop + 3
Case "</b"
bFlag = 0
captionLoop + 3
Case "</u"
uFlag = 0
captionLoop + 3
Default
noFormat = 1
EndSelect
If noFormat
noFormat = 0
If Not drawFont
drawFont = FontID(regular)
DrawingFont(drawFont)
EndIf
If pass = 1
captionWidth + TextWidth(Mid(caption, captionLoop, 1))
Else
captionX = DrawText(captionX, captionY, Mid(caption, captionLoop, 1), foreColor, backColor)
EndIf
Else
If iFlag And bFlag And uFlag
drawFont = FontID(fullFormat)
ElseIf iFlag And bFlag
drawFont = FontID(italicBold)
ElseIf iFlag And uFlag
drawFont = FontID(italicUnderline)
ElseIf bFlag And uFlag
drawFont = FontID(boldUnderline)
ElseIf iFlag
drawFont = FontID(italics)
ElseIf bFlag
drawFont = FontID(bold)
ElseIf uFlag
drawFont = FontID(underline)
Else
drawFont = FontID(regular)
EndIf
DrawingFont(drawFont)
EndIf
Next captionLoop
captionY = 0
If flags & #PB_Text_Center
captionX = (txtWidth - captionWidth) / 2
captionY = ((txtHeight - TextHeight(caption)) / 2) - borderOffset
ElseIf flags & #PB_Text_Right
captionX = (txtWidth - captionWidth) - borderOffset
Else
captionX = borderOffset
EndIf
drawFont = 0 : iFlag = 0 : bFlag = 0 : uFlag = 0
Next pass
StopDrawing()
EndIf
FreeFont(regular)
FreeFont(italics)
FreeFont(bold)
FreeFont(underline)
FreeFont(italicBold)
FreeFont(italicUnderline)
FreeFont(boldUnderline)
FreeFont(fullFormat)
ProcedureReturn gadgetNo
EndProcedure
;demo code
Enumeration
#MainWindow
#txtGadget1
#txtGadget2
EndEnumeration
wFlags = #PB_Window_SystemMenu | #PB_Window_ScreenCentered
OpenWindow(#MainWindow, #PB_Any, #PB_Any, 500, 220, "TextGadgetEx() by TI-994A", wFlags)
;instantiated with constant - colour parameters and flags not set
TextGadgetEx(#txtGadget1, 175, 30, 150, 30, "<b>Default</b> <i>format</i>")
;instantiated with constant - foreground & background colours and center flag set
formattedCaption.s = "<i>Just</i> <b>for</b> <u>Fangbeast!</u>"
TextGadgetEx(#txtGadget2, 125, 75, 250, 30, formattedCaption, #PB_Text_Center, RGB(0, 0, 100), RGB(220, 220, 250))
;instantiated with #PB_Any - foreground & background colours and border flag set
formattedCaption = "<i><b>Italics & Bold</i></b> or <i><u>Italics & Underlined</i></u>"
txtGadget3 = TextGadgetEx(#PB_Any, 75, 120, 350, 30, formattedCaption, #PB_Text_Border, RGB(100, 0, 0), RGB(250, 220, 220))
;instantiated with #PB_Any - foreground & background colours and right & border flags set
formattedCaption = "<b><u>Bold & Underlined</b></u> or <i><b><u>Italics, Bold & Underlined</i></b></u>"
txtGadget4 = TextGadgetEx(#PB_Any, 25, 165, 450, 30, formattedCaption, #PB_Text_Right | #PB_Text_Border, RGB(0, 100, 0), RGB(200, 250, 220))
While WaitWindowEvent() ! #PB_Event_CloseWindow : Wend