Do you mean the text for gadgets? Because strings do not have a width & height.
You need a context (a drawing area with its DPI) and a font to calculate the
size of displayed text. For example, Windows do not have a text (except the title bar)
and a font. If you draw on a Window you do it with the 2DDrawing functions.
On Windows for Gadgets with Text you could try this:
Code: Select all
EnableExplicit
Procedure GetGadgetTextSize(gadget,*size.SIZE)
Protected text$, font, dc
If Not *size:ProcedureReturn:EndIf
text$ = GetGadgetText(gadget)
font = GetGadgetFont(gadget)
dc = GetDC_(GadgetID(gadget))
SelectObject_(dc,font)
GetTextExtentPoint32_(dc,@text$,Len(text$),*size)
ReleaseDC_(GadgetID(gadget),dc)
EndProcedure
Procedure GadgetTextWidth(gadget)
Protected size.SIZE
GetGadgetTextSize(gadget,@size)
ProcedureReturn size\cx
EndProcedure
Procedure GadgetTextHeight(gadget)
Protected size.SIZE
GetGadgetTextSize(gadget,@size)
ProcedureReturn size\cy
EndProcedure
If OpenWindow(0, 0, 0, 400, 160, "HyperlinkGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
HyperLinkGadget(0, 10, 10, 250,20,"Red HyperLink", RGB(255,0,0))
HyperLinkGadget(1, 10, 30, 250,20,"Arial Underlined Green HyperLink", RGB(0,255,0), #PB_HyperLink_Underline)
SetGadgetFont(1, LoadFont(0, "Arial", 12))
While WindowEvent():Wend
ResizeGadget(0,WindowWidth(0)-GadgetTextWidth(0)-5,10,GadgetTextWidth(0),GadgetTextHeight(0)+3)
ResizeGadget(1,WindowWidth(0)-GadgetTextWidth(1)-5,30,GadgetTextWidth(1),GadgetTextHeight(1)+3)
Debug GadgetTextWidth (0)
Debug GadgetTextHeight(0)
Debug GadgetTextWidth (1)
Debug GadgetTextHeight(1)
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf