- Offizieller Beitrag
Hi,
sicher kennt ihr das auch: mal schnell noch ein Label in die GUI einfügen, und dann dauernd probieren, ob die Maße zum verwendeten Font passen.
Hier ein kleines Tool, um die erforderlichen Abmessungen zu ermitteln. Font mit Attributen auswählen, Text einfügen/schreiben und messen. Schon wißt ihr, wieviel Platz euer Text beansprucht.
Edit: Habe jetzt die Fontauswahl mit Standardfont vorbelegt.
Spoiler anzeigen
#include <GDIPlus.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Include <Misc.au3>
Opt("GUIOnEventMode", 1)
Opt("MustDeclareVars", 1)
Global $btChoose, $btMeasure, $cbBold, $cbItalic, $cbStrike, $cbUnderlined, $eText, $Group1, $gui, $inFont, $inHeight, $inSize
Global $Label1, $Label2, $Label3, $Label4, $Label5, $Label6, $Label7, $Label8, $inWidth, $1stChoose = 1
Global $bkCol = 0x1E90FF, $LemonChiffon = 0xFFFACD, $Salmon = 0xFA8072
Global $aFont[8] = [8,0,'Courier New',10,400,0,0,0]
$gui = GUICreate("TextMeter", 452, 367)
GUISetOnEvent($GUI_EVENT_CLOSE, "guiClose")
GUISetBkColor($bkCol)
$Group1 = GUICtrlCreateGroup(" Font ", 15, 16, 420, 121)
$inSize = GUICtrlCreateInput("", 331, 56, 35, 21, BitOR($ES_CENTER,$ES_READONLY))
GUICtrlSetBkColor(-1, $LemonChiffon)
$inFont = GUICtrlCreateInput("", 65, 56, 204, 21, BitOR($ES_CENTER,$ES_READONLY))
GUICtrlSetBkColor(-1, $LemonChiffon)
$Label1 = GUICtrlCreateLabel("Name", 30, 59, 32, 17)
$btChoose = GUICtrlCreateButton("...", 388, 57, 20, 20, $WS_GROUP)
GUICtrlSetOnEvent(-1, "btChooseClick")
GUICtrlSetBkColor(-1, $Salmon)
$Label2 = GUICtrlCreateLabel("PointSize", 280, 59, 48, 17)
$Label4 = GUICtrlCreateLabel("FontAttribute", 30, 98, 64, 17)
$cbItalic = GUICtrlCreateCheckbox("", 195, 96, 17, 17)
GUICtrlSetState(-1, $GUI_DISABLE)
GUICtrlCreateLabel("Italic", 215, 98, 40)
$cbUnderlined = GUICtrlCreateCheckbox("", 265, 96, 17, 17)
GUICtrlSetState(-1, $GUI_DISABLE)
GUICtrlCreateLabel("Underlined", 285, 98, 60, 17)
$cbStrike = GUICtrlCreateCheckbox("", 360, 96, 17, 17)
GUICtrlSetState(-1, $GUI_DISABLE)
GUICtrlCreateLabel("Strike", 380, 98, 40, 17)
$Label5 = GUICtrlCreateLabel("Auswahl", 379, 33, 44, 17)
$cbBold = GUICtrlCreateCheckbox("", 120, 96, 17, 17)
GUICtrlSetState(-1, $GUI_DISABLE)
GUICtrlCreateLabel("Bold", 140, 98, 40, 17)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$eText = GUICtrlCreateEdit("", 15, 171, 420, 105)
GUICtrlSetBkColor(-1, $LemonChiffon)
$btMeasure = GUICtrlCreateButton("Ausmessen", 335, 288, 100, 20, $WS_GROUP)
GUICtrlSetOnEvent(-1, "btMeasureClick")
GUICtrlSetBkColor(-1, $Salmon)
$Label3 = GUICtrlCreateLabel("Dein Text", 15, 152, 50, 17)
$Label6 = GUICtrlCreateLabel("Benötigter Platz", 40, 322, 78, 17)
$inWidth = GUICtrlCreateInput("", 140, 320, 60, 21, BitOR($ES_CENTER,$ES_READONLY))
GUICtrlSetBkColor(-1, $LemonChiffon)
$Label7 = GUICtrlCreateLabel("X", 220, 324, 11, 17)
$inHeight = GUICtrlCreateInput("", 250, 320, 60, 21, BitOR($ES_CENTER,$ES_READONLY))
GUICtrlSetBkColor(-1, $LemonChiffon)
$Label8 = GUICtrlCreateLabel("pt", 330, 323, 26, 17)
GUISetState(@SW_SHOW)
setFont()
[/autoit] [autoit][/autoit] [autoit]While 1
Sleep(100)
WEnd
Func btChooseClick()
Local $aTmp
If $1stChoose Then
$aTmp = _ChooseFont()
Else
Local $weight = 400
If BitAND($aFont[1], 1) Then $weight = 600
$aTmp = _ChooseFont($aFont[2], $aFont[3], 0, $weight, BitAND($aFont[1], 2), BitAND($aFont[1], 4), BitAND($aFont[1], 8))
EndIf
If $aTmp = -1 Then Return
$aFont = $aTmp
$1stChoose = 0
setFont()
EndFunc
Func setFont()
If BitAND($aFont[1], 2) Then
GUICtrlSetState($cbItalic, $GUI_CHECKED)
Else
GUICtrlSetState($cbItalic, $GUI_UNCHECKED)
EndIf
If BitAND($aFont[1], 4) Then
GUICtrlSetState($cbUnderlined, $GUI_CHECKED)
Else
GUICtrlSetState($cbUnderlined, $GUI_UNCHECKED)
EndIf
If BitAND($aFont[1], Then
GUICtrlSetState($cbStrike, $GUI_CHECKED)
Else
GUICtrlSetState($cbStrike, $GUI_UNCHECKED)
EndIf
If $aFont[4] > 400 Then
GUICtrlSetState($cbBold, $GUI_CHECKED)
$aFont[1] = BitOR($aFont[1], 1)
Else
GUICtrlSetState($cbBold, $GUI_UNCHECKED)
EndIf
GUICtrlSetData($inFont, $aFont[2])
GUICtrlSetData($inSize, $aFont[3])
EndFunc
Func btMeasureClick()
Local $nText = GUICtrlRead($eText)
If $nText = '' Then Return
_GDIPlus_Startup()
Local $hFormat = _GDIPlus_StringFormatCreate(0)
Local $hFamily = _GDIPlus_FontFamilyCreate($aFont[2])
Local $hFont = _GDIPlus_FontCreate($hFamily, $aFont[3], $aFont[1], 3)
Local $tLayout = _GDIPlus_RectFCreate(15, 171, 0, 0)
Local $hGraphic = _GDIPlus_GraphicsCreateFromHWND($gui)
Local $aInfo = _GDIPlus_GraphicsMeasureString($hGraphic, $nText, $hFont, $tLayout, $hFormat)
Local $iWidth = Ceiling(DllStructGetData($aInfo[0], "Width"))
Local $iHeight = Ceiling(DllStructGetData($aInfo[0], "Height"))
_GDIPlus_StringFormatDispose($hFormat)
_GDIPlus_FontDispose($hFont)
_GDIPlus_FontFamilyDispose($hFamily)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_ShutDown()
GUICtrlSetData($inHeight, $iHeight)
GUICtrlSetData($inWidth, $iWidth)
EndFunc
Func guiClose()
Exit
EndFunc