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

VBA Discussion :

Frame transparente en VBA [FAQ]


Sujet :

VBA

  1. #21
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    bon j'ai du modifié le code car l'image disparaissait bien.. mais cela été du à sa taille... (elle resté petite..) et hors de la frame ... elle est invisible...!

    j'ai aussi modifié la déclaration de la procédure.. VBA me refusant le type Form..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub frame_transparent(cadre As Frame, f, imaj As Image)
      cadre.BorderStyle = 0
      cadre.ZOrder 'peut être supprimé si inconnu sous VBA
      cadre.BackColor = f.BackColor
      imaj.ZOrder 1 'peut être supprimé si inconnu sous VBA
      imaj.Picture = f.Picture
      imaj.Move -cadre.Left, -cadre.Top - 8
      Image1.Height = f.Picture.Height
      Image1.Width = f.Picture.Width
    End Sub
    ensuite .. j'ai rajouté le -8 pour remonter l'image qui été décalé vers le bas ( à peu-près de la hauteur de la police de titre..) ... de même elle semble aussi décaler vers la droite de l'épaisseur des bords de frames.. il y as surement un moyen de calculer ce décalage ( à toi jmf.. ) ..
    Images attachées Images attachées  

  2. #22
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    Ce décalage peut en effet se calculer (je verrai demain) mais :

    Je vois que le Frame a toujours sa bordure (il ne la faut pas et c'était la raison du BorderStyle = 0 !...) C'est cette bordure qui est la fautive si borderStyle = 0 ne va pas à VBA, il faut enlever manuellement cette bordure (dans les propriétés).
    Dis-moi !

  3. #23
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    je me doute qu'il faut le calculer (c'est pour cela que j'ai mis jmf entre parenthése..)..

    sinon je ne peu pas enlever les bors de la frame... car à ce moment la je perd l'intérêt de celle-ci ... et il me suffit de rempacer son titre par un textbox.. qui à la propriétée backSyle. (transparent..)

  4. #24
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    Transparent veut dire transparent .... y compris pour les bords !

    L'intérêt d'un Frame n'est pas dans son aspect, mais dans son rôle de container (pour gérer entre autres des boutons d'options (les uns dans un cadre, les autres dans un autre cadre) et pour jouer d'un seul coup avec sa propriété Visible pour faire disparaître en même temps tout ce qu'il contient ! ou sa propriété enabled !

    Les bordures peuvent être remplacées par un shape (si on y tient) et le titre peut aller dans un Label ou une textbox.

    Attendons Guile, mais il me semble d'ores et déjà que le mieux est de supprimer ces bordures...

  5. #25
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    plusieurs choses appellent mon attention de bon matin, en relisant les messages échangés.

    1) la 1ère et la plus importante : Il est clait que image1 ne doit pas contenir d'image au départ et que sa propriété stretch ne doit pas être mise en oeuvre. Si elle l'était, en effet, l'image resterait petite et... disparaitrait bien évidemment.
    Si VBA force le stretch, il faut laisser
    Image1.Height = f.Picture.Height
    Image1.Width = f.Picture.Width


    si vba ne force pas le stretch ou si dans VBA un contrôle image a une propriété de type autosize, il faut enlever ces 2 lignes rouges ajoutées par Bbil

    2) le décalage constaté sous VBA (absent sous VB où tout est bon) pourrait résulter d'autre chose que des bords du cadre. La cause pourrait en être également le point de départ des coordonnées des contrôles placés sur la Form (le 0 au top top ou le 0 au tout début de la partie sur laquelle sont affichés les contrôles... donc après la barre de menu, comme sous VB).
    Un essai pourrait être fait pour déterminer ce qu'il en est de ce 2ème point : mettre les propriété de la form de telle manière que la barre de menu ne soit plus affichée et voir le résultat (en enlevant alors le - 8, bien sur)

    Renseignez-moi après essai, s'il vous plait.

  6. #26
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    bonjour jmf,
    bon je vais pas trop pouvoior te servir de beta-testeur aujourd'hui ... je par à la plage pour 2 jours...

    dans mon code rajouté il fau lire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      Imaj.Height = f.Picture.Height
      imaj.Width = f.Picture.Width
    ensuite en supprimant le "caption" du frame.. frame1.caption =""... j'ai plus de décalage et peu enlever le -8 .. ce qui montre que c'est bien liée au titre..


    autre chose... il y as un image liée au Frame .. Frame1.picture.. et aprés un rapide essai il semble que l'on puisse s'en servir et donc ce paser d'image1...

    sur ce bon week-end (n'embête pas trop le voisin , puis ousk' va bien passer par la .. et en plus il va adorer mes images )

  7. #27
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    Bonne plage Bbil.

    Je continuerai avec Ousk, en commençant par ce strech qu'il ne faut pas faire.

    Je viens de relire ce que tu as écrit là :
    autre chose... quand je met l'image dans le frame1.. en lui avec un Move (0,0 ) . je me retrouve dans le coin en haut à gauche...
    Rien de plus normal : un container est précisément un container et le 0,0 ne sont pas les coordonnées de la Form mais celles de l'angle supérieur gauche du container ! Dans un container, la position des contrôles qu'il contient n'est pas définie par rapport au 0,0 de la form mais par rapport au 0,0 du container... (c'est la raison même du - cadre.top et - cadre.left )

  8. #28
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Je n'ai pas tout suivi vu que je ne comprends pas le problème, celui-ci étant d'avoir un frame transparent qui ne soit pas un frame mais qui ait tout l'aspect d'un frame. Bref, le mieux était que je laisse bbil à ses
    Image1.Height = f.Picture.Height
    Image1.Width = f.Picture.Width
    vu qu'il existe une propriété PictureSizeMode qui fait ça
    Je suis donc reparti à zéro,
    - copie d'un frame sans le Caption (c'est pas un label)
    - image que j'ai rendue transparente dans Microsoft Photo Editor
    - que j'enregistre en .gif
    - que je place dans un contrôle image
    - Réglage des propriétés qui vont bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Picture1.PictureSizeMode = 1 ‘F1 -> Étire l'image pour remplir la feuille ou la page
    Picture1.PictureAlignemnet = 2 ‘centrée
    Un label pour remplacer le caption du cadre, fond transparent (Inutile d’utiliser un textbox puisque le label possède aussi la propriété BackStyle)
    Associer les deux -> Menu Format -> Grouper
    J’ai un frame transparent que je peux redimensionner et nommer
    Enfin, sur le form, je le mets en arrière plan -> Menu Format -> Plan -> arrière plan
    L'image transparente pour ceux que ça intéresse Pièce jointe 3110


    Un exemple pour ceux qui sont arrivés jusque là Pièce jointe 3111

  9. #29
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    Non, ce n'est pas ce que l'on appelle un Frame transparent, Ousk.

    Tu dois pouvoir changer l'image de fond à ta guise, sans passer par un outil à chaque fois...

    Regarde ce que j'ai fait pour VB et tu vas comprendre un peu mieux....

    Pour VBA, c'est fait, mais je ne suis pas entièrement satisfait.

    Je demandais simplement l'application de mon code (tel qu'il était) donc sans le redimensionnement de image1 mais en s'assurant :
    1) que image1 n'était pas avec la propriété stretch (que je pense que Bbil a utilisée par erreur)
    2) de ne pas donner de bordure du tout au cadre (Frame1)

    Mais bon ! On va attendre Guile qui, lui, sait exactement où il va et ce dont il s'agit (il prépare à mon avis un jeu et à besoin de frames pour jouer avec leur propriété visible, tout en voulant que ce Frame n'occulte pas l'image de fond de sa forme). Il est d'ailleurs possible que son décor en arrière plan change en cours de route (tu comprends ?...)

    Bon ! Je comprends et comprends que tu ne comprends pas de quoi il s'agit.

    Laisse alors. Je verrai avec Guile directement

  10. #30
    Expert éminent
    Avatar de ThierryAIM
    Homme Profil pro
    Inscrit en
    Septembre 2002
    Messages
    3 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2002
    Messages : 3 673
    Points : 8 524
    Points
    8 524
    Par défaut
    Ca fonctionne très bien en VB6, par contre, en VBA 2003 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub UserForm_Initialize()
      Frame_Transparent Frame1, Me, Image1
    End Sub
    
    Private Sub Frame_Transparent(cadre As Frame, f As UserForm, imaj As Image)
      cadre.BorderStyle = 0
      cadre.ZOrder 'peut être supprimé si inconnu sous VBA
      cadre.BackColor = f.BackColor
      imaj.ZOrder 1 'peut être supprimé si inconnu sous VBA
      imaj.Picture = f.Picture
      imaj.Move -cadre.Left, -cadre.Top, f.Picture.Width, f.Picture.Height
    End Sub
    J'ai du, moi aussi, rajouter ce qui est en bleu, et je ne sais pas encore trop pourquoi, je suppose que le comportement du controle Image est différent entre VB et VBA, lorsqu'on lui charge une Picture

    Testé avec PictureAlignment = TopLeft pour la UserForm et Image1
    Vous vous posez une question, la réponse est peut-être ici :
    Toutes les FAQs VB
    Les Cours et Tutoriels VB6/VBScript
    Les Sources VB6


    Je ne réponds pas aux questions techniques par MP. Utilisez les forums. Merci de votre compréhension

  11. #31
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    Merci Thierry

    Parfait

    Peux-tu proposer celà en Q/R ou sources ou ce que tu voudras dans les contributions VBA ?
    Celà pourra à mon avis rendre service à certains, notamment à ceux qui développent des jeux ou choses similaires...

  12. #32
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Ok, j'ai supposé, comme dans cette discussion http://www.developpez.net/forums/sho...7&postcount=40
    Citation Envoyé par où zoumzoum
    Donc s'il y a une solution en conservant les frames même si c'est pour faire joli, ça me satisferait bien mieux
    que Guile souhaitait conserver le cadre du frame
    C'est donc à ça que j'ai répondu
    Thierry, bonjour, j'ai fait ce que tu as mis. Malheureusement le frame prend la couleur du fond du form et masque l'image.
    J'ai peut-être sauté quelque chose

  13. #33
    Expert éminent
    Avatar de ThierryAIM
    Homme Profil pro
    Inscrit en
    Septembre 2002
    Messages
    3 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2002
    Messages : 3 673
    Points : 8 524
    Points
    8 524
    Par défaut
    Citation Envoyé par jmfmarques
    Peux-tu proposer celà en Q/R ou sources ou ce que tu voudras dans les contributions VBA ?
    Comme tu as posté dans le forum contrib, ce sera intégré dans une prochaine maj (VB ou VBA, ou les 2), aucun souci
    Vous vous posez une question, la réponse est peut-être ici :
    Toutes les FAQs VB
    Les Cours et Tutoriels VB6/VBScript
    Les Sources VB6


    Je ne réponds pas aux questions techniques par MP. Utilisez les forums. Merci de votre compréhension

  14. #34
    Expert éminent
    Avatar de ThierryAIM
    Homme Profil pro
    Inscrit en
    Septembre 2002
    Messages
    3 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2002
    Messages : 3 673
    Points : 8 524
    Points
    8 524
    Par défaut
    Citation Envoyé par ouskel'n'or
    j'ai fait ce que tu as mis. Malheureusement le frame prend la couleur du fond du form et masque l'image.
    J'ai peut-être sauté quelque chose
    Je pense, oui, ou alors ton VBA97 est, comment dire, .... hum ...
    Vous vous posez une question, la réponse est peut-être ici :
    Toutes les FAQs VB
    Les Cours et Tutoriels VB6/VBScript
    Les Sources VB6


    Je ne réponds pas aux questions techniques par MP. Utilisez les forums. Merci de votre compréhension

  15. #35
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    Comme tu as posté dans le forum contrib, ce sera intégré dans une prochaine maj (VB ou VBA, ou les 2), aucun souci
    Non,
    Je ne l'ai proposé que dans le sous-forum VB, pas VBA (qui est un peu différent et où j'ai travaillé "en aveugle"))
    A toi de jouer pour VBA, qui, en plus, n'accepte pas les pictureboxes, apparemment, alors que dans la contrib VB les 2 cas (Frame et Picturebox) sont traités séparément.

  16. #36
    Expert éminent
    Avatar de ThierryAIM
    Homme Profil pro
    Inscrit en
    Septembre 2002
    Messages
    3 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2002
    Messages : 3 673
    Points : 8 524
    Points
    8 524
    Par défaut
    Citation Envoyé par ThierryAIM
    Comme tu as posté dans le forum contrib, ce sera intégré dans une prochaine maj (VB ou VBA, ou les 2), aucun souci


    adapté à chacun, bien entendu
    Vous vous posez une question, la réponse est peut-être ici :
    Toutes les FAQs VB
    Les Cours et Tutoriels VB6/VBScript
    Les Sources VB6


    Je ne réponds pas aux questions techniques par MP. Utilisez les forums. Merci de votre compréhension

  17. #37
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Citation Envoyé par ThierryAim
    Je pense, oui, ou alors ton VBA97 est, comment dire, .... hum
    J'ai fait mon essai sur Excel SP3, updaté la semaine dernière
    Pièce jointe 3115

  18. #38
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    Il y a quelque chose que tu n'as pas fait (ou alors pas comme il le fallait)...

    Reprends pas à pas... Je te rapelle que image1 doit se trouver DANS frame1

  19. #39
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Désolé, jmf, mais si je déplace le frame et que Picture bouge avec, on peut bien considérer que Picture est dans le frame ? Oui ?
    Tu as essayé avec VBA ?

  20. #40
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    Hola......
    Un frame est un container...
    quand on déplace un container tout ce qu'il contient se déplace avec.
    L'image dans le container reste dans le container (même avec des coordonnées négatives... En ramenant l'image à la position de celle de la picture de la form, il ne reste affiché dans le cadre que la partie de l'image qui était occulté par le cadre. Tout ce qui déborde du cadre n'est pas visible (hors container) . Résultat final : une image continue, comme s'il n'y avait pas de cadre pour la cacher, alors que le cadre et toutes ses fonctionnalités sont bien là !
    Ce n'est pas difficile à comprendre. Prends un pastis et vas-y avec calme...

    Laisse... (ou fais des essais successifs et tu comprendras comment cela fonctionne)

Discussions similaires

  1. Rendre une frame transparente
    Par RiRix dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 01/03/2013, 12h35
  2. frame transparente et image png
    Par Issam dans le forum Composants VCL
    Réponses: 0
    Dernier message: 07/02/2010, 15h47
  3. Frame Transparente et image de fond
    Par perchman dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 06/03/2009, 00h20
  4. Frames transparentes ou opaques
    Par AlDel dans le forum Composants VCL
    Réponses: 2
    Dernier message: 11/01/2009, 14h00
  5. rendre une frame transparente
    Par oscar.cesar dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 29/02/2008, 08h04

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