Je développe une application d'affichage de données. J'ai un GUI qui s'adapte à la taille de l'écran (Ecran 15" à 55").
Dans ce GUI j'ai des Labels, ils s'adaptent bien en largeur et hauteur, mais pas la police, ainsi que le texte de ma StatusBar.
J'ai vu qu'il existait la fonction _StringSize() de Melba23, mais je n'arrive pas à l'adapter à mon application...
J'ai regardé les exemples fournis avec la fonction, mais le problème est que le gui se redimensionne et moi je ne veux pas.
Ci joint mon code:
Merci par avance pour votre aide.
► Afficher le texte
Code : Tout sélectionner
;==[Options]==================
Opt("GUIOnEventMode", 1)
Opt("MouseCoordMode", 2)
;==[Includes]=================
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Misc.au3>
#Include <File.au3>
#include <Array.au3>
#include <Timers.au3>
#include <GuiStatusBar.au3>
#include <Color.au3>
#include <Date.au3>
#include <GuiListView.au3>
#include <StringSize.au3>
#include <StaticConstants.au3>
#include <MsgBoxConstants.au3>
#include <GuiImageList.au3>
#include <StringSize.au3>
#include <GuiButton.au3>
Global $MainGUI, $ApplicationName, $iTimer1, $hStatus, $aParts[4] = [200, 450, 700, 200], $Color1 = 0x000000, $Color2 = 0x00f0ff, $InputMessage, $AvReValue, $AvReResult, $AvRe, $MAJAvRe, $Label1
_Ini()
_Main()
AdlibRegister("_ScreenAdaptation")
GUIRegisterMsg($WM_SIZE, "WM_SIZE")
GUIRegisterMsg($WM_TIMER, "WM_TIMER")
While GUIGetMsg() <> -3
WEnd
Func _Ini()
;---------------------
EndFunc
Func _Main()
$MainGui = GUICreate("Form1", 800, 600, -1, -1, $WS_POPUP)
$Size = WinGetClientSize($MainGUI)
GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
$hStatus = _GUICtrlStatusBar_Create($MainGUI, -1, "", $SBARS_TOOLTIPS)
_GUICtrlStatusBar_SetParts($hStatus, $aParts)
DllCall("UxTheme.dll", "int", "SetWindowTheme", "hwnd", $hStatus, "wstr", 0, "wstr", 0)
$hIcons = _WinAPI_LoadShell32Icon(265)
_GUICtrlStatusBar_SetIcon($hStatus, 0, $hIcons)
$hIcons2 = _WinAPI_LoadShell32Icon(170)
_GUICtrlStatusBar_SetIcon($hStatus, 1, $hIcons2)
$hIcons3 = _WinAPI_LoadShell32Icon(238)
_GUICtrlStatusBar_SetIcon($hStatus, 2, $hIcons3)
$hIcons4 = _WinAPI_LoadShell32Icon(172)
_GUICtrlStatusBar_SetIcon($hStatus, 3, $hIcons4)
GUIRegisterMsg($WM_TIMER, "WM_TIMER")
$iTimer1 = _Timer_SetTimer($MainGUI, 1000)
_GUICtrlStatusBar_SetText($hStatus, StringUpper(@username) & " on " & @ComputerName & " (" & @IPAddress1 & ")", 1)
_GUICtrlStatusBar_SetText($hStatus, "Powered by AllByMySelf", 3)
$sTxt="Ceci est un label1 très long qui doit s'adapter à la largeur du label" & @CRLF & " sur la deuxième ligne"
$Label1 = GUICtrlCreateLabel($sTxt, 5, 8, 790, 50, BitOR($SS_CENTER, $SS_CENTERIMAGE), $WS_EX_CLIENTEDGE)
$aDim1 = _StringSize(GuiCtrlRead($Label1))
_ArrayDisplay($aDim1)
GUICtrlSetFont($Label1,$aDim1[1], 400, 0, "Arial")
$Label2 = GUICtrlCreateLabel($sTxt, 5, 58, 395, 50, BitOR($SS_CENTER, $SS_CENTERIMAGE), $WS_EX_CLIENTEDGE)
$aDim = _StringSize(GuiCtrlRead($Label2))
GUICtrlSetFont($Label2, 24 * 25/$aDim[3], 400, 0, "Arial")
$Label3 = GUICtrlCreateLabel("Ceci est un label3 très très long qui doit s'adapter à la largeur du label", 400, 58, 395, 50, BitOR($SS_CENTER, $SS_CENTERIMAGE), $WS_EX_CLIENTEDGE)
GUISetState(@SW_SHOW)
EndFunc
Func WM_SIZE($hWnd, $iMsg, $iwParam, $ilParam)
#forceref $hWnd, $iMsg, $iwParam, $ilParam
_GUICtrlStatusBar_Resize($hStatus)
GUICtrlSetResizing($InputMessage, $GUI_DOCKBORDERS)
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_SIZE
Func _ScreenAdaptation()
$WorkAera = _GetWorkArea()
Local $aGuiPos = WinGetPos($MainGUI)
If $aGuiPos[0] <> $WorkAera[0] Or $aGuiPos[1] <> $WorkAera[1] Or $aGuiPos[2] <> $WorkAera[4] Or $aGuiPos[3] <> $WorkAera[5] Then WinMove($MainGUI, "", $WorkAera[0], $WorkAera[1], $WorkAera[4], $WorkAera[5])
Return $WorkAera
EndFunc ;==>_ScreenAdaptation
Func _GetWorkArea()
Global $Area[6]
Local $StartRect = DllStructCreate("int[4]")
Local $PStartRect = DllStructGetPtr($StartRect)
DllCall("user32.dll", "int", "SystemParametersInfo", "int", 48, "int", 0, "ptr", $PStartRect, "int", 0)
$Area[0] = DllStructGetData($StartRect, 1, 1)
$Area[1] = DllStructGetData($StartRect, 1, 2)
$Area[2] = DllStructGetData($StartRect, 1, 3)
$Area[3] = DllStructGetData($StartRect, 1, 4)
$Area[4] = $Area[2] - $Area[0]
$Area[5] = $Area[3] - $Area[1]
Return $Area
EndFunc ;==>_GetWorkArea
Func WM_TIMER($hWnd, $iMsg, $iwParam, $ilParam)
#forceref $hWnd, $iMsg, $ilParam
Switch _Timer_GetTimerID($iwParam)
Case $iTimer1
_UpdateStatusBarClock()
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_TIMER
Func _UpdateStatusBarClock()
_GUICtrlStatusBar_SetText($hStatus, @TAB & StringFormat(_NowDate() & " " & "%02d:%02d:%02d", @HOUR, @MIN, @SEC), 0)
EndFunc ;==>_UpdateStatusBarClock()
Func _Exit()
Exit
EndFunc



