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 6 et antérieur Discussion :

Problème avec une source de developpez.com


Sujet :

VB 6 et antérieur

  1. #1
    Membre actif
    Inscrit en
    Juin 2006
    Messages
    584
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 584
    Points : 235
    Points
    235
    Par défaut Problème avec une source de developpez.com
    Salut,
    je voulais utiliser le code pour trouver les dimensions et position de la barre de tache.
    J4ai trouvé ce code qui semblais marchais:
    http://vb.developpez.com/faq/?page=Systeme#taskbar

    Mais le problème que je viens de m'apercevoir, c'est que lorsque je met la barre a gauche ou en haut, la position renvoyé est toujours 1 alors que lorsque la barre est a gauche, la position devrait être 4.

    Je ne sais pas trop d'ou viens le problème et je ne comprend pas ce bout de code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    With Screen
        intI = .Width \ (.TwipsPerPixelX * 2)
        intJ = .Height \ (.TwipsPerPixelY * 2)
    End With
    A quoi servent intI et intJ?

    Merci de vos aide

  2. #2
    Membre actif
    Inscrit en
    Juin 2006
    Messages
    584
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 584
    Points : 235
    Points
    235
    Par défaut
    j'ai modifier les conditions et ca marche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    If .Top <> 0 Then
            .Position = 3
        ElseIf .Left <> 0 Then
            .Position = 2
        ElseIf .Left = 0 And .Height = Screen.Height \ Screen.TwipsPerPixelY Then
            .Position = 4
        ElseIf .Top = 0 And .Left = 0 Then
            .Position = 1
        End If

  3. #3
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Bonsoir,

    Une question (et ma réponse pourra peut-être te conduire vers tout autre chose de plus adroit) :
    Pourquoi cherches-tu cette information (pour décider de quoi, ensuite) ?

  4. #4
    Membre actif
    Inscrit en
    Juin 2006
    Messages
    584
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 584
    Points : 235
    Points
    235
    Par défaut
    parce que je défini la position de ma fenetre en fonction de la barre de tache, si elle est en haut, je met la fenetre juste en dessous en haut et si elle est en bas je place la fenetre en bas juste au dessus de la barre de tache.

  5. #5
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Bonjour, Morgan47,

    Je m'en doutais passablement, à vrai dire ...

    Alors (et je ne sais plus si c'est sur ce forum ou ailleurs que l'en ai parlé hier ou avant-hier).

    VB a un controle Sysinfo (ajoute-le par Projet ===>>> composants ==>> etc...)

    Ce contrôle possède, entre autres, 4 propriétés qui t'intéressent :

    WorkAreaTop, WorkAreaLeft, WorkAreaWidth et WorkAreaHeight.

    WorkArea ? C'est tout simplement la surface restée disposible (donc hors barre des tâches) sur ton écran, et ce : quelle que soit la position de cette barre des tâches.

    Voilà .....

    Bonne continuation...

  6. #6
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 130
    Points : 3 118
    Points
    3 118
    Par défaut
    Citation Envoyé par ucfoutu Voir le message
    Bonjour, Morgan47,

    Je m'en doutais passablement, à vrai dire ...

    Alors (et je ne sais plus si c'est sur ce forum ou ailleurs que l'en ai parlé hier ou avant-hier).

    VB a un controle Sysinfo (ajoute-le par Projet ===>>> composants ==>> etc...)

    Ce contrôle possède, entre autres, 4 propriétés qui t'intéressent :

    WorkAreaTop, WorkAreaLeft, WorkAreaWidth et WorkAreaHeight.

    WorkArea ? C'est tout simplement la surface restée disposible (donc hors barre des tâches) sur ton écran, et ce : quelle que soit la position de cette barre des tâches.

    Voilà .....

    Bonne continuation...
    He bien, pour quelqu'un toujours si prompt à fustiger l'approximation et avec une référence ajoutée pour un résultat approximatif
    il peut être désireux de savoir si la barre de tache est masquée ou non et où elle se trouve précisément
    et donc ne pas se contenter de la zone d'affichage.

    Voit du coté de Findow et GetWindowPlacement
    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
    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Private Declare Function GetWindowPlacement Lib "user32" (ByVal hwnd As Long, lpwndpl As WINDOWPLACEMENT) As Long
     
     
    Private Type POINTAPI
            x As Long
            y As Long
    End Type
    Private Type RECT
            Left As Long
            Top As Long
            Right As Long
            Bottom As Long
    End Type
    Private Type WINDOWPLACEMENT
            Length As Long
            flags As Long
            showCmd As Long
            ptMinPosition As POINTAPI
            ptMaxPosition As POINTAPI
            rcNormalPosition As RECT
    End Type
     
     
    Sub GetTasckBarPlacement()
     
     
        Dim TrayHwnd As Long, WinPlacement As WINDOWPLACEMENT
     
        TrayHwnd = FindWindow("Shell_traywnd", "")
     
        WinPlacement.Length = Len(WinPlacement)
        GetWindowPlacement TrayHwnd, WinPlacement
     
        With WinPlacement.rcNormalPosition
            Debug.Print .Left, .Top, .Bottom, .Right
        End With
    End Sub
    Attention, le résultat tient compte du fait que la barre est masquée ou non.
    Et tant qu'à faire, il reste à savoir si tu gères du multi écran car le résultat est relatif à l'écran principal.

  7. #7
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Bonjour DarkVader (et un salut respectueux et... au moins égal à celui que tu as bien voulu m'adresser "ailleurs" ...).

    Ceci étant formulé ! je suis content de voir que je suis prompt et suis également content de voir que tu l'es également, mais ...

    1) sysinfo es parfaitement capable de déterminer la position et les dimensions de l'aire disponible, et ce quel que soient les paramètres de la barre de tâches (visible, pas visible, visible mais masquable ou toujours visible) et de s'y adapter en respect de la philosophie de Windows. Il considère par exemple qu'une barre de tâche "escamotable" laisse intacte la surface de travail disponible.

    2) je veux bien maintenant "considérer" que le demandeur veut s'écarter dans ce domaine de la philosophie de Windows et décide que sa "surface de travail" sera limitée à celle de l'écran moins celle (si elle est paramétrée comme masquable") de sa barre de tâches (et ce, en dépit de la volonté éventuelle de l'utilisateur final). Une telle manoeuvre correspondrait pour moi à un déni de la philosophie même de Windows. Mais... pourquoi pas, ma foi....

    Alors : inutile dans ce cas de passer par des structures ! les fonctions de l'Api de Windows permettent quand même de :
    1) définir les pâramétrages (visible, pas visible, masquable, etc...) de la barre de tâches, non ? (et ce sans structures)
    2) de relever (fastoche) ce paramétrage
    3) de forcer à toujours visible ( = 2)
    4) de mettre en oeuvre Sysinfo et relever ce dont on a besoin
    5) de restituer immédiatement le paramétrage originel de la barre de tâches....

    Je sais : dit ainsi, celà peut effrayer ! Mais celà se traduit en 5 lignes de code !...

    Amitiés....

    EDIT : (et je sais que tu sauras en faire bon usage) :

    Je me contente (et sans aucune structure) d'un contrôle SysInfo et des deux fonctions suivantes de la librairie User32 :
    ShowWindow et FindWindow
    (tests faits à l'instant et dans tous les sens... tous avec succès...)

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 25/03/2010, 16h03
  2. Problème avec une librairie open source sous myEclipse
    Par scaryfan dans le forum EDI et Outils pour Java
    Réponses: 0
    Dernier message: 01/09/2009, 20h40
  3. problème avec une requête imbriquée
    Par jaimepasteevy dans le forum Langage SQL
    Réponses: 13
    Dernier message: 05/12/2003, 10h29
  4. Problème avec une procédure stockée
    Par in dans le forum Langage SQL
    Réponses: 4
    Dernier message: 27/05/2003, 15h33

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