Calcule la largeur et la hauteur d'une chaîne de caractères qui peut contenir un ou plusieurs caractères de tabulation
#include <WinAPIGdi.au3>
_WinAPI_GetTabbedTextExtent ( $hDC, $sText [, $aTab = 0 [, $iStart = 0 [, $iEnd = -1]]] )
| $hDC | Le handle du contexte de périphérique. |
| $sText | La chaîne de caractères. |
| $aTab | [optionnel] Le tableau contenant les positions des taquets de tabulation, dans les unités du périphérique. Les taquets de tabulation doivent être triés dans l'ordre croissant; la plus petite valeur x doit être le premier élément du tableau. En outre, elle peut être une valeur entière qui est une position de taquet. Dans ce cas, les taquets de tabulation sont séparés par la distance indiquée par cette valeur. Si ce paramètre est 0 (par défaut), les tabulations sont définies à huit fois la largeur moyenne des caractères. |
| $iStart | [optionnel] L'index de l'élément de tableau qui contient la première position de taquet. |
| $iEnd | [optionnel] L'index de l'élément de tableau qui contient la dernière position de taquet. |
| Succès: | Retourne une structure $tagSIZE qui contient les dimensions de la chaîne en unités logiques. |
| Échec: | Définit @error <> 0. |
Cette fonction utilise la police actuellement sélectionnée pour calculer les dimensions de la chaîne.
Parce que certains périphériques ne placent pas les caractères en tableau de cellules régulières (c'est à dire qu'ils kern les caractères), la somme des étendus des caractères d'une chaîne ne peut pas être égale à l'étendue de la chaîne.
La région de découpage actuel n'affecte pas le résultat retourné.
Consultez GetTabbedTextExtent dans la librairie MSDN.
#include <GUIConstantsEx.au3> #include <SendMessage.au3> #include <WinAPIGdi.au3> #include <WinAPIGdiDC.au3> #include <WinAPIHObj.au3> #include <WindowsConstants.au3> Local Const $sTxt = 'String'& @TAB & 'with'& @TAB & 'tab'& @TAB & 'characters' ; Crée une GUI Local $hForm = GUICreate('Test '& StringReplace(@ScriptName, '.au3', '()'), 0, 0, -1, -1, BitOR($WS_CAPTION, $WS_POPUP, $WS_SYSMENU)) GUICtrlCreateLabel($sTxt, 0, 0) GUICtrlSetFont(-1, 26, 400, 0, 'Comic Sans MS') ; Calcule les dimensions d'une chaîne et redimensionne la fenêtre Local $iSize = _GetTabbedStringSize(-1, $sTxt) If IsArray($iSize) Then GUICtrlSetPos(-1, 0, 0, $iSize[0], $iSize[1]) Local $aPos = WinGetPos($hForm) If Not @error Then WinMove($hForm, '', (@DesktopWidth - ($aPos[2] + $iSize[0])) / 2, (@DesktopHeight - ($aPos[3] + $iSize[1])) / 2, $aPos[2] + $iSize[0], $aPos[3] + $iSize[1]) EndIf EndIf ; Affiche l'interface utilisateur GUISetState(@SW_SHOW) Do Until GUIGetMsg() = $GUI_EVENT_CLOSE Func _GetTabbedStringSize($hWnd, $sText) Local $tTM = DllStructCreate($tagTEXTMETRIC) If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd) If Not $hWnd Then Return 0 EndIf Local $hDC = _WinAPI_GetDC($hWnd) Local $hFont = _SendMessage($hWnd, $WM_GETFONT) Local $hSv = _WinAPI_SelectObject($hDC, $hFont) Local $iTab = 0 Local $aRet = DllCall('gdi32.dll', 'int', 'GetTextMetricsW', 'handle', $hDC, 'struct*', $tTM) If Not @error And $aRet[0] Then $iTab = 8 * DllStructGetData($tTM, 'tmAveCharWidth') EndIf Local $iSize = 0 Local $tSIZE = _WinAPI_GetTabbedTextExtent($hDC, $sText, $iTab) If Not @error Then Dim $iSize[2] For $i = 0 To 1 $iSize[$i] = DllStructGetData($tSIZE, $i + 1) Next EndIf _WinAPI_SelectObject($hDC, $hSv) _WinAPI_ReleaseDC($hWnd, $hDC) Return $iSize EndFunc ;==>_GetTabbedStringSize