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 :

Always on the top


Sujet :

VB 6 et antérieur

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 94
    Points : 34
    Points
    34
    Par défaut Always on the top
    Bonjour,

    Dans mon programme VB, je voudrais que ma fenetre au lancement de l'application soit toujours en premier plan.
    Pour cela j'ai procédé de la façon suivante (que j'ai trouvé sur un site VB) :

    - Dans le main :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     AlwaysOnTop FrmFeuillle, True
    - Dans un module :

    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
    Public Const OnTop = -1&
    Public Const DISABLE_ONTOP = -2&
    Public Const wFlag = 33
     
    Public Sub AlwaysOnTop(frm As Form, OnTop As Boolean)
     
        Dim WndLeft, WndTop As Long
     
        WndLeft = frm.Left
        WndTop = frm.Top
     
        If OnTop = True Then
            SetWindowPos frm.hwnd, OnTop, WndLeft, WndTop, 220, 2200, 33
        Else
            SetWindowPos frm.hwnd, DISABLE_ONTOP, WndLeft, WndTop, 2220, 2220, wFlag
        End If
     
    End Sub

    Lorsque je charge la page, celle-ci apparaît, une fenetre apparait bien dans la barre Windows en bas mais celle-ci n'est pas visible à l'écran... Quelle est mon erreur ?

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Février 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 103
    Points : 97
    Points
    97
    Par défaut
    as tu bien vérifié les coordonnées que tu entres dans ton affichage de ta feuille?
    Je ne sais pas si c'est normal mais entre la position dans le if et celui du else.. les coordonnées diffèrent alors que normalement seul le flag OnTop devrait changer...

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 94
    Points : 34
    Points
    34
    Par défaut
    Effectivement c'est un problème de positionnement...
    Ma fenetre apparait en fait en dehors de l'écran en bas à droit (j'ai pu voir ça en faisant un déplacement)

    Mais quelle est l'unité de mesure de cette fonction pour le positionnement ?

  4. #4
    Expert confirmé
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Points : 4 085
    Points
    4 085
    Par défaut
    Salut

    essaie de positionner frm par rapport aux dimensions de l'objet Screen (en pixels, je crois).

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Février 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 103
    Points : 97
    Points
    97
    Par défaut
    Oui le positionnement se fait bien en pixel ^^

    Si tu as résolu ton problème n'oublie pas le tag !

  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
    Pas Top le double OnTop

  7. #7
    Expert confirmé
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Points : 4 085
    Points
    4 085
    Par défaut
    Salut

    J'ai déjà fait une petite appli qui reste toujours au dessus des autres et j'ai dû recourir aux fonctions de l'API.

    Les déclarations:
    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
    'Fonction (et constantes) de l'API qui permet de
    'garder une fenêtre au dessus de toutes les autres
    Private Declare Function SetWindowPos Lib "user32" ( _
                    ByVal hwnd As Long, _
                    ByVal hWndInsertAfter As Long, _
                    ByVal x As Long, ByVal y As Long, _
                    ByVal cx As Long, ByVal cy As Long, _
                    ByVal wFlags As Long) As Long
    Private Declare Function FindWindow Lib "user32" _
                    Alias "FindWindowA" (ByVal lpClassName As String, _
                    ByVal lpWindowName As String) As Long
    Private Declare Function SetForegroundWindow Lib "user32" ( _
                    ByVal hwnd As Long) As Long
     
    Private Const HWND_TOPMOST = -1
    Private Const HWND_NOTOPMOST = -2
    La fonction:
    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
    Private Function PositionForm(ByVal Feuille As Form, Optional PrePlan As Boolean = True) As Long
        'Variable (lgConst) pour comparer
        'si vrai ou faux (PrePlan)
        'en ajoutant une case à cocher sur la feuille
        Dim lgConst As Long
        If PrePlan Then
            lgConst = HWND_TOPMOST
          Else
            lgConst = HWND_NOTOPMOST
        End If
        PositionForm = SetWindowPos(Feuille.hwnd, lgConst, Feuille.Left \ Screen.TwipsPerPixelX, _
                        Feuille.Top \ Screen.TwipsPerPixelY, _
                        Feuille.Width \ Screen.TwipsPerPixelX, _
                        Feuille.Height \ Screen.TwipsPerPixelY, 0)
    End Function
    Et la petite case à cocher si on ne veut plus que la fenêtre soit au dessus:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub chkOnTop_Click()
        Select Case chkOnTop.Value
          Case 1 'coché
            PositionForm Me, True
          Case 0 'pas coché
            PositionForm Me, False
        End Select
    End Sub

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

Discussions similaires

  1. [Always on top][pas de MFC] comment faire
    Par magnus2005 dans le forum Windows
    Réponses: 3
    Dernier message: 20/04/2007, 11h45
  2. JInternalFram always on top
    Par Sirkiller dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 23/05/2006, 16h06
  3. [SWING] 1.4 Mettre une JFrame always on top
    Par PoPeio dans le forum Agents de placement/Fenêtres
    Réponses: 4
    Dernier message: 29/03/2006, 16h13
  4. "Always on top" c'est possible?
    Par ®om dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 14/02/2006, 08h34
  5. MessageBox always on top
    Par Ingham dans le forum Composants VCL
    Réponses: 5
    Dernier message: 08/04/2004, 13h44

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