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 :

Modification apparence windows pour une application tactile


Sujet :

VB.NET

  1. #1
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15
    Points : 11
    Points
    11
    Par défaut Modification apparence windows pour une application tactile
    Bonjour, je cherche à faire la chose suivante :
    au lancement d'une application (en VB.NET) qui tourne sur une tablette tactile avec Windows 7, je voudrais redéfinir les paramètres d'apparence Windows des scrollbars, notamment pour changer la largeur de ces barres.

    J'ai trouvé que les paramètres sont stockés dans le registre sous "HKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics" avec les deux clés ScrollHeight et ScrollWidth.

    Je change ces valeurs au load de mon application, mais je n'arrive pas à faire appliquer ces nouvelles valeurs. J'ai regardé du coté de l'API user32 et de SendMessageTimeout, mais je comprend pas vraiment cette fonction et ne sais même pas si je suis au bon endroit ?

    Je souhaite restaurer les valeurs par défaut à la fermeture de mon application, donc inutile de me dire de la faire en dur sur la tablette, ça ne correspond pas à ce que je veux faire.

    Est'il possible en outre (peut être plus simple ?) de modifier les paramètres de mes scrollbars uniquement pour mon application et non pas de manière générale pour toute la tablette ?

    Merci de l'aide ou des pistes que vous pouvez me donner.


    Renaud.

  2. #2
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 048
    Points : 2 201
    Points
    2 201
    Par défaut
    Il s'agit d'une application Winforms ou d'une application WPF ?

    Winforms et écran tactile, faut pas avoir peur du challenge :-)

  3. #3
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15
    Points : 11
    Points
    11
    Par défaut
    Hello,

    c'est du Winform !

    Ce que je ne comprend pas c'est la difficulté de trouver cette info.

    On peut le faire manuellement en passant par la personnalisation des couleurs et apparence des fenêtres de Windows, en augmentant (ou diminuant) la taille des barres de défilement ...
    reste juste à appliquer ....

    Pourquoi cela semble si compliqué de reproduire cette action en prog ...

    Si il y a des idées, je suis preneur ...

    Renaud

  4. #4
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 048
    Points : 2 201
    Points
    2 201
    Par défaut
    Re,

    Il faut bien imaginer qu'à l'époque de la création de Winforms par Microsoft, les interfaces tactile ça n'était pas vraiement à la mode (à part avec les bon vieux écran de caisse enregistreuse branché sur le port COM qui émulait une souris...).

    Les développeurs faisait alors preuvent de malice avec des interfaces tenant compte des spécificités de ce genre d'utilisation (des controls suffisament gros pour qu'on puisse cliquer dessus sans se tromper, pas de scrolling (bouton suivant - précédant à la place, etc.). Bref des interfaces bien différentes de ce qu'on retrouve de nos jours dans nos téléphones portables.

    Ce qui suit est mon avis personnel, ça n'engage que moi. Peux être que d'autres personne sur ce forum apporteront un éclairage différent selon leur expérience.

    - Tu t'arrange pour faire une interface à l'ancienne (pas de scrolling, mais plutôt un espèce de paging avec des boutons plus haut, plus bas).
    - Peux être qu'en gérant les évenements de souris, tu peux controler le scrolling de ta forms (scrolling par glissement du curseur).
    - Tu utilises une technologie plus adaptées au tactile (touch support), je ne sais pas si WPF offre des meilleurs opportunités dans ce domaine.
    - Tu regardes du coté des librairies de contrôles tierces parties (devexpress, telerik) qui eux bénéficie encore d'un suivi et de mise à jour leur permettant de suivre l'évolution de la technologie.

    D'après ce que j'ai vu, telerik offre un support pour le touch control (pas testé l'efficacité). Même si ça coute environ 1'000 $, il est possible de tester la suite pendant 30 jours avec le support. (après il est toujours possible d'utiliser les controls mais sans support et avec des pop-ups). DevExpress je n'ai pas testé personnellement.

    P.S. Non je n'ai pas d'actions chez eux, je suis juste un développeur satisfait de leur produit (pour l'instant).

  5. #5
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15
    Points : 11
    Points
    11
    Par défaut
    Salut, j'ai finalement trouvé un certain nombre d'élément, mais rien ne semblait fonctionner correctement ... J'ai donc compiler plusieurs chose trouvé sur le net pour arrivé à ça :

    Dans mon form principal,

    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
     
    Imports System.Runtime.InteropServices
     
        <DllImport("user32", CharSet:=CharSet.Auto)> _
        Private Shared Function SystemParametersInfo(uAction As Integer, uParam As Integer, ByRef lpvParam As NONCLIENTMETRICS, fuWinIni As Integer) As Integer
        End Function
     
        Private Const LF_FACESIZE As Integer = 32
     
        <StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Auto)> _
        Private Structure LOGFONT
            Public lfHeight As Integer
            Public lfWidth As Integer
            Public lfEscapement As Integer
            Public lfOrientation As Integer
            Public lfWeight As Integer
            Public lfItalic As Byte
            Public lfUnderline As Byte
            Public lfStrikeOut As Byte
            Public lfCharSet As Byte
            Public lfOutPrecision As Byte
            Public lfClipPrecision As Byte
            Public lfQuality As Byte
            Public lfPitchAndFamily As Byte
     
            <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=LF_FACESIZE)> _
                  Public lfFaceName As String
     
            Public Sub New(lfFaceName As String, lfHeight As Integer, lfWidth As Integer, lfEscapement As Integer, lfOrientation As Integer, lfWeight As Integer, lfItalic As Byte, lfUnderline As Byte, lfStrikeOut As Byte, lfCharSet As Byte, lfOutPrecision As Byte, lfClipPrecision As Byte, lfQuality As Byte, lfPitchAndFamily As Byte)
                Me.lfFaceName = lfFaceName
                Me.lfHeight = lfHeight
                Me.lfWidth = lfWidth
                Me.lfEscapement = lfEscapement
                Me.lfOrientation = lfOrientation
                Me.lfWeight = lfWeight
                Me.lfItalic = lfItalic
                Me.lfUnderline = lfUnderline
                Me.lfStrikeOut = lfStrikeOut
                Me.lfCharSet = lfCharSet
                Me.lfOutPrecision = lfOutPrecision
                Me.lfClipPrecision = lfClipPrecision
                Me.lfQuality = lfQuality
                Me.lfPitchAndFamily = lfPitchAndFamily
            End Sub
     
        End Structure
     
        Private Structure NONCLIENTMETRICS
            Public cbSize As Integer
            Public iBorderWidth As Integer
            Public iScrollWidth As Integer
            Public iScrollHeight As Integer
            Public iCaptionWidth As Integer
            Public iCaptionHeight As Integer
            Public lfCaptionFont As LOGFONT
            Public iSMCaptionWidth As Integer
            Public iSMCaptionHeight As Integer
            Public lfSMCaptionFont As LOGFONT
            Public iMenuWidth As Integer
            Public iMenuHeight As Integer
            Public lfMenuFont As LOGFONT
            Public lfStatusFont As LOGFONT
            Public lfMessageFont As LOGFONT
        End Structure
     
        Private Const SPI_GETNONCLIENTMETRICS As Integer = 41
        Private Const SPI_SETNONCLIENTMETRICS As Integer = 42
        Private Const SPIF_SENDCHANGE As Integer = 2
    Ensuite, au load de mon winform, je relis les valeurs de police par défaut (en cours), car si je ne passe pas ces valeurs lors de la mise à jour de ma largeur de scroll, il me met la zone dans les polices générales ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Dim metrics1 As New NONCLIENTMETRICS()
                metrics1.cbSize = Marshal.SizeOf(metrics1)
                SystemParametersInfo(SPI_GETNONCLIENTMETRICS, 0, metrics1, 0)
                 Dim CaptionFont As New LOGFONT(metrics1.lfCaptionFont.lfFaceName, metrics1.lfCaptionFont.lfHeight, metrics1.lfCaptionFont.lfHeight, metrics1.lfCaptionFont.lfEscapement, metrics1.lfCaptionFont.lfOrientation, metrics1.lfCaptionFont.lfWidth, metrics1.lfCaptionFont.lfItalic, metrics1.lfCaptionFont.lfUnderline, metrics1.lfCaptionFont.lfStrikeOut, metrics1.lfCaptionFont.lfCharSet, metrics1.lfCaptionFont.lfOutPrecision, metrics1.lfCaptionFont.lfClipPrecision, metrics1.lfCaptionFont.lfQuality, metrics1.lfCaptionFont.lfPitchAndFamily)
     
                Dim SMCaptionFont As New LOGFONT(metrics1.lfSMCaptionFont.lfFaceName, metrics1.lfSMCaptionFont.lfHeight, metrics1.lfSMCaptionFont.lfHeight, metrics1.lfSMCaptionFont.lfEscapement, metrics1.lfSMCaptionFont.lfOrientation, metrics1.lfSMCaptionFont.lfWidth, metrics1.lfSMCaptionFont.lfItalic, metrics1.lfSMCaptionFont.lfUnderline, metrics1.lfSMCaptionFont.lfStrikeOut, metrics1.lfSMCaptionFont.lfCharSet, metrics1.lfSMCaptionFont.lfOutPrecision, metrics1.lfSMCaptionFont.lfClipPrecision, metrics1.lfSMCaptionFont.lfQuality, metrics1.lfSMCaptionFont.lfPitchAndFamily)
     
                Dim MenuFont As New LOGFONT(metrics1.lfMenuFont.lfFaceName, metrics1.lfMenuFont.lfHeight, metrics1.lfMenuFont.lfHeight, metrics1.lfMenuFont.lfEscapement, metrics1.lfMenuFont.lfOrientation, metrics1.lfMenuFont.lfWidth, metrics1.lfMenuFont.lfItalic, metrics1.lfMenuFont.lfUnderline, metrics1.lfMenuFont.lfStrikeOut, metrics1.lfMenuFont.lfCharSet, metrics1.lfMenuFont.lfOutPrecision, metrics1.lfMenuFont.lfClipPrecision, metrics1.lfMenuFont.lfQuality, metrics1.lfMenuFont.lfPitchAndFamily)
     
                Dim StatusFont As New LOGFONT(metrics1.lfStatusFont.lfFaceName, metrics1.lfStatusFont.lfHeight, metrics1.lfStatusFont.lfHeight, metrics1.lfStatusFont.lfEscapement, metrics1.lfStatusFont.lfOrientation, metrics1.lfStatusFont.lfWidth, metrics1.lfStatusFont.lfItalic, metrics1.lfStatusFont.lfUnderline, metrics1.lfStatusFont.lfStrikeOut, metrics1.lfStatusFont.lfCharSet, metrics1.lfStatusFont.lfOutPrecision, metrics1.lfStatusFont.lfClipPrecision, metrics1.lfStatusFont.lfQuality, metrics1.lfStatusFont.lfPitchAndFamily)
     
                Dim MessageFont As New LOGFONT(metrics1.lfMessageFont.lfFaceName, metrics1.lfMessageFont.lfHeight, metrics1.lfMessageFont.lfHeight, metrics1.lfMessageFont.lfEscapement, metrics1.lfMessageFont.lfOrientation, metrics1.lfMessageFont.lfWidth, metrics1.lfMessageFont.lfItalic, metrics1.lfMessageFont.lfUnderline, metrics1.lfMessageFont.lfStrikeOut, metrics1.lfMessageFont.lfCharSet, metrics1.lfMessageFont.lfOutPrecision, metrics1.lfMessageFont.lfClipPrecision, metrics1.lfMessageFont.lfQuality, metrics1.lfMessageFont.lfPitchAndFamily)
    Et ensuite, je peux faire mes modification des mes taille par défaut (tout Windows sera impacté ...)

    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
    Dim metrics As New NONCLIENTMETRICS()
                metrics.cbSize = Marshal.SizeOf(metrics)
                metrics.iBorderWidth = 5
    ' mes valeurs perso de la largeur et hauteur de mes scrollbars
                metrics.iScrollWidth = 50
                metrics.iScrollHeight = 50
                metrics.iCaptionWidth = 32
                metrics.iCaptionHeight = 19
                metrics.lfCaptionFont = CaptionFont
                metrics.iSMCaptionWidth = 17
                metrics.iSMCaptionHeight = 17
                metrics.lfSMCaptionFont = SMCaptionFont
                metrics.iMenuWidth = 19
                metrics.iMenuHeight = 19
                metrics.lfMenuFont = MenuFont
                metrics.lfStatusFont = StatusFont
                metrics.lfMessageFont = MessageFont
    
    
                SystemParametersInfo(SPI_SETNONCLIENTMETRICS, metrics.cbSize, metrics, SPIF_SENDCHANGE)
    à la fermeture de mon prog, je remet tout aux valeurs par défaut (celle de mon style général)

    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
     
     Dim metrics1 As New NONCLIENTMETRICS()
                metrics1.cbSize = Marshal.SizeOf(metrics1)
                SystemParametersInfo(SPI_GETNONCLIENTMETRICS, 0, metrics1, 0)
                 Dim CaptionFont As New LOGFONT(metrics1.lfCaptionFont.lfFaceName, metrics1.lfCaptionFont.lfHeight, metrics1.lfCaptionFont.lfHeight, metrics1.lfCaptionFont.lfEscapement, metrics1.lfCaptionFont.lfOrientation, metrics1.lfCaptionFont.lfWidth, metrics1.lfCaptionFont.lfItalic, metrics1.lfCaptionFont.lfUnderline, metrics1.lfCaptionFont.lfStrikeOut, metrics1.lfCaptionFont.lfCharSet, metrics1.lfCaptionFont.lfOutPrecision, metrics1.lfCaptionFont.lfClipPrecision, metrics1.lfCaptionFont.lfQuality, metrics1.lfCaptionFont.lfPitchAndFamily)
     
                Dim SMCaptionFont As New LOGFONT(metrics1.lfSMCaptionFont.lfFaceName, metrics1.lfSMCaptionFont.lfHeight, metrics1.lfSMCaptionFont.lfHeight, metrics1.lfSMCaptionFont.lfEscapement, metrics1.lfSMCaptionFont.lfOrientation, metrics1.lfSMCaptionFont.lfWidth, metrics1.lfSMCaptionFont.lfItalic, metrics1.lfSMCaptionFont.lfUnderline, metrics1.lfSMCaptionFont.lfStrikeOut, metrics1.lfSMCaptionFont.lfCharSet, metrics1.lfSMCaptionFont.lfOutPrecision, metrics1.lfSMCaptionFont.lfClipPrecision, metrics1.lfSMCaptionFont.lfQuality, metrics1.lfSMCaptionFont.lfPitchAndFamily)
     
                Dim MenuFont As New LOGFONT(metrics1.lfMenuFont.lfFaceName, metrics1.lfMenuFont.lfHeight, metrics1.lfMenuFont.lfHeight, metrics1.lfMenuFont.lfEscapement, metrics1.lfMenuFont.lfOrientation, metrics1.lfMenuFont.lfWidth, metrics1.lfMenuFont.lfItalic, metrics1.lfMenuFont.lfUnderline, metrics1.lfMenuFont.lfStrikeOut, metrics1.lfMenuFont.lfCharSet, metrics1.lfMenuFont.lfOutPrecision, metrics1.lfMenuFont.lfClipPrecision, metrics1.lfMenuFont.lfQuality, metrics1.lfMenuFont.lfPitchAndFamily)
     
                Dim StatusFont As New LOGFONT(metrics1.lfStatusFont.lfFaceName, metrics1.lfStatusFont.lfHeight, metrics1.lfStatusFont.lfHeight, metrics1.lfStatusFont.lfEscapement, metrics1.lfStatusFont.lfOrientation, metrics1.lfStatusFont.lfWidth, metrics1.lfStatusFont.lfItalic, metrics1.lfStatusFont.lfUnderline, metrics1.lfStatusFont.lfStrikeOut, metrics1.lfStatusFont.lfCharSet, metrics1.lfStatusFont.lfOutPrecision, metrics1.lfStatusFont.lfClipPrecision, metrics1.lfStatusFont.lfQuality, metrics1.lfStatusFont.lfPitchAndFamily)
     
                Dim MessageFont As New LOGFONT(metrics1.lfMessageFont.lfFaceName, metrics1.lfMessageFont.lfHeight, metrics1.lfMessageFont.lfHeight, metrics1.lfMessageFont.lfEscapement, metrics1.lfMessageFont.lfOrientation, metrics1.lfMessageFont.lfWidth, metrics1.lfMessageFont.lfItalic, metrics1.lfMessageFont.lfUnderline, metrics1.lfMessageFont.lfStrikeOut, metrics1.lfMessageFont.lfCharSet, metrics1.lfMessageFont.lfOutPrecision, metrics1.lfMessageFont.lfClipPrecision, metrics1.lfMessageFont.lfQuality, metrics1.lfMessageFont.lfPitchAndFamily)
     
                Dim metrics As New NONCLIENTMETRICS()
                metrics.cbSize = Marshal.SizeOf(metrics)
                metrics.iBorderWidth = 5
                metrics.iScrollWidth = 17
                metrics.iScrollHeight = 17
                metrics.iCaptionWidth = 32
                metrics.iCaptionHeight = 19
                metrics.lfCaptionFont = CaptionFont
                metrics.iSMCaptionWidth = 17
                metrics.iSMCaptionHeight = 17
                metrics.lfSMCaptionFont = SMCaptionFont
                metrics.iMenuWidth = 19
                metrics.iMenuHeight = 19
                metrics.lfMenuFont = MenuFont
                metrics.lfStatusFont = StatusFont
                metrics.lfMessageFont = MessageFont
     
     
                SystemParametersInfo(SPI_SETNONCLIENTMETRICS, metrics.cbSize, metrics, SPIF_SENDCHANGE)

    Voilà, et le plus beau, c'est que ça fonctionne

    Il y a sans doute des optimisations, mais je n'ai pour le moment pas le temps ...
    si qq'un veut s'y coller et suggérer des améliorations ...

    Renaud

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 10/03/2011, 17h28
  2. Logiciel Help pour une application Windows
    Par faidimery dans le forum Windows
    Réponses: 0
    Dernier message: 27/01/2010, 16h21
  3. Interface défini en XML pour une application windows ?
    Par 6su7 dans le forum Général Dotnet
    Réponses: 4
    Dernier message: 16/11/2009, 11h34
  4. Test automatisé pour une application Windows Forms
    Par Mat_76 dans le forum Windows Forms
    Réponses: 0
    Dernier message: 07/08/2009, 15h37
  5. Comment concevoir une application tactile pour téléphone?
    Par C_Sipi dans le forum Développement Mobile en Java
    Réponses: 4
    Dernier message: 10/01/2009, 12h02

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