Pour calculer la taille ; largeur et hauteur ; requise par une chaine de caractères, AGS fournit le wrapper @autoit-gui-skeleton/ags-wrapper-string-size de la librairie StringSize.au3
Comment installer AGS-wrapper-string-size ?
On suppose que vous avez déjà installé Node.js et Yarn, par example avec Chocolatey, et pour installer le package AGS-wrapper-json, vous pouvez alors utiliser le gestionnaire de dépendances pour AutoIt fournit dans AGS. Il suffit donc de taper dans le dossier racine du projet, où le fichier package.json
est stocké :
yarn add @autoit-gui-skeleton/ags-wrapper-string-size --modules-folder vendor
Toutes les dépendances du projet, ainsi que les dépendances filles des dépedances parentes sont installées dans le répertoire ./vendor/@autoit-gui-skeleton/
. Pour l’utiliser dans son programme AutoIt, vous devez inclure cette bibliothèque avec l’instruction :
#include 'vendor/@autoit-gui-skeleton/ags-wrapper-string-size/StringSize.au3'
Tous les paquets AGS hébergés dans le dépôt npmjs appartiennent à l’organisation @autoit-gui-skeleton organization. En effet afin de simplifier la gestion des dépendances d’un projet AutoIt construit avec le framework AGS, nous avons détourné de son utilisation initiale le gestionnaire de dépendance npm, et son évolution Yarn. Cela nous permet de gérer les dépendances d’un projet AGS avec d’autres bibliothèques AutoIt, et de partager ces paquets AutoIt à partir du référentiel npmjs.org.
StringSize
Introduction
La bibliothèque StringSize prend une chaîne de texte et calcule la taille de l’étiquette requise pour la contenir, ainsi que la mise en forme de la chaîne pour qu’elle s’adapte.
Exemples
Simple usage
Local $stringSize = _StringSize($text, $fontsize, $fontweight, $fontattribute, $fontfamily, $GUI_width - $marginLeftRight*2)
If(Not @error) Then
$label_TEXT_reformated = $stringSize[0]
$label_WIDTH_calculated = $stringSize[2] ; ($stringSize[2] / $dpi)
$label_HEIGHT_calculated = $stringSize[3] ; ($stringSize[3] / $dpi)
GUISetFont($fontsize, $fontweight, $fontattribute, $fontfamily)
GUICtrlSetData($label_ID, $label_TEXT_reformated)
GUICtrlSetPos($label_ID, $marginLeftRight, $top, $label_WIDTH_calculated, $label_HEIGHT_calculated)
EndIf
Reformaté une string dans un label
#include <GUIConstantsEx.au3>
#include "StringSize.au3"
$sText = " I am a very long line and I am not formatted in any way so that I will not fit within the width of the GUI that surrounds me!"
$hGUI = GUICreate("Test", 500, 500)
; A label with no width or height set
GUICtrlCreateLabel($sText, 10, 10)
GUICtrlSetBkColor(-1, 0xFF8080)
; A label with no height set
GUICtrlCreateLabel($sText, 10, 50, 200)
GUICtrlSetBkColor(-1, 0xC0C0FF)
; A label sized by StringSize
$aSize = _StringSize($sText, Default, Default, Default, "", 200)
GUICtrlCreateLabel($aSize[0], 10, 90, $aSize[2], $aSize[3])
GUICtrlSetBkColor(-1, 0x80FF80)
GUISetState()
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Calcul de la plus grande taille de police possible pour une largeur de label donné
#include <GUIConstantsEx.au3>
#include "StringSize.au3"
; Declare arrays to hold parameters
Global $aFont[4] = ["Arial", "Tahoma", "Courier New", "Comic Sans MS"]
Global $aWeight[4] = [200, 400, 600, 800]
Global $aAttrib[4] = [0, 2, 4, 0]
Global $aColour[4] = [0xFFFFD0, 0xD0FFD0, 0xD0D0FF, 0xFFD0FF]
$sText = "The UDF will calculate the largest possible font size which will allow this text to fit in the randomly sized label. " & _
"Pressing the 'Increase' button will use the next size up so you can see how successful it was. " & @CRLF & _
"Note that the UDF is pessimistic and will leave small borders to the right and at the bottom of the text, so you might " & _
"be able to go one size up in a few cases, although this risks clipping the trailing edges of italic letters or the tails of letters such as 'g'."
$hGUI = GUICreate("Test", 500, 500, 100, 100)
$hButton_Next = GUICtrlCreateButton("Next", 10, 10, 80, 30)
GUICtrlSetResizing(-1, $GUI_DOCKALL)
$hLabel_Size = GUICtrlCreateLabel("", 100, 10, 40, 30)
GUICtrlSetResizing(-1, $GUI_DOCKALL)
GUICtrlSetFont(-1, 24)
$hButton_Increase = GUICtrlCreateButton("Increase", 150, 10, 80, 30)
GUICtrlSetResizing(-1, $GUI_DOCKALL)
GUISetState()
While 1
; Choose parameter values
$iX = 10 * Random(25, 50, 1)
$iY = 10 * Random(10, 40, 1)
$sFont = $aFont[Random(0, 3, 1)]
$iWeight = $aWeight[Random(0, 3, 1)]
$iAttrib = $aAttrib[Random(0, 3, 1)]
$iColour = $aColour[Random(0, 3, 1)]
WinMove($hGUI, "", 100, 100, $iX + 26, $iY + 85)
$hLabel = GUICtrlCreateLabel("", 10, 50, $iX, $iY)
GUICtrlSetBkColor(-1, $iColour)
For $iSize = 5 To 50
$aSize = _StringSize($sText, $iSize, $iWeight, $iAttrib, $sFont, $iX)
If $aSize[3] > $iY Then
$iSize -= 1
ExitLoop
EndIf
Next
GUICtrlSetData($hLabel_Size, $iSize)
GUICtrlSetFont($hLabel, $iSize, $iWeight, $iAttrib, $sFont)
$aSize = _StringSize($sText, $iSize, $iWeight, $iAttrib, $sFont, $iX)
GUICtrlSetData($hLabel, $aSize[0])
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
Exit
Case $hButton_Next
GUICtrlDelete($hLabel)
GUICtrlSetData($hLabel_Size, "")
ExitLoop
Case $hButton_Increase
GUICtrlSetData($hLabel, "")
$iSize += 1
GUICtrlSetData($hLabel_Size, $iSize)
GUICtrlSetFont($hLabel, $iSize, $iWeight, $iAttrib, $sFont)
$aSize = _StringSize($sText, $iSize, $iWeight, $iAttrib, $sFont, $iX)
GUICtrlSetData($hLabel, $aSize[0])
EndSwitch
WEnd
WEnd
Continue Continue la lecture ?