Label/forme par dessus un textbox

minb2215 Messages postés 19 Date d'inscription jeudi 29 septembre 2005 Statut Membre Dernière intervention 12 juin 2008 - 4 juil. 2007 à 14:30
 Utilisateur anonyme - 4 juil. 2007 à 20:35
Salut! Je cherche comment mettre un label ou une forme ou etc par dessus un textbox, parce que le z-order tu textbox est par défaut au dessus. Merci! :D

Lazlo
LazySystems

37 réponses

jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
4 juil. 2007 à 14:32
Salut,

Mets donc ton label dans un Frame et n'en parlons plus ...
0
minb2215 Messages postés 19 Date d'inscription jeudi 29 septembre 2005 Statut Membre Dernière intervention 12 juin 2008
4 juil. 2007 à 14:37
Non je peux pas faire ca: en fait je dois avoir l'effet de transparence du label/forme. Mais merci de la réponse

LazySystems
0
Utilisateur anonyme
4 juil. 2007 à 14:39
Voir toutes les sources de labels qui ont un hwnd







__________
Kenji

(


Nouveau forum VBA/Office
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
4 juil. 2007 à 14:41
Qoui ?
Tu veux également un cadre transparent ?
Ma foi.... je peux faire aussi...(3 pastis et ce sera fait en moins de deux...)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
4 juil. 2007 à 14:44
Heu, les sources de labels qui ont un hwnd ? y'aurai pas comme un paradoxe là ?
0
minb2215 Messages postés 19 Date d'inscription jeudi 29 septembre 2005 Statut Membre Dernière intervention 12 juin 2008
4 juil. 2007 à 15:12
Vous m'avez perdu
LazySystems
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
4 juil. 2007 à 15:19
Allez, minb2215, on reprend :
Expose d'un seul coup le résultat final (et la finalité) de ce que tu cherches à faire exactement.
0
Utilisateur anonyme
4 juil. 2007 à 15:22
Il faut que tu fasse un UserControl auquel tu le définis Transparent (y'a une propriété pour ca) et tu dessine ensuite le texte dessus.







__________
Kenji

(


Nouveau forum VBA/Office
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
4 juil. 2007 à 15:24
Ben la finalité est pas bien compliquée : Mettre un label au premier plan (devant les textbox).

Maintenant le soucis qui se pose, c'est que le Label n'a pas de hWnd, c'est un contrôle static (tout comme les Shape), et du coup, il n'est pas possible de faire ce qu'il demande. La solution ? Passer par un contrôle avec un hWnd qui n'affiche qu'un texte et donc avec un fond transparent comme a sûrement voulu dire notre ami charles !
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
4 juil. 2007 à 15:25
Arf, pas vu ton dernier message charles ;)

C'est pas aussi simple : il faut qu'il définisse un masque pour son usercontrol en plus de dessiner dessus, sinon il sera totalement transparent son contrôle !
0
Utilisateur anonyme
4 juil. 2007 à 15:32
Assez simple vu que le masque sera le texte.
UserControl.MaskPicture = UserControl.Image après avoir dessiner le texte.







__________
Kenji

(


Nouveau forum VBA/Office
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
4 juil. 2007 à 15:40
Moi, je m'en tiens à ce que j'ai dit plus haut et :

Une Form
Sur la Form :
une textbox text1
par dessus la textbox : un Frame Frame1
Dans le Frame Frame1 : un label Label1

code :

Option Explicit
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Private Const WS_EX_TRANSPARENT = &H20&
Private Const GWL_EXSTYLE = (-20)
Private Const SWP_NOMOVE = &H2
Private Const SWP_NOSIZE = &H1
Private Const SWP_FRAMECHANGED = &H20
Private Declare Function SetBkMode Lib "gdi32" (ByVal hdc As Long, ByVal nBkMode As Long) As Long
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Private Const TRANSPARENT = 1
Private Declare Function InvalidateRectLong Lib "user32" Alias "InvalidateRect" (ByVal hwnd As Long, ByVal lpRect As Long, ByVal bErase As Long) As Long
Public Sub fantome_ecossais(ByVal fraThis As Control)
    Dim lExStyle As Long
    lExStyle = GetWindowLong(fraThis.hwnd, GWL_EXSTYLE)
    lExStyle = lExStyle Or WS_EX_TRANSPARENT
    Call SetWindowLong(fraThis.hwnd, GWL_EXSTYLE, lExStyle)
    Call SetBkMode(GetDC(fraThis.hwnd), TRANSPARENT)
    Call SetWindowPos(fraThis.hwnd, 0, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE + SWP_FRAMECHANGED)
    Call InvalidateRectLong(fraThis.hwnd, vbNull, True)
End Sub


Private Sub Form_Activate()
    Call fantome_ecossais(Frame1)
    DoEvents
    Frame1.ZOrder
    Frame1.BorderStyle = 0
End Sub

Et je veux bien qu'on me coupe la tête s'il n'obtient pas son label par dessus la textbox, dans un cadre transparent ...
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
4 juil. 2007 à 15:46
Excusez-moi (m'en a être trompé dans l'odre des instructions !!!)
Private Sub Form_Activate()
    Frame1.BorderStyle = 0  ' à mettre avant et pas (come plus haut) après l'instruction de "fantomisation "
    Call fantome_ecossais(Frame1)
    DoEvents
    Frame1.ZOrder
   
End Sub
0
minb2215 Messages postés 19 Date d'inscription jeudi 29 septembre 2005 Statut Membre Dernière intervention 12 juin 2008
4 juil. 2007 à 15:51
Erf, bravo pour le code super compliqué incompréhensible pour un newbie comme moi (lol), mais voici l'effet de ton code: 1-Le frame s'en va en arrière 2-Seul le contour du frame est transparent, pas tout le frame :P  Beh merci quand meme
LazySystems
0
minb2215 Messages postés 19 Date d'inscription jeudi 29 septembre 2005 Statut Membre Dernière intervention 12 juin 2008
4 juil. 2007 à 15:53
Oh j'avais pas vu le dernier message: Le frame reste en avant plan , mais il est toujours pas transparent juste le contour (border) :(
LazySystems
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
4 juil. 2007 à 15:54
Vois ma dernière correction et applique !
Tu vas voir... (ou ne plus voir)...
Testé à l'instant sur ma machine et tout va bien.
Maintenant : pour faire ce que tu veux faire : ne t'attends pas à du "simple"... c'est évident !
0
minb2215 Messages postés 19 Date d'inscription jeudi 29 septembre 2005 Statut Membre Dernière intervention 12 juin 2008
4 juil. 2007 à 15:57
J'ai essayé ca marche pa :(

LazySystems
0
minb2215 Messages postés 19 Date d'inscription jeudi 29 septembre 2005 Statut Membre Dernière intervention 12 juin 2008
4 juil. 2007 à 15:59
Private Sub Form_Activate()
    Frame1.BorderStyle = 0
    Call fantome_ecossais(Frame1)
    DoEvents
    Frame1.ZOrder
End Sub

J'ai bon la?

LazySystems
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
4 juil. 2007 à 16:00
Si ça ne "marche" pas chez toi, c'est que tu n'as pas fait exactement ce que je t'ai dit !
(ou alors que tu n'est pas sous VB6)...

Fais don un projet nouveau et les gestes et le code (par copier coller) que je t'ai indiqués et lance donc....
Aucune raison pour que celà marche sans faille chez moi et pas chez toi !!!!!
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
4 juil. 2007 à 16:10
Alors ?

Je reprends tout, à tout hasard (afin que tu ne te mélanges pas les pinceaux à cause de la correction :

Une Form
Sur la Form :
une textbox text1
par dessus la textbox : un Frame Frame1
Dans
le Frame Frame1 : un label Label1

code :

Option Explicit
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Private Const WS_EX_TRANSPARENT = &H20&
Private Const GWL_EXSTYLE = (-20)
Private Const SWP_NOMOVE = &H2
Private Const SWP_NOSIZE = &H1
Private Const SWP_FRAMECHANGED = &H20
Private Declare Function SetBkMode Lib "gdi32" (ByVal hdc As Long, ByVal nBkMode As Long) As Long
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Private Const TRANSPARENT = 1
Private Declare Function InvalidateRectLong Lib "user32" Alias "InvalidateRect" (ByVal hwnd As Long, ByVal lpRect As Long, ByVal bErase As Long) As Long
Public Sub fantome_ecossais(ByVal fraThis As Control)
    Dim lExStyle As Long
    lExStyle = GetWindowLong(fraThis.hwnd, GWL_EXSTYLE)
    lExStyle = lExStyle Or WS_EX_TRANSPARENT
    Call SetWindowLong(fraThis.hwnd, GWL_EXSTYLE, lExStyle)
    Call SetBkMode(GetDC(fraThis.hwnd), TRANSPARENT)
    Call SetWindowPos(fraThis.hwnd, 0, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE + SWP_FRAMECHANGED)
    Call InvalidateRectLong(fraThis.hwnd, vbNull, True)
End Sub

Private Sub Form_Activate()
    Frame1.BorderStyle = 0  
    Call fantome_ecossais(Frame1)
    DoEvents
    Frame1.ZOrder
End Sub

Ne modifie RIEN et fais du copier-coller...
Dis-nous...
Quelqu'un d'autre pour me dire si j'ai la berlue ou si c'est un autrte qui l'à ?
0
Rejoignez-nous