IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Garantir un affichage correct quelque soit le thème


Sujet :

VB.NET

  1. #1
    Membre chevronné Avatar de electroremy
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Juin 2007
    Messages
    999
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 999
    Par défaut Garantir un affichage correct quelque soit le thème
    Bonsoir à tous,

    Je rencontre le problème suivant, avec un programme fait avec VB.NET.

    Note : Je rencontre le même soucis avec une autre appli en VB5, mais le système des containers et des propriétés "Docks" de VB.NET permet de résoudre la plupart des cas mais pas tous.

    Le programme peut marcher sur les différentes versions de Windows.

    Or en fonction du "style graphique" de windows, la bordure des fenêtres est plus ou moins épaisse, de même pour les polices de caractères des contrôles

    Du coup il peut arriver que mes contrôles deviennent trop petits pour le texte, mais surtout que le positionnement dans la fenêtre ne soit plus correct

    C'est notamment le cas des fenêtres redimensionnables, dans lesquelles je recalcule la position et la taille des contrôles dans l’événement form_SizeChanged (faute d'avoir pu créer la fenêtre le faire avec le système des containers et des propriétés "Docks")

    Comment faire ?

    Il faudrait que je récupère les dimenssions internes de la fenêtre.

    J'aurais aussi et toujours besoin des dimenssions externe (par exemple pour aligner plusieurs petites fenêtres)

    Pour les tailles de textes, si l'utilisateur a un thème avec des gros textes, les contrôles ne grossisent pas en conséquence, ce qui est ennuyeux (textes tronqués ou qui passent à la ligne)

    Merci

    A bientôt

  2. #2
    Membre chevronné Avatar de electroremy
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Juin 2007
    Messages
    999
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 999
    Par défaut
    Après des recherches ailleurs j'ai trouvé des choses intéressantes

    mais je ne sais pas trop comment m'en servir...

    Un cas concret sera plus parlant : il correspond à une sorte de MsgBox personnalisée :
    - redimenssionnable par l'utilisateur
    - avec une zone de texte (et pas un label)
    - avec au choix un, deux ou trois boutons

    Nom : MsgBox.jpg
