[..] définir taille écriture automatiquement pour label

Aide sur les Interfaces Graphique Utilisateurs (GUI).
Règles du forum
.
Répondre
AirPE
Niveau 3
Niveau 3
Messages : 38
Enregistré le : lun. 23 mars 2009 09:40
Localisation : Bordeaux
Status : Hors ligne

[..] définir taille écriture automatiquement pour label

#1

Message par AirPE »

Bonjour!

Voilà, dans un script j'ai un label avec une taille défini, et le mot change toutes les minutes.
J'aimerai savoir s'il y aurait un moyen de redéfinir la taille de l'écriture lorsque le mot aurait tendance à dépasser la taille du label

J'ai fait quelque chose dans ce genre:

Code : Tout sélectionner

If StringLen($word[$i]) > 20 Then
    GUICtrlSetFont($idWord, 10, -1, -1, "Arial")
ElseIf StringLen($word[$i]) > 18 Then
    GUICtrlSetFont($idWord, 11, -1, -1, "Arial")
ElseIf StringLen($word[$i]) > 16 Then
    GUICtrlSetFont($idWord, 12, -1, -1, "Arial")
ElseIf StringLen($word[$i]) > 15 Then
    GUICtrlSetFont($idWord, 13, -1, -1, "Arial")
Else
    GUICtrlSetFont($langWord, 15, -1, -1, "Arial")
EndIf
Alors ça fonctionne dans le sens ou le mot n'est jamais plus grand que le label, mais suivant les caractères, la longueur (visuelle) apparaît plus ou moins longue. Ce qui fait que des fois le mot est écrit tout petit alors qu'il y a largement la place!
J'avais fait les test avec des nombres, et avec des caractères alphabétiques, ca varie :(
Bon je suis assez content du résultat mais si je pouvais faire mieu, ce serait pas mal du tout! :P

Merci d'avance!
tolf
Niveau 7
Niveau 7
Messages : 318
Enregistré le : ven. 15 févr. 2008 12:25
Localisation : Paris
Status : Hors ligne

Re: [..] définir taille écriture automatiquement pour label

#2

Message par tolf »

Vous pouvez aussi supprimer le label et en créer un nouveau : le nouveau aura une taille adaptée à celle du texte.
Lisez la documentation d'AutoIt en français (et participez svp :mrgreen:) !

Mes UDF :
[/i][/b]
AirPE
Niveau 3
Niveau 3
Messages : 38
Enregistré le : lun. 23 mars 2009 09:40
Localisation : Bordeaux
Status : Hors ligne

Re: [..] définir taille écriture automatiquement pour label

#3

Message par AirPE »

Merci de votre réponse,

Pour une fenêtre plutôt grande oui pourquoi mais il se trouve que ma fenêtre ne fait que 200px de largeur! :? Donc si le label en se recréant est plus grand que la fenêtre, ça dépasse...

En tout cas merci pour votre suggestion! :wink:
Avatar du membre
Iste
Niveau 11
Niveau 11
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

Re: [..] définir taille écriture automatiquement pour label

#4

Message par Iste »

ben, ya pas moyen de recup la taille du label en pixel ? (je ne trouve pas (plus) dans la doc)
Car si oui, tu efface et recree, si c'est trop grand, tu efface et recree avec une police plus petite.
Enfin, c'est un peu bancale, et je n'apporte pas de reelle solucion, mais voila ^^'
Signez ici
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11784
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] définir taille écriture automatiquement pour label

#5

Message par Tlem »

Une autre solution, serait de prévoir la fenêtre et le label pour que même avec X fois le caractère le plus large ça ne dépasse jamais. :mrgreen:
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
tolf
Niveau 7
Niveau 7
Messages : 318
Enregistré le : ven. 15 févr. 2008 12:25
Localisation : Paris
Status : Hors ligne

Re: [..] définir taille écriture automatiquement pour label

#6

Message par tolf »

Peut-être que la fonction _GDIPlus_GraphicsMeasureString pourra mesurer les dimensions de la chaîne.

Par contre, pour l'utilisation, ça va être quelque chose. Il faudra créer une "image" GDI+ sans l'afficher et charger la police correspondant au label, puis extraire les dimensions de ce que retourne _GDIPlus_GraphicsMeasureString : peut-être que cette fonction marche (vous devez inclure "GDIPlus.au3" dans votre script) :

Code : Tout sélectionner

; #FUNCTION# ====================================================================================================================
; Name...........: _GetStringDim
; Description ...: Détermine les dimensions d'une chaîne de caractères.
; Syntax.........: _GetStringDim(ByRef $iLargeur, ByRef $iLongueur, $sChaine, $sFontName = "Arial", $iFontSize = 10)
; Parameters ....: $iLargeur  - Variable destinée à contenir la largeur.
;                  $iLongueur - Variable destinée à contenir la longueur.
;                  $sChaine   - Chaîne dont on calcule les dimensions.
;                  $sFontName - Police de caractères utilisée (Defaut : Arial).
;                  $iFontSize - Taille de la police utilisée (Defaut : 10).
; Return values .: Aucune
;                  Modification des variables $iLargeur et $iLongueur
; Author ........: Tolf
; Modified.......:
; Remarks .......:
; Related .......:
; Link ..........;
; Example .......;
; ===============================================================================================================================
Func _GetStringDim(ByRef $iLargeur, ByRef $iLongueur, $sChaine, $sFontName = "Arial", $iFontSize = 10)
    ; lancement de GDI+
    _GDIPlus_Startup()
    
    ; crée une image de 200x200 pixels
    Local $h_bitmap, $h_image, $h_graphic
    $h_bitmap = _WinAPI_CreateBitmap(200, 200, 1, 32)
    $h_image = _GDIPlus_BitmapCreateFromHBITMAP($h_bitmap)
    $h_graphic = _GDIPlus_ImageGetGraphicsContext($h_image)
    
    ; crée la police
    Local $h_police_name, $h_police
    $h_police_name = _GDIPlus_FontFamilyCreate($sFontName)
    $h_police = _GDIPlus_FontCreate($h_police_name, $iFontSize)
    
    ; trouve les dimensions de la chaîne
    Local $h_format, $t_layout, $aInfo
    $h_format = _GDIPlus_StringFormatCreate()
    $t_layout = _GDIPlus_RectFCreate(200, 200)
    $aInfo = _GDIPlus_GraphicsMeasureString($h_graphic, $sChaine, $h_police, $t_layout, $h_format)
    
    $iLargeur = DllStructGetData($aInfo[0], 3)
    $iLongueur = DllStructGetData($aInfo[0], 4)
    
    ; police
    _GDIPlus_FontFamilyDispose($h_police_name)
    _GDIPlus_FontDispose($h_police)
    ; chaine
    _GDIPlus_StringFormatDispose($h_format)
    ; image
    _WinAPI_DeleteObject($h_bitmap)
    _GDIPlus_ImageDispose($h_image)
    ; fermeture de GDI+
    _GDIPlus_Shutdown()
EndFunc
Lisez la documentation d'AutoIt en français (et participez svp :mrgreen:) !

Mes UDF :
[/i][/b]
Répondre