cs_kalif
Messages postés362Date d'inscriptionmardi 18 décembre 2001StatutMembreDernière intervention24 août 2012
-
31 juil. 2006 à 20:54
cs_kalif
Messages postés362Date d'inscriptionmardi 18 décembre 2001StatutMembreDernière intervention24 août 2012
-
1 août 2006 à 23:57
bonjour a tous
je souhaiterait écrire "bonjour" sur l'écran, (comme quand on lève le son dans un clavier multimédia...) j'aimerai qu'il n'y ai pas de "fond" sous le texte ...
Gobillot
Messages postés3140Date d'inscriptionvendredi 14 mai 2004StatutMembreDernière intervention11 mars 201934 1 août 2006 à 23:52
Pourquoi avec image ça marcherait mieux ?
peut-être parce que le temps de chargement de l'image est plus long ...
mais il y a un problème quand on teste dans l' IDE et qu'on réduit la fenêtre, on perd l'avantage du premier plan,
et on a l'impression que ça marche pas
mais si on travaille dans l'IDE en fenêtré et non pas en plein écran, ça marche
et en compilé, ça marche toujours.
Option Explicit
Const LWA_COLORKEY = &H1
Const LWA_ALPHA = &H2
Const HWND_TOPMOST = -1
Const HWND_NOTOPMOST = -2
Const SW_HIDE = 0
Const SW_NORMAL = 1
Const SW_SHOW = 5
Const GWL_EXSTYLE = -20
Const WS_EX_LAYERED = &H80000
Const SWP_NOSIZE = &H1
Const SWP_NOMOVE = &H2
Const SWP_NOACTIVATE = &H10
Const SWP_SHOWWINDOW = &H40
Const WM_NCLBUTTONDOWN = &HA1
Const HTCAPTION = 2
Dim Bool As Boolean
Dim XX As Long
Dim YY As Long
Dim Ret As Long
Dim C1 As Long
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 SetLayeredWindowAttributes Lib "user32"
(ByVal hwnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal
dwFlags As Long) As Long
Private Declare Sub 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)
Private Declare Function GetForegroundWindow Lib "user32" () As Long
Private Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function GetDesktopWindow Lib "user32" () As Long
Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
Private Declare Function SendMessage Lib "user32" Alias
"SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As
Long, lParam As Any) As Long
Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 31 juil. 2006 à 22:20
il te suffit de découper une fenêtre de la forme de ton texte et de la mettre au premier plan (voir ma source nommée horloge système par exemple), ce qui est plus simple à faire que de dessiner directement sur le DC de l'écran !
DARKSIDIOUS > j'affiche plusieurs fois des textes différents... donc je me vois mal découper la feuille plusieurs fois... :s
Molenn> il faut que la feuille sois invisible avec un label transparent... donc c'est pas bon
=278023 Gobillot> Ta reponse ME CONVIENS MAIS cepandant j'ai quand meme un petit souci, je voudrai que le texte sois au premier plan? (et si possible comment détecter le plein écran?)
cs_kalif
Messages postés362Date d'inscriptionmardi 18 décembre 2001StatutMembreDernière intervention24 août 2012 1 août 2006 à 11:57
ps: voici les déclarations oublié...
Private Declare Function GetDesktopWindow Lib "user32" () As Long
Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
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 SetLayeredWindowAttributes Lib "user32" (ByVal hwnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long
cs_kalif
Messages postés362Date d'inscriptionmardi 18 décembre 2001StatutMembreDernière intervention24 août 2012 1 août 2006 à 12:58
tu la coupe toute les minute ? moi pour mon appli il se peut qu'elle se coupe toute les seconde ou meme toute les demi seconde (c'est a l'appui de certaine touhce) et je trouve ca un peu bizzar d'utiliser cette methode... pas toi ?
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 1 août 2006 à 14:02
C'est pourtant l'une des plus simple car ca reste une fenêtre que tu peux manipuler très facilement (mettre au premier plan, ne pas gérer le raffraîchissement, mettre une image à la place d'une simple couleur, dessiner dedans, etc.)
Maintenant, c'est sûr que la découpe prend un peu de temps, mais je ne suis pas sûr que la méthode de gobillot marche : ton texte apparaît-il bien tout seul à l'écran ? Car à ce moment là, oui ca méthode est sûrement meilleure (il te reste plus qu'à faire un SetWindowPos sur le picturebox pour la mettre au premier plan). Cependant, j'ai un gros doute car en théorie en rendant le picturebox transparent, ca devrait aussi rendre transparent tout les contrôles qui sont contenus dedans !
cs_kalif
Messages postés362Date d'inscriptionmardi 18 décembre 2001StatutMembreDernière intervention24 août 2012 1 août 2006 à 14:37
la methode de gobillot marche, il y a en effet du texte tout seul a l'écrant mais j'ai déjàa essayé SetWindowPos et ca ne fonctionne que si il y a une image dans le picturebox je sais pas pk ...
Gobillot
Messages postés3140Date d'inscriptionvendredi 14 mai 2004StatutMembreDernière intervention11 mars 201934 1 août 2006 à 16:07
Salut,
ma méthode marche très bien, elle est opérationnelle depuis un bon moment
le texte apparaît normalement et seule la PictureBox est transparente
on peut même se passer du Label et écrire directement dans la PictureBox mais c'est moins pratique.
que veux tu dire par mettre en premier plan ?
<strike>le texte est sur le bureau, on peut le mettre sur une fenêtre pendant le déplacement mais dès qu'on clique sur la fenêtre,
le texte disparaît derrière ... il est bien fait pour être sur le bureau et non pas sur une autre fenêtre.
</strike>
je viens de rajouter SetWindowPos sur la PictureBox et ... ça marche !!!