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
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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.
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$LV3.5099@nntpserver.swip.net
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.
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.
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
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)...
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
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.
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" <fpicalausa@chez.com> a écrit dans le message de
news:u6we5NSkEHA.2500@TK2MSFTNGP09.phx.gbl
"GuY - TouTenN" <gelapplication[nospam]@tiscali.fr> a écrit dans le
message de news:tmKZc.2496$LV3.5099@nntpserver.swip.net
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.
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.
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)...
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$LV3.5256@nntpserver.swip.net
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)...
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)...
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
> 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....
> 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
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.....
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$1@news-reader5.wanadoo.fr
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.....
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.....
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
> 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
> 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
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
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$1@news-reader2.wanadoo.fr
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
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
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
> 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
> 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