Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Général VBA
Général VBA Forum général VBA . Pour les logiciels spécifiques (Access, Excel, Word, ...), postez dans les bons sous forums.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/07/2006, 21h49   #1
Invité de passage
 
Inscription : juillet 2006
Messages : 4
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 4
Points : 0
Points : 0
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.
guile7695 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2006, 23h26   #2
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
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
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2006, 09h31   #3
Invité de passage
 
Inscription : juillet 2006
Messages : 4
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 4
Points : 0
Points : 0
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.
guile7695 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2006, 10h00   #4
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
Je me doutais bien
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2006, 10h50   #5
Inactif
 
Avatar de jmfmarques
 
Inscription : décembre 2005
Messages : 3 784
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 3 784
Points : 4 125
Points : 4 125
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à)
jmfmarques est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2006, 11h21   #6
Invité de passage
 
Inscription : juillet 2006
Messages : 4
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 4
Points : 0
Points : 0
Merci bien pour cette voie de recherche. Je vais essayer.
guile7695 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2006, 11h25   #7
Inactif
 
Avatar de jmfmarques
 
Inscription : décembre 2005
Messages : 3 784
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 3 784
Points : 4 125
Points : 4 125
OK,
Si tu n'y parviens pas, reviens avec ton code d'essai et je te montrerai alors.
jmfmarques est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2006, 11h45   #8
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 854
Points : 16 854
Envoyer un message via Skype™ à bbil
otez-moi d'un doute... cela existe les PictureBox en VBA ? je les trouve pas ...
bbil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2006, 12h00   #9
Inactif
 
Avatar de jmfmarques
 
Inscription : décembre 2005
Messages : 3 784
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 3 784
Points : 4 125
Points : 4 125
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
jmfmarques est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2006, 13h37   #10
Inactif
 
Avatar de jmfmarques
 
Inscription : décembre 2005
Messages : 3 784
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 3 784
Points : 4 125
Points : 4 125
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 !
jmfmarques est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2006, 13h41   #11
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
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+
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2006, 13h43   #12
Inactif
 
Avatar de jmfmarques
 
Inscription : décembre 2005
Messages : 3 784
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 3 784
Points : 4 125
Points : 4 125
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 !
jmfmarques est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2006, 18h50   #13
Invité de passage
 
Inscription : juillet 2006
Messages : 4
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 4
Points : 0
Points : 0
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.
guile7695 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2006, 22h02   #14
Membre régulier
 
Inscription : mai 2006
Messages : 272
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 272
Points : 72
Points : 72
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.
zoumzoum59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2006, 22h44   #15
Inactif
 
Avatar de jmfmarques
 
Inscription : décembre 2005
Messages : 3 784
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 3 784
Points : 4 125
Points : 4 125
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.
jmfmarques est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2006, 22h59   #16
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 854
Points : 16 854
Envoyer un message via Skype™ à bbil
  1. UserForm_Initialize() ..
  2. Me. pour la form conteant le code .. (ou rien..)
  3. oui Contrôle image ..
  4. Scalemode ...? je sais pas..
bbil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2006, 23h03   #17
Inactif
 
Avatar de jmfmarques
 
Inscription : décembre 2005
Messages : 3 784
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 3 784
Points : 4 125
Points : 4 125
Merci Bbil.

Ma réponse (le code à essayer) dans 5 minutes environ.
jmfmarques est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2006, 23h10   #18
Inactif
 
Avatar de jmfmarques
 
Inscription : décembre 2005
Messages : 3 784
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 3 784
Points : 4 125
Points : 4 125
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 :
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
jmfmarques est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2006, 23h43   #19
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 854
Points : 16 854
Envoyer un message via Skype™ à bbil
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 ... ..
bbil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2006, 23h55   #20
Inactif
 
Avatar de jmfmarques
 
Inscription : décembre 2005
Messages : 3 784
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 3 784
Points : 4 125
Points : 4 125
Citation:
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 :
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.
jmfmarques est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h23.


 
 
 
 
Partenaires

Hébergement Web