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. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Frame transparente en VBA
    Est il possible de rendre une frame transparente pour voir l'image située en arrière plan.

    Merci d'avance.

  2. #2
    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
    Pour un textbox, c'est la propriété BackStyle = 0 mais je n'ai pas l'impression qu'il y ait l'équivamlent pour les frames.
    Si tu poses la question, c'est sans doute que tu as un fond que tu veux conserver et là, à part mettre le frame de la même couleur je ne vois pas.
    Peut être un bout de l'image que tu as en fond (???)
    Juste pour que tu ne restes pas sans rien

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Merci du conseil mais c'est clair que ce n'est pas très pratique de découper des morceaux d'images surtout quand il commence à y avoir beaucoup de frames ou quand on veut modifier l'agencement.

  4. #4
    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 me doutais bien

  5. #5
    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 faut utiliser des pictureboxes comme containers à la place des Frames et se servir ensuite de Paintpicture et des coordonnées de la picturebox pour reproduire dans la picturebox l'image qui, sur la Form, est au même endroit.

    Les contrôles insérés dans la picturebox n'en seront pas affectés.

    Pour être complet : la PictureBox ne devra pas avoir de bordure.

    C'est tout et c'est facile.

    A étudier donc : la méthode PaintPicture (aide en ligne)

    Edit : je vien de le faire sans rencontrer le moindre problème (en quelques secondes)

    si VBA ne connait pas la méthode PaintPicture, on la remplace par une API (il y en a au moins 2 qui font celà)

  6. #6
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Merci bien pour cette voie de recherche. Je vais essayer.

  7. #7
    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
    OK,
    Si tu n'y parviens pas, reviens avec ton code d'essai et je te montrerai alors.

  8. #8
    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 040
    Points
    20 040
    Par défaut
    otez-moi d'un doute... cela existe les PictureBox en VBA ? je les trouve pas ...

  9. #9
    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
    Bonjour Bbil,

    Si VBA n'a pas de contrôle PictureBox,

    Notre ami Guile peut toujours télécharcher TrsPicture (Ocx pour VBA réagissant comme une pictureBox), depuis ce lien :
    http://throsn.tripod.com/CapturingViews.html

    EDIT : C'est gratuit.
    RE EDIT : on peut également faire un container avec une API

  10. #10
    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
    Réflexion faite, après un bon déjeuner :

    Ce sujet me plait car :
    1) il donne l'occasion de montrer ce qu'est le développement bien pensé, en phase avec Microsoft, .. et pas forcément "récité"....
    2) je vais ici travailler "en aveugle", ne connaissant absolument rien des possibilités offertes par un VBA "moderne" ... que je ne possède pas
    3) apparemment, VBA n'a pas tout prévu... Mais je prétends personnellement que Microsoft à, lui, tout prévu....
    4) il va nous falloir faire preuve d'ingéniosité et de créativité pour faire face à certaines lacunes...
    5) j'aime ce genre de défi.

    J'ai donc décidé de m'y intéresser de très près et demande à Bbil de se rappeler ici que ses interventions ne sont pas celles d'un modérateur mais bien (et uniquement) celles d'un intervenant, au même titre que celles de n'importe quel autre intervenant.

    J'ai simplement deux questions à poser à Guile afin d'économiser mes gestes au maximum, puisque je vais ici travailler en aveugle :
    - VBA connait-il la méthode Paintpicture ?
    - VBA gère-t'il des contrôle Image ?

    Le reste sera mon affaire (VBA ou non)... et j'attends que Guile me réponde pour m'y mettre, avec ma tenacité habituelle....
    C'est là mon défi !

  11. #11
    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
    Hello jemefe, moi aussi je suis intéressé (comme lecteur )
    A propos de Paintpicture, peux-tu nous dire ce que fait la méthode Paintpicture ? Peut-être a-t-on l'équivalent en VBA
    Merci
    A+

  12. #12
    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
    Bonjour ousk

    La méthode paintpicture sert à transférer un "rectangle" d'image
    Si elle existe sous VBA, tant mieux. Si elle n'existe pas, je m'en passe et utilise une API, et voilà tout !

  13. #13
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Si j'ai bien tout compris, pour PaintPicture c'est un peu mort. J'ai essayé rapidement et j'ai pas l'impression que ce n'est pas une bonne voie de recherche.
    Par contre, si quelqu'un connait une API capable de faire ça, ce serait super cool.

  14. #14
    Membre habitué
    Homme Profil pro
    En reconversion
    Inscrit en
    Mai 2006
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : En reconversion

    Informations forums :
    Inscription : Mai 2006
    Messages : 482
    Points : 161
    Points
    161
    Par défaut
    Bonsoir guile7695

    En faisant une recherche je suis tombé la dessus c'est pour acces mais il doit pas y avoir beaucoup de difference :

    http://cafeine.developpez.com/access/tutoriel/paint/

    Tu peux peut etre allez y jeter un oeil je ne sait pas ce que ça vaut, car je n'ai deja pas tout lu et mon niveau est plusque modeste.

    Apparemment pour ton cas ce serait Gdi32.dll

    Par contre pour l'instant comment l'utiliser je nage, mais il y a du code d'exemple.

  15. #15
    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
    Bon,

    (je reviens d'un dîner)

    J'ai bien évidemment trouvé 4 façons différentes avec API, mais il me semble que j'en ai trouvé une encore plus simple, avec VBA uniquement.

    Avant de continuer (je suis en aveugle sans VBA), j'aimerais bien qu'un spécialiste VBA (Ousk, Bbil .. ?) réponde à ces quelques questions :

    1) quel est l'événement d'initialisation d'une form ? Est-ce Userform-Initialize ?
    2) Peut-on, sous VBA, attribuer le mot Me pour désigner la Form active ? (sinon : quel mot ?)
    3) VBA connait-il le contrôle Image ?
    4) VBA connait-il les Scalemode d'une Form et si oui, quels sont-ils ?

    Dès réponse à ces 4 questions simples, je serai en mesure de proposer à l'essai une chose également simple et très efficace.

    Merci à ceux qui, possédant VBA, voudront bien répondre à ces 4 questions.

  16. #16
    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 040
    Points
    20 040
    Par défaut
    1. UserForm_Initialize() ..
    2. Me. pour la form conteant le code .. (ou rien..)
    3. oui Contrôle image ..
    4. Scalemode ...? je sais pas..

  17. #17
    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 Bbil.

    Ma réponse (le code à essayer) dans 5 minutes environ.

  18. #18
    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
    Bbil,

    Veux-tu essayer sous VBA et me dire ?

    Dans une UserForm :

    - propiété picture de la Userform avec une image à insérer comme d'habitude
    - un Frame nommé Frame1 avec, à l'intérieur, où l'on veut et avec les dimensions que l'on veut (tout petit) un contrôle image nommé image1
    - les contrôles que l'on veut mettre dans le Frame, pour essayer (des boutons de commande, par exemple)

    et le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub UserForm_Initialize()
      Frame1.BorderStyle = 0
      Frame1.ZOrder 'peut être supprimé si inconnu sous VBA
      Image1.ZOrder 1 'peut être supprimé si inconnu sous VBA
      Image1.Picture = Me.Picture
      Image1.Move -Frame1.Left, -Frame1.Top
    End Sub
    si celà marche sous VBA, j'en ferai une procédure qui pourra être appelée et suggèrerais que tu présentes le tout en Q/R

    Merci d'essayer et me dire

  19. #19
    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 040
    Points
    20 040
    Par défaut
    bon j'ai pas compris ce que tu voulais faire... sinon ce qui ce passe à l'éxecution ... la "petite" image disparait .. de l'écran .. le move ...-...

    au sujet du scalemode vue plus haut... pour le contrôle image et le la form j'ai la propriété :

    PictureAlignment qui peu prendre les valeurs :
    - fmPictureAlignmentBottomLeft
    - fmPictureAlignmentBottomRight
    - fmPictureAlignmentCenter
    - fmPictureAlignmentTopLeft
    - fmPictureAlignmentRight

    et PictureSizeMode
    - fmPictureSizeModeClip
    - fmPictureSizeModeStretch
    - fmPictureSizeModeZoom

    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...


    voila ... ..

  20. #20
    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
    la "petite" image disparait .. de l'écran
    Ben non, elle n'a pas disparu !
    Elle a tout simplement affiché dans le Frame la partie de l'image de la form qui correspondait à la zone occupée par le Frame.

    Enlève donc image1.picture = Me.Picture et tu verras la différence, ma foi
    enlève le move et tu reverras la petite l'image...
    Celà est parfaitement comptéhensible et très simple...

    Mon essai est fait avec une image sur la form mise en haut et à gauche.

    Si l'image de la Form est complète et si les contrôles mis dans le Frame s'affichent, tout est bon : c'est celà, l'effet Frame Transparent, et c'est ce que souhaite Guile : des contrôles dans un Frame mais sans que le Frame ne "bouffe" l'image de fond...

    Bon ... laissons Guile nous dire...

    si, comme je le pense maintenant, tout va bien, voilà le tout en procédure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub UserForm_Initialize()
      frame_transparent Frame1, Me, Image1
      'frame_transparent Frame2, Me, Image2
      ' etc... si nécessaire
    End Sub
     
    Sub frame_transparent(cadre As Frame, f As Form, 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
    End Sub
    EDIT : si maintenant, comme il le semble, VBA permet de positionner l'image de la Form en différents endroits, il suffit de modifier en conséquence le top et le left de image1 dans la fonction move.
    Il me semble alors qu'un select case et un calcul élémentaire suffiraient, bien évidemment (le seul but à atteindre, et il est facile : donner à image1 la même position que celle de l'image de la form, et celà se calcule simplement en fonction de la position du Frame par rapport à l'image, c'est tout !)

    Si vraiment vous n'y parvenez pas seuls, je me rendrai demain chez le voisin (qui possède VBA) et ferait aussi ce select case, ma foi !

    Bonne nuit, maintenant.

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