#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
$hForm = GUICreate("", 200, 200)
$iLabel = GUICtrlCreateLabel("Тестовая надпись для отцентровки текста в элементе Label", 10, 10, 150, 150, $SS_CENTER)
GUICtrlSetBkColor($iLabel, 0xff00DC)
_GUICtrlLabel_SetVerticalCenter($iLabel)
GUISetState()
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Func _GUICtrlLabel_SetVerticalCenter($iCtrl, $iFntSize = 8.5, $iFntWeight = 400, $iFntName = 'Arial')
Local $sData, $sText, $hWnd, $aiPos, $aiHeight
$sText = GUICtrlRead($iCtrl)
$hWnd = GUICtrlGetHandle($iCtrl)
$aiPos = ControlGetPos($hWnd, '', '')
$aiHeight = _GUICtrlLabelGetTextWidth($sText, $iFntSize, $iFntWeight, $iFntName)
For $i = 1 To (Round($aiPos[3] / 2) / $aiHeight[1]) - 1
$sData &= @CRLF
Next
$sData &= $sText
GUICtrlSetData($iCtrl, $sData)
EndFunc
Func _GUICtrlLabelGetTextWidth($s_Data, $i_FontSize = 8.5, $i_FontWeight = -1, $s_TextFont = "Arial")
Local Const $DEFAULT_CHARSET = 0 ; ANSI character set
Local Const $OUT_CHARACTER_PRECIS = 2
Local Const $CLIP_DEFAULT_PRECIS = 0
Local Const $PROOF_QUALITY = 2
Local Const $FIXED_PITCH = 1
Local Const $RGN_XOR = 3
Local Const $LOGPIXELSY = 90
If $i_FontWeight = "" Or $i_FontWeight = -1 Then $i_FontWeight = 400 ; default Font weight
Local $h_GDW_GUI = GUICreate("Get Data Width", 10, 10, -100, -100, 0x80880000, 0x00000080)
Local $ah_DC = DllCall("user32.dll", "int", "GetDC", "hwnd", $h_GDW_GUI)
Local $intDeviceCap = DllCall("gdi32.dll", "long", "GetDeviceCaps", "int", $ah_DC[0], "long", $LOGPIXELSY)
Local $intFontHeight = DllCall("kernel32.dll", "long", "MulDiv", "long", $i_FontSize, "long", $intDeviceCap[0], "long", 72)
Local $ah_Font = DllCall("gdi32.dll", "hwnd", "CreateFont", "int", -$intFontHeight[0], _
"int", 0, "int", 0, "int", 0, "int", $i_FontWeight, "int", 0, _
"int", 0, "int", 0, "int", $DEFAULT_CHARSET, _
"int", $OUT_CHARACTER_PRECIS, "int", $CLIP_DEFAULT_PRECIS, _
"int", $PROOF_QUALITY, "int", $FIXED_PITCH, "str", $s_TextFont)
DllCall("gdi32.dll", "hwnd", "SelectObject", "int", $ah_DC[0], "hwnd", $ah_Font[0])
Local $stRet = DllStructCreate("int;int")
DllCall("gdi32.dll", "int", "GetTextExtentPoint32", "int", $ah_DC[0], "str", $s_Data, "long", StringLen($s_Data), "ptr", DllStructGetPtr($stRet))
Local $a_RetLen[2] = [DllStructGetData($stRet, 1), DllStructGetData($stRet, 2)]
GUIDelete($h_GDW_GUI)
Return $a_RetLen
EndFunc