OVH Cloud OVH Cloud

transparence d'un picturebox

9 réponses
Avatar
GuY - TouTenN
Bonsoir

Je souhaiterai placer du texte sur une form dans un control que je pourrais
déplacer à volonté. Avec un label avec texte à l'horizontal pas de problème.

Si je pousse le bouchon un peut plus loin, je voudrais que le texte soit à
la vertical. Problème le label ne le fait pas(du moins les caractères du
texte les uns à coté des autres).
Je me suis dirigé vers le picturebox, dans lequel j'arrive à orienter le
texte comme je le veux manque de bol le fond de ce contrôle n'est pas
transparent (cache ce qu'il y a en dessous). J'ai essayé plusieurs codes
pour le rendre transparent sans le obtenir le résultat.

Pouvez-vous m'aider ou peut être me rediriger vers une autre solution

merci
--
GuY - TouTen N

9 réponses

Avatar
François Picalausa
Hello,

Une solution serait d'utiliser un path:
BeginPath et EndPath permettent de gérer un path dans un DC. Les APIs de
traçage de texte dans un path sont TextOut et ExtTextOut.
Une fois le path construit, tu pourra le convertir en region à l'aide de
PathToRegion
Et à partir de la region, tu pourra redéfinir la forme de ton picturebox à
l'aide de SetWindowRgn.

Tu peux télécharger un exemple de cette technique à partir de
http://www.chez.com/fpicalausa/programmation/VB/Code/regions.zip
Il s'agit de texte non pivoté, mais je pense que la technique doit pouvoir
s'appliquer.

--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com

"GuY - TouTenN" <gelapplication[nospam]@tiscali.fr> a écrit dans le
message de news:tmKZc.2496$
Si je pousse le bouchon un peut plus loin, je voudrais que le texte
soit à la vertical. Problème le label ne le fait pas(du moins les
caractères du texte les uns à coté des autres).
Je me suis dirigé vers le picturebox, dans lequel j'arrive à orienter
le texte comme je le veux manque de bol le fond de ce contrôle n'est
pas transparent (cache ce qu'il y a en dessous). J'ai essayé
plusieurs codes pour le rendre transparent sans le obtenir le
résultat.


Avatar
GuY - TouTenN
Bonsoir François

Cela fonctionne avec un picturebox... Malheureusement il perd de son
identité : une action (click, mousedown...) ne peut se faire que sur le
contour des caractères(quand ils sont gros)...


--
GuY - TouTen N
Avatar
François Picalausa
Hello,

J'ai mis à jour l'exemple sur mon site pour tracer du texte vertical:
http://www.chez.com/fpicalausa/programmation/VB/Code/regions.zip

--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com

"François Picalausa" a écrit dans le message de
news:
"GuY - TouTenN" <gelapplication[nospam]@tiscali.fr> a écrit dans le
message de news:tmKZc.2496$
Je me suis dirigé vers le picturebox, dans lequel j'arrive à orienter
le texte comme je le veux manque de bol le fond de ce contrôle n'est
pas transparent (cache ce qu'il y a en dessous). J'ai essayé
plusieurs codes pour le rendre transparent sans le obtenir le
résultat.




Avatar
François Picalausa
Hello,

Effectivement, puisque la fenêtre est réajustée.
Tu as la possibilité de créer un "label" en traçant directement le texte sur
ta feuille (avec print). Dans ce cas, il sera transparent, mais ne pourra
etre placé au dessus d'autres contrôles (comme un vrai label). Tu pourras
alors récupérer les événements directement sur la form, en testant les x et
y, ou en créant une région et en utilisant PtInRegion, si la zone ne peut
être traitée simplement avec X et Y.
Sinon, il t'es possible de hooker l'application pour tous les messages
souris et détecter quand le curseur est à la bonne place... mais c'est une
solution qui me semble très lourde!

Pour windows 200/XP, il y a moyen de bricoler (c'est vraiment du bricolage)
en utilisant SetParent et les Layered Windows (avec LWA_COLORKEY)...

J'espère que d'autres auront de meilleures idées...

--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com

"GuY - TouTenN" <gelapplication[nospam]@tiscali.fr> a écrit dans le
message de news:NbLZc.2510$
Cela fonctionne avec un picturebox... Malheureusement il perd de son
identité : une action (click, mousedown...) ne peut se faire que sur
le contour des caractères(quand ils sont gros)...


Avatar
TouTenN
> Tu as la possibilité de créer un "label" en traçant directement le texte


sur
ta feuille (avec print). Dans ce cas, il sera transparent, mais ne pourra
etre placé au dessus d'autres contrôles (comme un vrai label). Tu pourras
alors récupérer les événements directement sur la form, en testant les x


et
y, ou en créant une région et en utilisant PtInRegion, si la zone ne peut
être traitée simplement avec X et Y.



C'est ce que j'ai déjà fait pour d'autres éléments graphiques créés sur ma
form... Mais le problème serait la correction : Je devrait tout redessiner
en cas de suppression, modification du texte.....

Bizarre que cela n'existe pas un label pour texte vertical....

GuY
Avatar
François Picalausa
Hello,

Je devrait
tout redessiner en cas de suppression, modification du texte.....



Et à l'événement Paint... c'est exactement ce que fait le contrôle label...

--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com

"TouTenN" <gelapplication[Nospam]@tiscali.fr> a écrit dans le message
de news:ch945q$a3b$
C'est ce que j'ai déjà fait pour d'autres éléments graphiques créés
sur ma form... Mais le problème serait la correction : Je devrait
tout redessiner en cas de suppression, modification du texte.....


Avatar
TouTenN
> Et à l'événement Paint... c'est exactement ce que fait le contrôle


label...

Pourrais tu approfondir tes explications... j'ai peut être fait l'impasse
sur qql chose d'intéressant

GuY
Avatar
François Picalausa
Hello,

L'événement Paint (WM_PAINT) indique à une fenêtre qu'elle doit être
retracée.
Le label intercepte ce message pour être sûr de rester visible (sinon il
disparaitrait dès qu'une autre fenêtre passerait sur lui.
De même, le label se rafraichit à chaque modification du texte.

En fait, c'était juste pour être sûr de ne pas oublier le retracage dans
WM_PAINT si nécessaire (en jouant sur Autoredraw, on peut s'en passer)...

--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com

"TouTenN" <gelapplication[Nospam]@tiscali.fr> a écrit dans le message
de news:ch9dpg$ks0$
Et à l'événement Paint... c'est exactement ce que fait le contrôle
label...


Pourrais tu approfondir tes explications... j'ai peut être fait
l'impasse sur qql chose d'intéressant


Avatar
GuY - TouTenN
> En fait, c'était juste pour être sûr de ne pas oublier le retracage dans
WM_PAINT si nécessaire (en jouant sur Autoredraw, on peut s'en passer)...



Ok tu m'avais fait peur...

Pour me simplifier la chose, je vais plutôt utiliser la méthode du retour à
la ligne dans un label. Les caractères seront les un en dessous des autres :
Ca prend plus de place mais c'est plus lisible...

Tiens moi qd même au courant si tu trouves qql chose

--
GuY - TouTen N