Code: Select all
Enumeration
#DummyWin
#MainWin
#TxtSize
#BtnExit
#BtnGet01
#BtnGet02
#BtnGet03
#Txt01
#Txt02
#Txt03
EndEnumeration
Global igDpi.i = GetDeviceCaps_(GetDC_(0),#LOGPIXELSX)
Global igFS10.i = ((10 * 100) / igDpi)
Global igFS14.i = ((14 * 100) / igDpi)
Global igFS16.i = ((16 * 100) / igDpi)
Global igFont10.i = LoadFont(0, "Microsoft Sans Serif", igFS10, #PB_Font_HighQuality + 2)
Global igFont14.i = LoadFont(1, "Microsoft Sans Serif", igFS14, #PB_Font_HighQuality + 2)
Global igFont16.i = LoadFont(2, "Microsoft Sans Serif", igFS16, #PB_Font_HighQuality + 2)
Procedure FakeMainWin()
;----------------------
If OpenWindow(#DummyWin, -10, -10, 500, 500, "fake parent", #PB_Window_Invisible)
EditorGadget(#TxtSize, 0, 0, 200, 500, #PB_Editor_WordWrap)
EndIf
EndProcedure
Procedure.i GetTxtLineHgt(iWin.i, iFont.i)
;-----------------------------------------
Protected iLineHgt.i = 0
If StartDrawing(WindowOutput(iWin))
DrawingMode(#PB_2DDrawing_Default)
DrawingFont(iFont)
iLineHgt = TextHeight("MyĚ")
StopDrawing()
EndIf
ProcedureReturn(iLineHgt)
EndProcedure
Procedure.i GetTxtGdtHgt(iGdtW.i, iLineHgt.i, iFont.i, sTxt.s)
;-------------------------------------------------------------
Protected iGdtHgt.i = 0, iLineTotal.i
ResizeGadget(#TxtSize, #PB_Ignore, #PB_Ignore, iGdtW, #PB_Ignore)
SetGadgetFont(#TxtSize, iFont)
SetGadgetText(#TxtSize, sTxt)
iLineTotal = CountGadgetItems(#TxtSize)
iGdtHgt = iLineHgt * iLineTotal
ProcedureReturn(iGdtHgt)
EndProcedure
Procedure GetText(iTargetGdtID.i, iFont.i)
;-----------------------------------------
Protected sTest.s = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. "
sTest = sTest + "Nullam molestie commodo magna, id rutrum enim suscipit ac. "
sTest = sTest + "Nunc tempor faucibus magna, vel volutpat tellus luctus et. "
Protected iGdtW.i = GadgetWidth(iTargetGdtID)
Protected iLineHgt.i = GetTxtLineHgt(#DummyWin, iFont)
Protected iGdtH.i = GetTxtGdtHgt(iGdtW, iLineHgt, iFont, sTest)
ResizeGadget(iTargetGdtID, #PB_Ignore, #PB_Ignore, #PB_Ignore, iGdtH)
SetGadgetText(iTargetGdtID, sTest)
EndProcedure
Procedure MainWin()
;------------------
Protected iFlags.i = #PB_Window_BorderLess|#PB_Window_ScreenCentered
If OpenWindow(#MainWin, 0, 0, 800, 600, "MainWin", iFlags, WindowID(#DummyWin))
SetWindowColor(#MainWin, RGB(056,056,056))
ButtonGadget(#BtnExit, 740, 0, 60, 20, "EXIT")
ButtonGadget(#BtnGet01, 10, 10, 200, 20, "Get Text")
TextGadget(#Txt01, 10, 30, 200, 40, "Txt01")
ButtonGadget(#BtnGet02, 220, 10, 200, 20, "Get Text")
TextGadget(#Txt02, 220, 30, 200, 40, "Txt02")
ButtonGadget(#BtnGet03, 440, 10, 200, 20, "Get Text")
TextGadget(#Txt03, 440, 30, 200, 40, "Txt03")
SetGadgetFont(#Txt01, igFont10)
SetGadgetFont(#Txt02, igFont14)
SetGadgetFont(#Txt03, igFont16)
EndIf
EndProcedure
Procedure WaitForUser()
;----------------------
Protected iEvent.i, iExit.i = False
Repeat
iEvent = WaitWindowEvent()
Select iEvent
Case #PB_Event_Gadget
Select EventGadget()
Case #BtnGet01: GetText(#Txt01, igFont10)
Case #BtnGet02: GetText(#Txt02, igFont14)
Case #BtnGet03: GetText(#Txt03, igFont16)
Case #BtnExit: iExit = #True : CloseWindow(#MainWin)
EndSelect
EndSelect
Until iExit = #True
EndProcedure
FakeMainWin()
MainWin()
WaitForUser()
End