Affichages : 202
Taille : 32,6 Ko

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    Public Class FrmMsgBox
        Dim nb As Integer
        Public Function Montrer(Message As String, Optional Buttons As MsgBoxStyle = MsgBoxStyle.OkOnly, Optional Titre As String = "") As MsgBoxResult
            Dim i As Integer
            Dim but As System.Windows.Forms.Button
            'Nombre et type de boutons :
            Select Case Buttons
                Case MsgBoxStyle.OkCancel
                    nb = 2
                    Button3.DialogResult = Windows.Forms.DialogResult.None
                    Button1.DialogResult = Windows.Forms.DialogResult.OK
                    Button2.DialogResult = Windows.Forms.DialogResult.Cancel
                Case MsgBoxStyle.YesNo
                    nb = 2
                    Button3.DialogResult = Windows.Forms.DialogResult.None
                    Button1.DialogResult = Windows.Forms.DialogResult.Yes
                    Button2.DialogResult = Windows.Forms.DialogResult.No
                Case MsgBoxStyle.YesNoCancel
                    nb = 3
                    Button1.DialogResult = Windows.Forms.DialogResult.Yes
                    Button2.DialogResult = Windows.Forms.DialogResult.No
                    Button3.DialogResult = Windows.Forms.DialogResult.Cancel
                Case Else 'OK only
                    nb = 1
                    Button3.DialogResult = Windows.Forms.DialogResult.None
                    Button2.DialogResult = Windows.Forms.DialogResult.None
                    Button1.DialogResult = Windows.Forms.DialogResult.OK
            End Select
     
            'Texte des boutons :
            For i = 1 To nb
                Select Case i
                    Case 1 : but = Button1
                    Case 2 : but = Button2
                    Case 3 : but = Button3
                End Select
                If Langue = TypeLangue.Anglais Then
                    Select Case but.DialogResult
                        Case Windows.Forms.DialogResult.OK : but.Text = "OK"
                        Case Windows.Forms.DialogResult.Cancel : but.Text = "Cancel"
                        Case Windows.Forms.DialogResult.Yes : but.Text = "Yes"
                        Case Windows.Forms.DialogResult.No : but.Text = "No"
                    End Select
                Else
                    Select Case but.DialogResult
                        Case Windows.Forms.DialogResult.OK : but.Text = "OK"
                        Case Windows.Forms.DialogResult.Cancel : but.Text = "Annuler"
                        Case Windows.Forms.DialogResult.Yes : but.Text = "Oui"
                        Case Windows.Forms.DialogResult.No : but.Text = "Non"
                    End Select
                End If
            Next
     
            Button1.Visible = nb >= 1
            Button2.Visible = nb >= 2
            Button3.Visible = nb >= 3
     
            Call ChangerTaille()
     
            'Message :
            TxtMessage.Text = Message
            If Titre = "" Then
                Me.Text = VersionProgramme
            Else
                Me.Text = Titre
            End If
     
            'choix par défaut :
            Select Case nb
                Case 1 : but = Button1
                Case 2 : but = Button2
                Case 3 : but = Button3
            End Select
            Me.DialogResult = but.DialogResult
     
            'Affichage :
            If My.Application.OpenForms.Count > 0 Then Call CentrerFenetre(My.Application.OpenForms.Item(My.Application.OpenForms.Count - 1), Me)
            Me.ShowDialog()
     
            'Fin et résultat :
            TxtMessage.Clear()
            Return CType(Me.DialogResult, MsgBoxResult)
        End Function
     
        Private Sub FrmMsgBox_SizeChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.SizeChanged
            ChangerTaille()
        End Sub
     
        Private Sub ChangerTaille()
            Dim Delta As Integer
            If Me.WindowState = FormWindowState.Normal Then
                'Taille mini de la fenêtre :
                If Me.Width < 401 Then Me.Width = 401
                If Me.Height < 266 Then Me.Height = 266
                TxtMessage.Width = 387 + Me.Width - 401
                TxtMessage.Height = 203 + Me.Height - 266
                Button1.Top = 212 + Me.Height - 266
                If nb > 1 Then Button2.Top = 212 + Me.Height - 266
                If nb > 2 Then Button3.Top = 212 + Me.Height - 266
                Delta = (Me.Width - 401) \ 2
                Select Case nb
                    Case 1 'un seul bouton au milieu :
                        Button1.Left = 134 + Delta
                    Case 2 'deux boutons :
                        Button1.Left = 68 + Delta
                        Button2.Left = 199 + Delta
                    Case 3 'trois boutons :
                        Button1.Left = 3 + Delta
                        Button2.Left = 134 + Delta
                        Button3.Left = 265 + Delta
                End Select
            End If
        End Sub
    End Class
    Ici le form designer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    <Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
    Partial Class FrmMsgBox
        Inherits System.Windows.Forms.Form
     
        'Form remplace la méthode Dispose pour nettoyer la liste des composants.
        <System.Diagnostics.DebuggerNonUserCode()> _
        Protected Overrides Sub Dispose(ByVal disposing As Boolean)
            Try
                If disposing AndAlso components IsNot Nothing Then
                    components.Dispose()
                End If
            Finally
                MyBase.Dispose(disposing)
            End Try
        End Sub
     
        'Requise par le Concepteur Windows Form
        Private components As System.ComponentModel.IContainer
     
        'REMARQUE*: la procédure suivante est requise par le Concepteur Windows Form
        'Elle peut être modifiée à l'aide du Concepteur Windows Form.  
        'Ne la modifiez pas à l'aide de l'éditeur de code.
        <System.Diagnostics.DebuggerStepThrough()> _
        Private Sub InitializeComponent()
            Me.TxtMessage = New System.Windows.Forms.TextBox()
            Me.Button1 = New System.Windows.Forms.Button()
            Me.Button2 = New System.Windows.Forms.Button()
            Me.Button3 = New System.Windows.Forms.Button()
            Me.SuspendLayout()
            '
            'TxtMessage
            '
            Me.TxtMessage.Location = New System.Drawing.Point(3, 3)
            Me.TxtMessage.Multiline = True
            Me.TxtMessage.Name = "TxtMessage"
            Me.TxtMessage.ScrollBars = System.Windows.Forms.ScrollBars.Vertical
            Me.TxtMessage.Size = New System.Drawing.Size(387, 203)
            Me.TxtMessage.TabIndex = 3
            Me.TxtMessage.TabStop = False
            '
            'Button1
            '
            Me.Button1.Location = New System.Drawing.Point(3, 212)
            Me.Button1.Name = "Button1"
            Me.Button1.Size = New System.Drawing.Size(125, 23)
            Me.Button1.TabIndex = 0
            Me.Button1.Text = "Bouton 1"
            Me.Button1.UseVisualStyleBackColor = True
            '
            'Button2
            '
            Me.Button2.Location = New System.Drawing.Point(134, 212)
            Me.Button2.Name = "Button2"
            Me.Button2.Size = New System.Drawing.Size(125, 23)
            Me.Button2.TabIndex = 1
            Me.Button2.Text = "Bouton 2"
            Me.Button2.UseVisualStyleBackColor = True
            '
            'Button3
            '
            Me.Button3.Location = New System.Drawing.Point(265, 212)
            Me.Button3.Name = "Button3"
            Me.Button3.Size = New System.Drawing.Size(125, 23)
            Me.Button3.TabIndex = 2
            Me.Button3.Text = "Bouton 3"
            Me.Button3.UseVisualStyleBackColor = True
            '
            'FrmMsgBox
            '
            Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
            Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
            Me.ClientSize = New System.Drawing.Size(393, 239)
            Me.Controls.Add(Me.TxtMessage)
            Me.Controls.Add(Me.Button2)
            Me.Controls.Add(Me.Button3)
            Me.Controls.Add(Me.Button1)
            Me.MaximizeBox = False
            Me.MinimizeBox = False
            Me.Name = "FrmMsgBox"
            Me.StartPosition = System.Windows.Forms.FormStartPosition.Manual
            Me.Text = "FrmMsgBox"
            Me.ResumeLayout(False)
            Me.PerformLayout()
     
        End Sub
        Friend WithEvents TxtMessage As System.Windows.Forms.TextBox
        Friend WithEvents Button1 As System.Windows.Forms.Button
        Friend WithEvents Button2 As System.Windows.Forms.Button
        Friend WithEvents Button3 As System.Windows.Forms.Button
    End Class
    Le code que je dois modifier est celui de la dernière procédure, ChangerTaille()

    Les forms possèdent les propriétés :
    - AutoScaleMode qui peut valoir None / Font / Dpi / Inherit
    - AutoScaleFactor
    - ClientRectangle

    Quelle valeur choisir pour AutoScaleMode ? Font ?

    Ensuite comment modifier le code pour tenir compte de AutoScaleFactor ?

    Est-ce que utiliser ClientRectangle (au lieu de Me.Width / Me.Height) suffit pour que des largeurs de brodures différentes des thèmes visuels ne posent plus de problème ?

    Merci

    A bientôt

  3. #3
    Membre chevronné Avatar de electroremy
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Juin 2007
    Messages
    999
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 999
    Par défaut
    Bonjour,

    je suis arrivé à mes fins, mais ce n'est pas évident

    Les propriétés Form.ClientRectangle.Width et Form.ClientRectangle.Height sont les équivalents des ScaleWidth et ScaleHeight de VB5 à ceci près qu'elles ne sont pas disponibles lors de la création de l'IDE dans VB.NET ce qui ne simplifie pas les choses

    Dans mon exemple il faut tenir compte en plus de la taille des boutons (et autres contrôles de taille fixe) qui évolue selon les paramètres d'affichage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    Public Class FrmMsgBox
        Dim nb As Integer
        Dim VerrouResize As Boolean
        'Private Sub FrmMsgBox_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
        '    'On doit retirer de la mesure du temps d'éxecution le temps passé à afficher la boîte de dialogue
        '    QueryPerformanceCounter(MesurePerfCtr7)
        '    MesurePerfCtr1 -= MesurePerfCtr7 - MesurePerfCtr6
        'End Sub
     
        Private Sub FrmMsgBox_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            VerrouResize = False
        End Sub
        Private Sub ChangerTaille()
            If VerrouResize Then Exit Sub
     
            'Remplir ces constantes au moment de la création ou de la modification de la fenêtre -------------------------
            Const WXmin As Integer = 393, WYmin As Integer = 239 'Valeurs de Me.ClientRectangle.Width et .Height
            Const EcartEntreBoutons As Integer = 6
            Const TailleYBouton As Integer = 23
            '-------------------------------------------------------------------------------------------------------------
     
            Dim DX As Integer, DY As Integer
            Dim TXbouton As Integer, TYbouton As Integer
            Dim WXmin2 As Integer
            If Me.WindowState = FormWindowState.Normal Then
                TXbouton = Button1.Width
                TYbouton = Button1.Height
     
                'Calcul de WXmin2 (les boutons peuvent grossir selon les paramètres d'affichage...)
                WXmin2 = EcartEntreBoutons * 3 + 3 * TXbouton 'représente les espaces entre les boutons et les bords de la fenêtre
                If WXmin > WXmin2 Then WXmin2 = WXmin
     
                DX = Me.ClientRectangle.Width - WXmin2
                DY = Me.ClientRectangle.Height - WYmin
     
                VerrouResize = True
                If DX < 0 Then
                    Me.Width -= DX
                    DX = 0
                End If
                If DY < 0 Then
                    Me.Height -= DY
                    DY = 0
                End If
                VerrouResize = False
     
                TxtMessage.Width = Me.ClientRectangle.Width - EcartEntreBoutons
                TxtMessage.Height = Me.ClientRectangle.Height - TailleYBouton - 2 * EcartEntreBoutons - EcartEntreBoutons \ 2
                Button1.Top = TxtMessage.Height + EcartEntreBoutons + EcartEntreBoutons \ 2
                If nb > 1 Then Button2.Top = Button1.Top
                If nb > 2 Then Button3.Top = Button1.Top
                'Delta = (Me.Width - 401) \ 2
                Select Case nb
                    Case 1 'un seul bouton au milieu :
                        Button1.Left = Me.ClientRectangle.Width \ 2 - TXbouton \ 2
                    Case 2 'deux boutons :
                        Button1.Left = Me.ClientRectangle.Width \ 2 - TXbouton - EcartEntreBoutons \ 2
                        Button2.Left = Me.ClientRectangle.Width \ 2 + EcartEntreBoutons \ 2
                    Case 3 'trois boutons :
                        Button1.Left = Me.ClientRectangle.Width \ 2 - 3 * TXbouton \ 2 - EcartEntreBoutons
                        Button2.Left = Me.ClientRectangle.Width \ 2 - TXbouton \ 2
                        Button3.Left = Me.ClientRectangle.Width \ 2 + TXbouton \ 2 + EcartEntreBoutons
                End Select
            End If
        End Sub
     
        Private Sub FrmMsgBox_SizeChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.SizeChanged
            ChangerTaille()
        End Sub
     
        Public Function Montrer(ByVal Message As String, Optional ByVal Buttons As MsgBoxStyle = MsgBoxStyle.OkOnly, Optional ByVal Titre As String = "") As MsgBoxResult
            'MsgBox(Me.ClientRectangle.Width.ToString & " " & Me.ClientRectangle.Height.ToString)
     
            Dim i As Integer
            Dim but As System.Windows.Forms.Button
            'QueryPerformanceCounter(MesurePerfCtr6)
            'Nombre et type de boutons :
            Select Case Buttons
                Case MsgBoxStyle.OkCancel
                    nb = 2
                    Button3.DialogResult = Windows.Forms.DialogResult.None
                    Button1.DialogResult = Windows.Forms.DialogResult.OK
                    Button2.DialogResult = Windows.Forms.DialogResult.Cancel
                Case MsgBoxStyle.YesNo
                    nb = 2
                    Button3.DialogResult = Windows.Forms.DialogResult.None
                    Button1.DialogResult = Windows.Forms.DialogResult.Yes
                    Button2.DialogResult = Windows.Forms.DialogResult.No
                Case MsgBoxStyle.YesNoCancel
                    nb = 3
                    Button1.DialogResult = Windows.Forms.DialogResult.Yes
                    Button2.DialogResult = Windows.Forms.DialogResult.No
                    Button3.DialogResult = Windows.Forms.DialogResult.Cancel
                Case Else 'OK only
                    nb = 1
                    Button3.DialogResult = Windows.Forms.DialogResult.None
                    Button2.DialogResult = Windows.Forms.DialogResult.None
                    Button1.DialogResult = Windows.Forms.DialogResult.OK
            End Select
     
            'Texte des boutons :
            For i = 1 To nb
                Select Case i
                    Case 1 : but = Button1
                    Case 2 : but = Button2
                    Case 3 : but = Button3
                End Select
                If Langue = TypeLangue.Anglais Then
                    Select Case but.DialogResult
                        Case Windows.Forms.DialogResult.OK : but.Text = "OK"
                        Case Windows.Forms.DialogResult.Cancel : but.Text = "Cancel"
                        Case Windows.Forms.DialogResult.Yes : but.Text = "Yes"
                        Case Windows.Forms.DialogResult.No : but.Text = "No"
                    End Select
                Else
                    Select Case but.DialogResult
                        Case Windows.Forms.DialogResult.OK : but.Text = "OK"
                        Case Windows.Forms.DialogResult.Cancel : but.Text = "Annuler"
                        Case Windows.Forms.DialogResult.Yes : but.Text = "Oui"
                        Case Windows.Forms.DialogResult.No : but.Text = "Non"
                    End Select
                End If
            Next
     
            Button1.Visible = nb >= 1
            Button2.Visible = nb >= 2
            Button3.Visible = nb >= 3
     
            Call ChangerTaille()
     
            'Message :
            TxtMessage.Text = Message
            If Titre = "" Then
                Me.Text = VersionProgramme
            Else
                Me.Text = Titre
            End If
     
            'choix par défaut :
            Select Case nb
                Case 1 : but = Button1
                Case 2 : but = Button2
                Case 3 : but = Button3
            End Select
            Me.DialogResult = but.DialogResult
     
            'Affichage :
            If My.Application.OpenForms.Count > 0 Then Call CentrerFenetre(My.Application.OpenForms.Item(My.Application.OpenForms.Count - 1), Me)
            Me.ShowDialog()
     
            'Fin et résultat :
            TxtMessage.Clear()
            Return CType(Me.DialogResult, MsgBoxResult)
        End Function
    End Class
    <Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
    Partial Class FrmMsgBox
        Inherits System.Windows.Forms.Form
     
        'Form remplace la méthode Dispose pour nettoyer la liste des composants.
        <System.Diagnostics.DebuggerNonUserCode()> _
        Protected Overrides Sub Dispose(ByVal disposing As Boolean)
            Try
                If disposing AndAlso components IsNot Nothing Then
                    components.Dispose()
                End If
            Finally
                MyBase.Dispose(disposing)
            End Try
        End Sub
     
        'Requise par le Concepteur Windows Form
        Private components As System.ComponentModel.IContainer
     
        'REMARQUE*: la procédure suivante est requise par le Concepteur Windows Form
        'Elle peut être modifiée à l'aide du Concepteur Windows Form.  
        'Ne la modifiez pas à l'aide de l'éditeur de code.
        <System.Diagnostics.DebuggerStepThrough()> _
        Private Sub InitializeComponent()
            Me.TxtMessage = New System.Windows.Forms.TextBox()
            Me.Button1 = New System.Windows.Forms.Button()
            Me.Button2 = New System.Windows.Forms.Button()
            Me.Button3 = New System.Windows.Forms.Button()
            Me.SuspendLayout()
            '
            'TxtMessage
            '
            Me.TxtMessage.Location = New System.Drawing.Point(3, 3)
            Me.TxtMessage.Multiline = True
            Me.TxtMessage.Name = "TxtMessage"
            Me.TxtMessage.ScrollBars = System.Windows.Forms.ScrollBars.Vertical
            Me.TxtMessage.Size = New System.Drawing.Size(387, 203)
            Me.TxtMessage.TabIndex = 3
            Me.TxtMessage.TabStop = False
            '
            'Button1
            '
            Me.Button1.Location = New System.Drawing.Point(3, 212)
            Me.Button1.Name = "Button1"
            Me.Button1.Size = New System.Drawing.Size(125, 23)
            Me.Button1.TabIndex = 0
            Me.Button1.Text = "Bouton 1"
            Me.Button1.UseVisualStyleBackColor = True
            '
            'Button2
            '
            Me.Button2.Location = New System.Drawing.Point(134, 212)
            Me.Button2.Name = "Button2"
            Me.Button2.Size = New System.Drawing.Size(125, 23)
            Me.Button2.TabIndex = 1
            Me.Button2.Text = "Bouton 2"
            Me.Button2.UseVisualStyleBackColor = True
            '
            'Button3
            '
            Me.Button3.Location = New System.Drawing.Point(265, 212)
            Me.Button3.Name = "Button3"
            Me.Button3.Size = New System.Drawing.Size(125, 23)
            Me.Button3.TabIndex = 2
            Me.Button3.Text = "Bouton 3"
            Me.Button3.UseVisualStyleBackColor = True
            '
            'FrmMsgBox
            '
            Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
            Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
            Me.ClientSize = New System.Drawing.Size(393, 239)
            Me.Controls.Add(Me.TxtMessage)
            Me.Controls.Add(Me.Button2)
            Me.Controls.Add(Me.Button3)
            Me.Controls.Add(Me.Button1)
            Me.MaximizeBox = False
            Me.MinimizeBox = False
            Me.Name = "FrmMsgBox"
            Me.StartPosition = System.Windows.Forms.FormStartPosition.Manual
            Me.Text = "FrmMsgBox"
            Me.ResumeLayout(False)
            Me.PerformLayout()
     
        End Sub
        Friend WithEvents TxtMessage As System.Windows.Forms.TextBox
        Friend WithEvents Button1 As System.Windows.Forms.Button
        Friend WithEvents Button2 As System.Windows.Forms.Button
        Friend WithEvents Button3 As System.Windows.Forms.Button
    End Class
    Comme vous le voyez c'est bourrin

    De plus ClientRectangle ne tiens pas vraiment compte de toute la bordure selon le style visuel, en gros si vous mettez un contrôle trop près du bord il risque de toucher ou de dépasser la bordure de la fenêtre Regardez la différence entre ces deux fenêtres :

    Nom : MsgBox2.jpg
