bonjour
j'arrive pas à trouver comme on peut rendre une frame transparente ??
merci
Version imprimable
bonjour
j'arrive pas à trouver comme on peut rendre une frame transparente ??
merci
bonjour
j'espère que ce lien pourra t'aider
http://excel.developpez.com/sources/...ameTransparent
bonne journée
michel
Bonjour,
Reste que le code de ce lien ne concerne que l'image de fond (et pas les contrôles éventuellement existants derrière le Cadre).
La chose (image + contrôles) est réalisable sous VB6 ...
Je vais voir dans la journée (sur mon portable où j'ai Excel) si je peux écrire pour VBA ce que j'ai écrit pour VB.
(je rencontrerai peut-être un problème de hwnd du Frame....;))
bonjour
l'exemple est interessant.
J'ai repris le code mais je comprends pas la partie ci-dessous surtout au niveau .......me, image1 ?:cry:
Code:
1
2Frame_Transparent Frame1, Me, Image1
repris dans l'ensemble du code l'exemple
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 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
merci de votre aide
Me et image1 sont deux des trois paramètres envoyés à la procédure !
Me, c'est ton UserForm
Image1, c'est ton image de fond ...
Edit :
Ceci étant dit (revoir l'un de mes messages plus haut) :
1) je n'aime pas vraiment ce code. Il avait été écrit pour VB6 (et "aménagé" pour VBA...) pour ne traiter que la transparence par rapport à une image de fond.
2) je suis persuadé de ce que l'on peut faire beaucoup mieux (me relire), ce que j'ai déjà fait sous VB6... et qu'il me faudra tenter de transposer pour VBA... après avoir résolu un problème de handle sous VBA, ce à quoi il me reste donc à m'atteler dès que j'en aurai le temps ;)
bonjour
pour l'image1 ,j'ai une erreur du type Variable non definie.
mon image de fond est present(propriete PICTURE)?
Pour mon Image , faut il mettre le nom reel de image ou ce nom IMAGE1 est elle standard ?
bonsoir,
pour rendre une userform transparente
http://www.developpez.net/forums/sho...ghlight=handle
pour une frame , je pense qu il faut recuperer le handle de la frame puis appliquer la procedure du liens cité en haut du message
pour avoir la valeur du handle d un bouton ou autre objet d une userform
il faut utiliser l api
Code:
1
2
3 Public Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, _ ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Non !
Juste NON !
on ne traitera pas le Frame comme une Form !
Et on n'utilisera pas de layers ... ;)
Je vais m'y mettre... patience ...
bonsoir
:roll:
debat de specialiste,je suis perdu!
:roll:
bonsoir,
apres avoir recherché sur le forum et sur le net:cry:
apparement on ne peut pas recupérer le handle des controles( d une userform) crées a l aide de la boite à outil vba .
je vais essayé avec la fonction apigetfocus qui a donnée un resultat probant
lors de cette discussion
http://www.developpez.net/forums/sho...d.php?t=248842
Bonjour,
Heu...
Je vois mal comment pn pourrait donner le focus à un Frame ...
Impossible sous VB6 ... je vais voir avec VBA !!!!
EDIT : oui, on peut donner le focus à un Frame sous VBA !!! (pas sous VB6)...
Mais c'est pour moi de mauvaise augure...
Je dois passer à table .
Essaye le code du lien et dis nous si tu obtiens autre chose que 0
Merci ...
bonjour
je suis dans le meme cas .:cry:
Mais la cela me depasse .
je comprends pas ou il faut placer l'appel du FRame1 et frame2 dans mon cas ?
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 Option Compare Database '''""""""""""""""""""""""""""""""""""""""""""""""""""''' ' ' API user32.dll ' '''""""""""""""""""""""""""""""""""""""""""""""""""""''' Private Declare Function apiGetFocus Lib "user32" Alias "GetFocus" () As Long Function CtlhWnd(frmName As String, ctlName As String) As Long On Error Resume Next Forms(frmName).Controls(ctlName).SetFocus If Err Then CtlhWnd = 0 Else CtlhWnd = apiGetFocus End If On Error GoTo 0 End Function
Bonjour, didier.schmit,
Si tu as Excel sous la main,
Un projet composé d'un UserForm nomme UserForm1
un bouton de commande nommé Command1
Un Frame nommé Frame1
Ce code :
Lance, clique sur Command1 et dis-moi ce qui s'affiche dans le message reçu...Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 Private Declare Function apiGetFocus Lib "user32" Alias "GetFocus" () As Long Function CtlhWnd(frmName As String, ctlName As String) As Long On Error Resume Next Forms(frmName).Controls(ctlName).SetFocus If Err Then CtlhWnd = 0 Else CtlhWnd = apiGetFocus End If On Error GoTo 0 End Function Private Sub Command1_Click() MsgBox CtlhWnd("UserForm1", "Frame1") End Sub
Edit : je précise que je viens d'essayer la chose avec un bouton de Command sous VB6 (où un bouton de commande peut recevoir le focus) ===>> non probant !
Re,
Bon ...
La chose marche sous Excel en modifiant un peu, ainsi
(ici un UserForm avec un bouton de Command CommandButton1 et un Frame Frame1)
En lançant et cliquant sur Command1 ===>> handles du Frame et du CommandButton...Code:
1
2
3
4
5
6
7
8
9
10
11
12 Option Explicit Private Declare Function GetFocus Lib "user32" () As Long Private Sub CommandButton1_Click() MsgBox extraithandle(Frame1) & vbCrLf & extraithandle(CommandButton1) End Sub Function extraithandle(ct As Control) As Long ct.SetFocus extraithandle = GetFocus End Function
La chose me laisse toutefois un petit goût amer, car il ne semble pas que ce "handle" en soit un vrai (de Window) permettant de manipuler ensuite comme je l'entends...
On verra demain (fatigué...)
bonjour
le message qui s'affiche
Citation:
une fenetre avec 2lignes
918056
1049158
?????????????
Le 1er des deux est le handle (hwnd) du Frame au moment de l'obtention du focus, didier.schmit.
Reste à savoir s'il est assez "solide" pour faire maintenant avec VBA ce que je peux faire sous VB6 ... :lol:
Je tenterai dans la journée.