Excel 2007 - Texte sur UserForm [Résolu]

Messages postés
693
Date d'inscription
samedi 18 mai 2002
Dernière intervention
17 avril 2017
- - Dernière réponse : cs_cheyenne
Messages postés
693
Date d'inscription
samedi 18 mai 2002
Dernière intervention
17 avril 2017
- 12 avril 2012 à 12:03
Bonjour,

Sur une UserForm, je voudrais dessiner une boussole avec les degrés par pas de 45. Les méthodes Circle et Line étant refusées je passe donc par les API.
Jusque là tout va bien, mais je cherche à inscrire les degrés avec l'API TextOut et là j'ai un problème.
Bien que la fonte de l'UserForm soit Small Fonts en taille 7 le texte appliqué semble être de l'Arial en taille 10 !
De plus le fond des caractères est blanc.

Que faut-il faire pour arriver à avoir un texte vraiment en Small Fonts et avec un fond transparent ?

Merci,

Cheyenne
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
3
Merci
Je vais malgré tout faire une exception à mes convictions exprimées dans mon précédent message. Elle sera la seule ===>>
Il t'est possible de palier l'absence de propriété FontTransparent d'un UserForm.
Il te faut alors utiliser la fonction setbkmode de l'Api de windows.
Petit exemple/preuve (bâclé, mais bon ...)
Private Declare Function TextOut Lib "gdi32" Alias "TextOutA" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal lpString As String, ByVal nCount As Long) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function SetBkMode Lib "gdi32" (ByVal hdc As Long, ByVal nBkMode As Long) As Long

Private Sub CommandButton1_Click()
    toto = "tu vois bien que ce problème a disparu"
    monhwnd = FindWindow(vbNullString, Me.Caption)
    monhdc = GetDC(monhwnd)
    SetBkMode monhdc, 0
    TextOut monhdc, 0, 0, toto, Len(toto)
End Sub

voilà, ami. Je te laisse maintenant là.

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'e

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 98 internautes ce mois-ci

Commenter la réponse de ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
0
Merci
Bonjour, cheyenne,
Avant toute autre chose : je ne vais ici que t'orienter (et ne pas aller plus loin pour des raisons que j'ai déjà eu l'occasion d'exprimer : Excel n'est pas fait pour cela)
1) tout ce qui est en dessin (texte compris) se calcule en pixels (Api)
2) Textout n'est pas approprié, s'agissant d'un UserForm qui, contrairement aux Forms de VB6, n'a pas de propriété FontTransparent. Utilise plutôt DrawText
3) la persistance de ton dessin (le texte est un dessin) ne sera pas assurée sur un UserForm

Pou ce qui est du 1) : j'ai déposé très récemment un outil permettant des conversions . Tu devras t'en servir

Ce sera tout, en ce qui me concerne. Je n'irai pas plus loin dans cette démarche.



____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'e
Commenter la réponse de ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
0
Merci
Ah oui, pardon : ton autre petit problème ===>>
Il va te falloir bûcher et utiliser également La fonction CreateFontIndirect de l'Api de Windows, en conjonction avec la fonction SelectObject.
Mais aussi déterminer le point d'insertion (équivalent de CurrentX et CurrentY de VB6).
Quand tu fera tes essais : "promène" ton userform au-delà des bornes de ton écran et remets-le à sa place ===>> tu vas comprendre ce que j'entendais dans mon premier message par "persistance non assurée"... (Excel n'est pas fait pour ce genre de traitement )
Voilà.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'e
Commenter la réponse de ucfoutu
Messages postés
693
Date d'inscription
samedi 18 mai 2002
Dernière intervention
17 avril 2017
0
Merci
Bonjour ucfoutu,

Merci d'avoir fait une exception à tes convictions !
L'API SetBkMode me convient parfaitement, je viens d'en faire l'essai. Je vais maintenant me pencher sur CreateFontIndirect.

Oui, je sais bien qu'Excel n'est pas fait pour cela, mais je voulais apporter un petit plus à la présentation de l'USF. L'idée initiale était de mettre une image de boussole sur laquelle j'aurais juste tracé l'aiguille indiquant l'azimut souhaité.

Quant à la "persistance", j'avais effectivement remarqué que la partie du tracé sortie de l'écran s'effaçait. Ben oui, pas d'AutoRedraw pour les USF !

Merci encore et bonne journée.

Cheyenne
Commenter la réponse de cs_cheyenne

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.