UDF > WinAPIEx > GDI > Font & Text >


_WinAPI_GetTabbedTextExtent

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]]] )

Paramètres

$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.

Valeur de retour

Succès: Retourne une structure $tagSIZE qui contient les dimensions de la chaîne en unités logiques.
Échec: Définit @error <> 0.

Remarques

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é.

Voir aussi

Consultez GetTabbedTextExtent dans la librairie MSDN.

Exemple

#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