Affichages : 206
Taille : 18,1 Ko

    Nom : MsgBox3.jpg
Affichages : 215
Taille : 27,6 Ko

    Heureusement le système des propriétés .dock et les containers sont biens gérés, aussi dès qu'on le peux il faut utiliser ces dispositfs de .NET

    Se pose alors un autre problème : ailleurs dans mon application il y a des illustrations sous forme d'images (BMP ou GIF), ces images ne sont pas mises à l'échelle et apparaissent donc trop petites (elles pourraient aussi apparaitre trop grosses ce qui rendrait le logiciel difficilement utilisable)

    Pire : ces images contiennent pour le moment du texte... et il faut que je retire les textes de ces images pour les remplacer par des labels, afin de pouvoir traduire le logiciel en plusieurs langues => alors tout sera décalé

    Regardez la différence entre ces deux images :

    Nom : Fen1.jpg
Affichages : 246
Taille : 265,4 Ko

    Nom : Fen2.jpg
Affichages : 237
Taille : 279,5 Ko

    Je ne vois pas comment faire...

    A bientôt

  4. #4
    Membre chevronné Avatar de electroremy
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Juin 2007
    Messages
    999
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 999
    Par défaut
    Bonjour,

    Pour que les images intégrées à une fenêtre soient mises à l'échelle correctement il faut procéder ainsi :

    - créer la PictureBox à la taille voulue

    - attribuer AutoSize à sa propriété SizeMode

    - créer avec votre logiciel de dessin favori l'image correspondante, à la bonne taille

    - cliquez sur "..." dans la propriété Image de la PictureBox pour charger votre image

    - l'image se charge alors, la taille de la PictureBox d'adapte. Recommencez les étapes précédentes si le résultat n'est pas bon

    - une fois que tout est OK, modifiez la propriété SizeMode en lui attribuant :

    - soit la valeur Zoom : votre image sera mise à l'échelle sans être déformée, mais la PictureBox pourra avoir une hauteur ou une largeur un peu plus faible

    - soit la valeur StretchImage : votre PictureBox conservera la même taille relative, l'image sera étirée et si besoin un peut déformée (un cercle pouvant devenir légèrement ovale)

    La valeur StrechImage est préférable si votre image est recouverte de Labels contenant des textes

    A bientôt

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 18/12/2009, 15h05
  2. affichage photo quelque soit l'extension
    Par jbtz64 dans le forum Général Conception Web
    Réponses: 1
    Dernier message: 05/02/2009, 10h19
  3. Réponses: 4
    Dernier message: 18/01/2006, 17h04
  4. Etirer le bacground quelque soit la résolution de l'écran
    Par hikosaijuro dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 07/09/2005, 14h39
  5. Réponses: 2
    Dernier message: 05/08/2005, 09h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo