Page 1 sur 1

[R] Rendre fenêtre Gui proportionnelle aux écrans PC et TV

Posté : dim. 23 août 2015 14:18
par Boulanza
Bonjour
Je vous prie de me guider pour rendre mes fenêtres Gui et leurs contenus proportionnels à tous les écrans : ordinateurs et TV.
Cordialement.
► Afficher le texte

Re: [..] Rendre fenêtre Gui proportionnelle aux écrans PC et

Posté : sam. 29 août 2015 13:35
par Boulanza
Pas de réponse, donc pas de solution à mon cas... !
Merci de répondre.

Re: [..] Rendre fenêtre Gui proportionnelle aux écrans PC et

Posté : sam. 29 août 2015 14:24
par mikell
Ta question n'est pas assez précise, tu veux quoi exactement ? centrer les controles, modifier leur taille et/ou celle de la police utilisée, ou autre chose ?
@desktopWidth et @desktopHeight fonctionnent bien

Re: [..] Rendre fenêtre Gui proportionnelle aux écrans PC et

Posté : sam. 29 août 2015 16:58
par Boulanza
Merci pour votre réponse.
@desktopWidth et @desktopHeight sont dans mes Gui, mon pc à comme résolution (Écran) : 1280x1024, lorsque je teste mes applications sur pc 14,13 ,11 et 10 pouces on ne voie que 5% du contenu de ma Gui.
$Form1=GUICreate("" , @DesktopWidth /800*@DesktopWidth, @DesktopHeight /600* @DesktopHeight,0, 0, $WS_POPUP, $WS_EX_TOPMOST )
avec une résolution de 800x600 pixels j'arrive à voir 50% du contenu de ma Gui avec un PC 10 pouce.

Re: [..] Rendre fenêtre Gui proportionnelle aux écrans PC et

Posté : sam. 29 août 2015 20:15
par mikell
C'est un problème de gestion de la résolution

Code : Tout sélectionner

GUICreate("Information", @desktopWidth, @desktopHeight, 0, 0
Cette gui va faire 1280 px de large sur ton écran mais seulement 800 px de large sur un écran 800x600
Par contre un controle défini à 1250 px de largeur aura la même taille sur les 2 écrans, donc sur l'écran 800 on n'en verra que les 2/3
Tu dois calculer un coefficient qui tient compte de la résolution de ton pc (1280 et 1024) et de celle du pc de l'utilisateur (@desktopWidth et @desktopHeight), et l'utiliser pour le positionnement et la taille des controles
Exemple :
► Afficher le texte

Re: [..] Rendre fenêtre Gui proportionnelle aux écrans PC et

Posté : dim. 30 août 2015 11:28
par Boulanza
Bonjour,
Oui Mikell, ça marche sur mon PC avec les conditions que vous m’avez prescrites plus haut, mais une fois tester sur des pc qui ont une résolution différente du mien, tous les textes sont de travers ( pas de mise en forme). Avez-vous une autre solution à ce problème.
Cordialement.

Re: [..] Rendre fenêtre Gui proportionnelle aux écrans PC et

Posté : dim. 30 août 2015 11:48
par mikell
C'est probablement parce qu'il faut adapter aussi la taille de la police
http://autoitscript.fr/forum/viewtopic. ... &hilit=ppp

Re: [..] Rendre fenêtre Gui proportionnelle aux écrans PC et

Posté : dim. 30 août 2015 12:28
par Boulanza
la taille de la police est déjà adapter aussi.

Re: [..] Rendre fenêtre Gui proportionnelle aux écrans PC et

Posté : dim. 30 août 2015 20:53
par jguinch
On peut faire comme ça aussi :
► Afficher le texte
J'ai pris le code ici : http://www.autoitscript.fr/forum/viewto ... =4&t=12049 (qui a lui-même été pris sur le forum US)

Re: [..] Rendre fenêtre Gui proportionnelle aux écrans PC et

Posté : lun. 31 août 2015 00:41
par mikell
Oui, à condition que la gui soit construite avec une taille max de 800x600
Melba dit bien "You might want to create your GUI for the lowest resolution you are likely to face and allow it to be resized but keeping the same aspect ratio"

Re: [..] Rendre fenêtre Gui proportionnelle aux écrans PC et

Posté : lun. 31 août 2015 09:47
par Boulanza
Bonjour.
Vous avez raison, il faut que la gui soit construite avec une taille max de 800x600 ( Ou moins) avec avec l'adaptation aussi de la taille de la police; ça marche, mais j'ai un déplacement de la fenêtre de la Gui vers l’adroite de l'écran avec pc 14,13 et 10 pouces. Y a t-il une raison à cela ?

Cordialement.

Re: [..] Rendre fenêtre Gui proportionnelle aux écrans PC et

Posté : lun. 31 août 2015 12:49
par Boulanza
Bonjour Tout le monde,
Comme dit le grand-père de Mikell : la solution la plus simple est toujours la meilleure. Merci grand-père.
$FormFr001 = GUICreate("Information", 1280, 720,-1, -1)
ça marche sur tout les PC de 9 à 22 pouces et plus !
A vous de choisir soit l'idée de Maikell ou de jguinch ou une combinaison des deux.
Je laisse ouvert pour vos commentaires sur le sujet.
Cordialement.

Re: [..] Rendre fenêtre Gui proportionnelle aux écrans PC et

Posté : lun. 31 août 2015 13:37
par mikell
Ya comme un gros mélange entre la taille de l'écran en pouces et la résolution
La résolution peut varier d'un écran à l'autre mais les pouces n'ont rien à voir là-dedans ^^

Re: [..] Rendre fenêtre Gui proportionnelle aux écrans PC et

Posté : lun. 31 août 2015 15:59
par Boulanza
Je suis d"accord avec vous, je voulais juste vous montrer que vos propositions marchent bien sur les écrans pc et monteurs TV sans aucune déformation de l'image (Gui) ou de son contenu.

Re: [R] Rendre fenêtre Gui proportionnelle aux écrans PC et

Posté : ven. 04 sept. 2015 10:42
par Hugues
Bonjour,

Je me permets de m'incruster dans ce post car je suis aussi dans le redimensionnement de GUI...

Je souhaite afficher un GUI sur PC et sur écran TV aussi.

Pour le ratio largeur d'écran c'est OK, mais pour le ratio vertical je n'arrive pas à trouver la solution...

Si quelqu'un à une idea ^^

Ci-joint mon code:

Merci par avance:

Code : Tout sélectionner

[spoiler=]
;==[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 <GuiButton.au3>

;==[Variables Globales]=======
Global $MainGUI, $ApplicationName, $iTimer1, $hStatus, $aParts[4] = [200, 450, 700, 200], $Color1 = 0x000000, $Color2 = 0x00f0ff, $InputMessage, $AvReValue, $AvReResult, $AvRe
Global  $Title, $MAJAvRe, $Capacity, $CapacityTitle
Global $Label, $TextLabel, $LabelResult, $LabelValue, $CapaDayNivOnGoing, $CapaHourNivBasePOT, $CapaNextPerNiv, $MAJCapacite, $Label2, $TextLabel2, $LabelResult2, $LabelValue2
Global $LabelResult2, $LabelValue2, $LabelResult3, $LabelValue3, $Label4, $TextLabel4, $Label5, $TextLabel5, $Label6, $TextLabel6, $Label7, $TextLabel7
Global $CreneauTPM, $InfoLigne, $CoefW, $CoefH, $Width = 800, $Height = 600, $HeightControl, $TopSpaceControl = 4, $Left = 5

;$HeightControl = Hauteur des labels
;$TopSpaceControl = Espace entre chaque Control

_Ini()
_Main()

AdlibRegister("_ScreenAdaptation")
GUIRegisterMsg($WM_SIZE, "WM_SIZE")
GUIRegisterMsg($WM_TIMER, "WM_TIMER")

While GUIGetMsg() <> -3
WEnd

Func _Ini()
    $CoefW = @DesktopWidth / $Width
    $CoefH = @DesktopHeight / $Height
    $HeightControl = 80
    $ApplicationName = @UserName
    $AvReValue = "1000"
    $MAJAvRe = "1000"
    $CapaDayNivOnGoing = "1000"
    $CapaHourNivBasePOT = "1000"
    $CapaNextPerNiv = "1000"
    $MAJCapacite = "1000"
    $CreneauTPM = "1000"
    $InfoLigne = "1000"
EndFunc ;==>_Ini()

Func _Main()
    $MainGUI = GUICreate($ApplicationName & " - Powered by Me", $Width * $CoefW, $Height * $CoefH, -1, -1, $WS_POPUP)
    GUISetIcon(@ScriptDir & "\Ini\graph.ico", -2, $MainGUI)
    $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, $ApplicationName & " - Powered by Me", 3)

    $Title = GUICtrlCreateLabel("", $Left, 5, $Width * $CoefW - 10, $HeightControl, BitOR($SS_CENTER, $SS_CENTERIMAGE), $WS_EX_CLIENTEDGE)
    $TextTitle = "Entête 1"
    GUICtrlSetData($Title, $TextTitle)
    GUICtrlSetFont(-1, 46, 400, 0, "Arial")
    GUICtrlSetBkColor(-1, 0x00FF00)
    GUICtrlSetColor($Title, 0x000000)

    $AvRe = GUICtrlCreateLabel("", $Left, $TopSpaceControl + $HeightControl, ($Width * $CoefW - 10) / 2, $HeightControl, BitOR($SS_CENTER, $SS_CENTERIMAGE), $WS_EX_CLIENTEDGE)
    $Textx = "TEXTE 1"
    GUICtrlSetData($AvRe, $Textx)
    GUICtrlSetFont(-1, 24, 400, 0, "Arial")
    GUICtrlSetBkColor(-1, 0xFF0000)
    GUICtrlSetColor($Title, 0x000000)

    $AvReResult = GUICtrlCreateLabel("", (($Width * $CoefW) / 2) ,$TopSpaceControl + $HeightControl, ($Width * $CoefW - 10) / 2, $HeightControl, BitOR($SS_CENTER, $SS_CENTERIMAGE), $WS_EX_CLIENTEDGE)
    GUICtrlSetData($AvReResult, $AvReValue)
    GUICtrlSetFont(-1, 44, 400, 0, "Arial")

    ;------------------------------------------------------------------------------------------------------------------------------------------------------
    $Capacity = GUICtrlCreateLabel("", $Left, $TopSpaceControl + $HeightControl * 3, $Width * $CoefW - 10, $HeightControl, BitOR($SS_CENTER, $SS_CENTERIMAGE), $WS_EX_CLIENTEDGE)
    $CapacityTitle = "Entête 2"
    GUICtrlSetData($Capacity, $CapacityTitle)
    GUICtrlSetFont(-1, 46, 400, 0, "Arial")
    GUICtrlSetBkColor(-1, 0x00FF00)
    GUICtrlSetColor($Capacity, 0x000000)

    $Label = GUICtrlCreateLabel("", $Left, $CoefH * ($TopSpaceControl + 80 + 133), ($Width * $CoefW - 10) / 2, $HeightControl, BitOR($SS_CENTER, $SS_CENTERIMAGE), $WS_EX_CLIENTEDGE)
    $TextLabel = "TEXTE 2"
    GUICtrlSetData($Label, $TextLabel)
    GUICtrlSetFont(-1, 24, 400, 0, "Arial")
    GUICtrlSetBkColor(-1, 0xFF0000)
    ;GUICtrlSetColor($Label, 0x000000)

    $LabelResult = GUICtrlCreateLabel("", (($Width * $CoefW) / 2), $CoefH * ($TopSpaceControl + 80 + 133), ($Width * $CoefW - 10) / 2, $HeightControl, BitOR($SS_CENTER, $SS_CENTERIMAGE), $WS_EX_CLIENTEDGE)
    GUICtrlSetData($LabelResult, $CapaDayNivOnGoing)
    GUICtrlSetFont(-1, 44, 400, 0, "Arial")

    $Label2 = GUICtrlCreateLabel("", $Left, $CoefH * ($TopSpaceControl + 160 + 106), ($Width * $CoefW - 10) / 2, $HeightControl, BitOR($SS_CENTER, $SS_CENTERIMAGE), $WS_EX_CLIENTEDGE)
    $TextLabel2 = "TEXTE 3"
    GUICtrlSetData($Label2, $TextLabel2)
    GUICtrlSetFont(-1, 24, 400, 0, "Arial")
    GUICtrlSetBkColor(-1, 0xFF0000)

    $LabelResult2 = GUICtrlCreateLabel("", (($Width * $CoefW) / 2), $CoefH * ($TopSpaceControl + 160 + 106), ($Width * $CoefW - 10) / 2, $HeightControl, BitOR($SS_CENTER, $SS_CENTERIMAGE), $WS_EX_CLIENTEDGE)
    GUICtrlSetData($LabelResult2, $CapaHourNivBasePOT)
    GUICtrlSetFont(-1, 44, 400, 0, "Arial")

    $Label3 = GUICtrlCreateLabel("", $Left, $CoefH * ($TopSpaceControl + 160 + 159), ($Width * $CoefW - 10) / 2, $HeightControl, BitOR($SS_CENTER, $SS_CENTERIMAGE), $WS_EX_CLIENTEDGE)
    $TextLabel3 = "TEXTE 4"
    GUICtrlSetData($Label3, $TextLabel3)
    GUICtrlSetFont(-1, 24, 400, 0, "Arial")
    GUICtrlSetBkColor(-1, 0xFF0000)

    $LabelResult3 = GUICtrlCreateLabel("", (($Width * $CoefW) / 2), $CoefH * ($TopSpaceControl + 160 + 159), ($Width * $CoefW - 10) / 2, $HeightControl, BitOR($SS_CENTER, $SS_CENTERIMAGE), $WS_EX_CLIENTEDGE)
    GUICtrlSetData($LabelResult3, $CapaNextPerNiv)
    GUICtrlSetFont(-1, 44, 400, 0, "Arial")

    $Capacity = GUICtrlCreateLabel("", $Left, $CoefH * ($TopSpaceControl + 160 + 257), $Width * $CoefW - 10, $HeightControl, BitOR($SS_CENTER, $SS_CENTERIMAGE), $WS_EX_CLIENTEDGE)
    $CapacityTitle = "Entête 3"
    GUICtrlSetData($Capacity, $CapacityTitle)
    GUICtrlSetFont(-1, 46, 400, 0, "Arial")
    GUICtrlSetBkColor(-1, 0x00FF00)

    $Label4 = GUICtrlCreateLabel("", $Left, 655 + 55, (($Width * $CoefW) / 4) - 10, $HeightControl, BitOR($SS_CENTER, $SS_CENTERIMAGE), $WS_EX_CLIENTEDGE)
    $TextLabel4 = "TEXTE 5"
    GUICtrlSetData($Label4, $TextLabel4)
    GUICtrlSetFont(-1, 24, 400, 0, "Arial")
    GUICtrlSetBkColor(-1, 0xFF0000)

    $Label5 = GUICtrlCreateLabel("", (($Width * $CoefW) / 4) - 4, 655 + 55, ((($Width * $CoefW) / 4) * 3) - 2, $HeightControl, BitOR($SS_CENTER, $SS_CENTERIMAGE), $WS_EX_CLIENTEDGE)
    $TextLabel5 = $CreneauTPM
    GUICtrlSetData($Label5, $TextLabel5)
    If StringLen($CreneauTPM) > 42 Then
        GUICtrlSetFont(-1, 24, 400, 0, "Arial")
    Else
        GUICtrlSetFont(-1, 44, 400, 0, "Arial")
    EndIf

    $Label6 = GUICtrlCreateLabel("", $Left, 736 + 55, (($Width * $CoefW) / 4) - 10, $HeightControl, BitOR($SS_CENTER, $SS_CENTERIMAGE), $WS_EX_CLIENTEDGE)
    $TextLabel6 = "TEXTE 6"
    GUICtrlSetData($Label6, $TextLabel6)
    GUICtrlSetFont(-1, 24, 400, 0, "Arial")
    GUICtrlSetBkColor(-1, 0xFF0000)

    $Label7 = GUICtrlCreateLabel("", (($Width * $CoefW) / 4) - 4, 736 + 55, ((($Width * $CoefW) / 4) * 3) - 2, $HeightControl, BitOR($SS_CENTER, $SS_CENTERIMAGE), $WS_EX_CLIENTEDGE)
    $TextLabel7 = $InfoLigne
    GUICtrlSetData($Label7, $TextLabel7)
    If StringLen($InfoLigne) > 42 Then
        GUICtrlSetFont(-1, 24, 400, 0, "Arial")
    Else
        GUICtrlSetFont(-1, 44, 400, 0, "Arial")
    EndIf

    GUISetState()
EndFunc   ;==>_Main()

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() ;Etait Local $WorkAera = _GetWorkArea() et non Global
    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   ;==>_Exit()
[/spoiler]

Re: [R] Rendre fenêtre Gui proportionnelle aux écrans PC et

Posté : sam. 05 sept. 2015 11:59
par Hugues
Je me demande s'il ne faut pas que j'utilise la fonction _StringSize()...

Re: [R] Rendre fenêtre Gui proportionnelle aux écrans PC et

Posté : sam. 05 sept. 2015 19:20
par mikell
Pour avoir déjà testé je te confirme que c'est une très bonne idée (pour les controles)
Melba23 a écrit :Description ...: Returns size of rectangle required to display string - width can be chosen