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 :

ordre d'affichage des contrôles


Sujet :

VB 6 et antérieur

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 11
    Par défaut ordre d'affichage des contrôles
    Bonjour,

    j'aimerais afficher un objet de type "Line" au-dessus d'un autre contrôle. Malheureusement, le contrôle apparaît systématiquement devant la ligne.

    J'ai beau utiliser les options "Bring to front" et "Send to back" en faisant un click droit sur les objets, le contrôle persiste à rester en avant-plan.

    Je n'ai trouvé aucune propriété dans le contrôle en question permettant de configurer l'ordre d'affichage (il s'agit d'un contrôle que nous avons acheté et dont nous n'avons pas les sources).

    Y a-t-il un moyen de résoudre ce problème en VB6?

    Merci.

  2. #2
    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
    Par défaut
    Bonjour,

    un contrôle Line est totalement inerte et ne peut donc "passer" au premier plan d'un autre contrôle ...

    Si tu veux faire celà : 2 solutions (mais lourdes et avec API) :
    1) solution1 : ton contrôle line dans un Frame transparent (inconvénient : manque de fluidité si tu déplaces ton contrôle (donc ton Frame ...)
    2) solution 2 : ton contrôle Line remplacé par une ligne dessinée sur une picturebox rendue transparente (dur dur ... je suis dessus, précisément...)

  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
    Par défaut
    Pour être beaucoup plus précis :

    Mon travail est déjà fort avancé et je sais déjà rendre la picturebox non seulement transparente, mais limitée à la seule ligne (tout le reste du rectangle de la picturebox disparait visuellement et physiquement), y compris si la ligne est oblique. Je sais également donner à cette ligne un effet plat ou de relief. Je sais déjà en modifier dynamiquement la couleur. Je sais enfin la faire déplacer par un glisser déposer, te tout au 1er plan de tout autre contrôle.
    Ce que je ne sais pas encore faire (il me faut finir d'autres choses également en suspens avant de continuer... - triangles, rectangles, ellipses et cercles, hexagones, octogones, etc...), c'est d'en transformer dynamiquement, en cours de route, les coordonnées des extrêmités. J'entrevois bien déjà comment procéder, mais (une autre fois), ma priorité est pour l'instant à un autre degré de ce développement.
    Si donc il te suffit pour l'instant de ce que j'ai écrit ici (sauf donc, la modification dynamique des coordonnées relatives), dis-le et je t'indiquerai le code à utiliser (fort ésotérique, je te préviens).
    Dans la foulée (à tout hasard) : s'agit-il d'une simple ligne ou plutôt (il y a mon petit doigt qui me souffle "des choses") d'une flêche. Réponds sur ce point avec précision car je ne ferai le travail qu'une seule fois...

    Edit : je précise que cette solution sophistiquée est de loin préférable aux 2 autres solutions proposées dans mon post précédent. les 2 autres solutions en question, ont en effet un inconvénient de taille : le "rectangle" transparent vient obstruer, même transparent, une partie du contrôle recouvert, le rendant donc assez infirme aux clics.
    Celle-ci, bien au contraire, laisse intact le contrôle recouvert.

  4. #4
    Expert confirmé
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 132
    Par défaut
    Si il ne s'agit que de lignes horizontales ou verticales,
    Sur un Form, 1 ListBox (List1), 1 CommandButton (Command1), 2 PictureBoxs (PictureLineH et PictureLineV)
    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
    Option Explicit
    Dim ZorderLine As Integer
    Private Sub Command1_Click()
    If ZorderLine = 0 Then ZorderLine = 1 Else ZorderLine = 0
    PictureLineH.ZOrder (ZorderLine)
    PictureLineV.ZOrder (ZorderLine)
    End Sub
    Private Sub Form_Load()
    ZorderLine = 1
    Command1.Caption = "Zorder"
    Command1.Move 30, 120, 1005, 255
     
    List1.AddItem "ton controle"
    List1.Move 1260, 120, 2175
     
    PictureLineH.BorderStyle = 0
    PictureLineH.BackColor = 255
    PictureLineH.Move 90, 780, 4005, 15
    PictureLineH.ZOrder (ZorderLine)
     
    PictureLineV.BorderStyle = 0
    PictureLineV.BackColor = &HC000&
    PictureLineV.Move 1920, 15, 15, 4005
    PictureLineV.ZOrder (ZorderLine)
     
    End Sub
    Motif de l'edit
    Salut ucfoutu, je retire ou pas ?
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 11
    Par défaut
    Citation Envoyé par ProgElecT Voir le message
    Si il ne s'agit que de lignes horizontales ou verticales,
    Sur un Form, 1 ListBox (List1), 1 CommandButton (Command1), 2 PictureBoxs (PictureLineH et PictureLineV)
    Oui effectivement, le bord est rectangulaire donc cette solution doit convenir je pense.

    Donc pour résumer tu dessines des picturebox larges (ou hautes) d'un pixel (15 twips) pour simuler les lignes. L'opération "Zorder" permet de spécifier l'ordre d'affichage des picturebox selon l'axe Z, donc de les faire passer en arrière- ou avant-plan.

    Merci, je vais essayer cela de ce pas!

  6. #6
    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
    Par défaut
    Bonjour,
    Et tout ce tsoin-tsoin pour si peu ?

    Fais donc un Frame avec sa propriété borderstyle = 0 et sa propriété backcolor avec la couleur de ton choix, de dimensions plus grandes que ton contrôle et place tout simplement ton contrôle (plus petit) à l'intérieur de ce Frame !!!


    Edit : et s'il s'agit d'un bouton de commande ou similaire, inspire-toi de ceci (qui laisse intacte la totalité de ton contrôle)

    Une Form
    Un bouton de commande Command1 avec sa propriété Style = Graphical
    Une PictureBox Picture1 avec la propriété Appearance = 0

    Ce code :

    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
    Option Explicit
    Private Sub Form_Activate()
      Dim coultrait As Long, coultexte As Long, coulfond As Long, epais As Integer
      coultrait = vbYellow
      coultexte = vbRed
      coulfond = vbBlue
      epais = 20
      With Picture1
        .ScaleMode = Me.ScaleMode
        .BorderStyle = 0
        .Width = Command1.Width
        .Height = Command1.Height
        .DrawWidth = epais
        .AutoRedraw = True
        .ForeColor = coultexte
        .BackColor = coulfond
        .Visible = False
      End With
      Picture1.Line (0, 0)-(Picture1.Width, Picture1.Height), coultrait, B
      Set Picture1.Font = Command1.Font
      With Picture1
       .CurrentX = (Picture1.Width - Picture1.TextWidth(Command1.Caption)) / 2
       .CurrentY = (Picture1.Height - Picture1.TextHeight(Command1.Caption)) / 2
      Picture1.Print Command1.Caption
      End With
      Command1.Caption = ""
      Command1.Picture = Picture1.Image
    End Sub
    Lance et vois....

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 11
    Par défaut
    Merci pour vos réponses!

    Citation Envoyé par ucfoutu Voir le message
    Si donc il te suffit pour l'instant de ce que j'ai écrit ici (sauf donc, la modification dynamique des coordonnées relatives), dis-le et je t'indiquerai le code à utiliser (fort ésotérique, je te préviens).
    Effectivement je ne dois pas modifier dynamiquement les coordonnées des lignes.

    Citation Envoyé par ucfoutu Voir le message
    Dans la foulée (à tout hasard) : s'agit-il d'une simple ligne ou plutôt (il y a mon petit doigt qui me souffle "des choses") d'une flêche. Réponds sur ce point avec précision car je ne ferai le travail qu'une seule fois...
    Non il s'agit bien d'une simple ligne.

    En fait, pour être précis, le problème est d'ajouter un bord autour du contrôle. Pour y arriver, j'ai pensé ajouter 4 lignes autour du contrôle et de réduire la taille de ce dernier, ce qui fonctionne assez bien (ce n'est peut être pas la meilleure solution...). Cependant, il serait préférable de garder la taille initiale du contrôle et de dessiner le bord au-dessus, d'où ma question.

    Citation Envoyé par ucfoutu Voir le message
    Edit : je précise que cette solution sophistiquée est de loin préférable aux 2 autres solutions proposées dans mon post précédent. les 2 autres solutions en question, ont en effet un inconvénient de taille : le "rectangle" transparent vient obstruer, même transparent, une partie du contrôle recouvert, le rendant donc assez infirme aux clics.
    Celle-ci, bien au contraire, laisse intact le contrôle recouvert.
    Oui en effet, il serait gênant qu'on ne puisse plus cliquer sur une partie du contrôle.

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

Discussions similaires

  1. Connaitre l'ordre d'affichage des div
    Par PrinceMaster77 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 07/06/2006, 12h40
  2. Ordre d'affichage des formulaires
    Par cdumas dans le forum Access
    Réponses: 3
    Dernier message: 04/05/2006, 12h15
  3. [SQL] Ordre d'affichage des lignes d'un état
    Par duboisfa dans le forum Oracle
    Réponses: 20
    Dernier message: 28/02/2006, 23h00
  4. [Reports 6] Ordre d'affichage des lignes d'un état
    Par duboisfa dans le forum Reports
    Réponses: 2
    Dernier message: 17/02/2006, 16h21
  5. Réponses: 5
    Dernier message: 08/03/2005, 13h22

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