Est il possible de rendre une frame transparente pour voir l'image située en arrière plan.
Merci d'avance.
Est il possible de rendre une frame transparente pour voir l'image située en arrière plan.
Merci d'avance.
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
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.
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à)
Merci bien pour cette voie de recherche. Je vais essayer.
OK,
Si tu n'y parviens pas, reviens avec ton code d'essai et je te montrerai alors.
otez-moi d'un doute... cela existe les PictureBox en VBA ? je les trouve pas ...
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
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 !
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+
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 !
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.
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.
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.
- UserForm_Initialize() ..
- Me. pour la form conteant le code .. (ou rien..)
- oui Contrôle image ..
- Scalemode ...? je sais pas..
Merci Bbil.
Ma réponse (le code à essayer) dans 5 minutes environ.
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 :
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
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
Merci d'essayer et me dire
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 ... ..
Ben non, elle n'a pas disparu !la "petite" image disparait .. de l'écran
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 :
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.
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
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.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager