Excel 2007 - Texte sur UserForm [Résolu]

Signaler
Messages postés
693
Date d'inscription
samedi 18 mai 2002
Statut
Membre
Dernière intervention
17 avril 2017
-
Messages postés
693
Date d'inscription
samedi 18 mai 2002
Statut
Membre
Dernière intervention
17 avril 2017
-
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

4 réponses

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
229
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
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
229
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
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
229
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
Messages postés
693
Date d'inscription
samedi 18 mai 2002
Statut
Membre
Dernière intervention
17 avril 2017
2
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