Texte en vertical ou diagonal

Résolu
cs_WSAL74 Messages postés 10 Date d'inscription mardi 1 mars 2005 Statut Membre Dernière intervention 13 avril 2007 - 19 mars 2007 à 18:10
cs_WSAL74 Messages postés 10 Date d'inscription mardi 1 mars 2005 Statut Membre Dernière intervention 13 avril 2007 - 13 avril 2007 à 17:55
Bonjour à tous et toutes

voila je suis nouveau en VB mais expérimenté en VBA, j'ai en cours un projet d'un jeu dans lequel j'ai besoin de mettre du texte en vertical, diagonal et horizontal.  Ces textes sont personnalisable.

Pour ce qui est des textes horizotal (aux je c'est pas ;-) ) je pensait utilisé un simple label mais pour le reste cela ce complique.. Exicte-t-il un controls avec la possibilité de régler l'orientation du texte ci oui lequel et ou le trouver????

Ce controls n'est que de l'affichage de texte il n'aura aucune fonction autre.

Je suis sur VB6.0 en anglais de base.

Merci d'avance.

Will ;-)

16 réponses

cs_Exploreur Messages postés 4821 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 15
19 mars 2007 à 18:14
Salut,

Va voir sur cette page, tu trouvera sûrement ton bonheur....

A+
Exploreur

 
3
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
19 mars 2007 à 18:22
Bonjour,

Aucun contrôle ne possède, "en soi" une propriété permettant l'orientation du texte qu'il affiche

Il Te faudra donc soit afficher directement sur la Form, soit dans une pictureBox, soit enfin en donnant à un contrôle ayant sa propriété Style à Graphical une propriété Picture correspondant à une picturebox invisibe dans laquelle tu aurais pré-dessiné ton texte et dont les dimentions seraient identiqsues à celles de ton contrôle.

Pour y parvenir, il te faut passer par des fonctions de l'API de windows...
Tu dis que tu es nouveau en VB6... et je ne suis pas certain que ce soit là la meilleure façon de débuter...

Si tu y tiens toutefois vraiment, je te donnerai le code à écrire pour provoquer une "rotation" de texte. Il te faudra le comprendre et en extirper et adapter ce qui t'intéresse... ce ne sera pas facile, facile, toutefois, pour un débutant !
3
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
19 mars 2007 à 18:59
Non, celà ne gêne pas.

Valide la réponse d'Exploreur car je vois mal quelle autre réponse serait meilleure.
3
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
19 mars 2007 à 19:18
peut-être en changeant les coordonnées du monde.

Const GM_ADVANCED As Long = 2

Private Type XForm
    eM11 As Single
    eM12 As Single
    eM21 As Single
    eM22 As Single
    eDx As Single
    eDy As Single
End Type

Private Type RectAPI
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
End Type

Private Type PointAPI
    X As Long
    Y As Long
End Type

Private Declare Function SetViewportOrgEx Lib "gdi32" (ByVal hDC As Long, ByVal nX As Long, ByVal nY As Long, lpPoint As PointAPI) As Long
Private Declare Function SetGraphicsMode Lib "GDI32.dll" (ByVal hDC As Long, ByVal iMode As Long) As Long
Private Declare Function GetWorldTransform Lib "GDI32.dll" (ByVal hDC As Long, ByRef lpXform As XForm) As Long
Private Declare Function SetWorldTransform Lib "GDI32.dll" (ByVal hDC As Long, ByRef lpXform As XForm) As Long

Private Sub Command1_Click()
    Const Pi      As Single = 3.14159
    Dim RotAng    As Single
    Dim RotRad    As Single
    Dim WndArea   As RectAPI
    Dim OldOrg    As PointAPI
    Dim OldMode   As Long
    Dim OldXForm  As XForm
    Dim MyXForm   As XForm
   
    OldMode = SetGraphicsMode(Me.hDC, GM_ADVANCED)
   
    Call SetViewportOrgEx(Me.hDC, 100, 100, OldOrg)

    RotAng = 0
    RotRad = (RotAng / 180) * Pi
    MyXForm.eM11 = Cos(RotRad)
    MyXForm.eM12 = Sin(RotRad)
    MyXForm.eM21 = -MyXForm.eM12
    MyXForm.eM22 = MyXForm.eM11
    Call SetWorldTransform(Me.hDC, MyXForm)
    Me.CurrentX = 20
    Me.CurrentY = -7
    Me.Print "0 degré"

    RotAng = 60
    RotRad = (RotAng / 180) * Pi
    MyXForm.eM11 = Cos(RotRad)
    MyXForm.eM12 = Sin(RotRad)
    MyXForm.eM21 = -MyXForm.eM12
    MyXForm.eM22 = MyXForm.eM11
    Call SetWorldTransform(Me.hDC, MyXForm)
    Me.CurrentX = 20
    Me.CurrentY = -7
    Me.Print "60 degrés"

    RotAng = 120
    RotRad = (RotAng / 180) * Pi
    MyXForm.eM11 = Cos(RotRad)
    MyXForm.eM12 = Sin(RotRad)
    MyXForm.eM21 = -MyXForm.eM12
    MyXForm.eM22 = MyXForm.eM11
    Call SetWorldTransform(Me.hDC, MyXForm)
    Me.CurrentX = 20
    Me.CurrentY = -7
    Me.Print "120 degrés"

    RotAng = 180
    RotRad = (RotAng / 180) * Pi
    MyXForm.eM11 = Cos(RotRad)
    MyXForm.eM12 = Sin(RotRad)
    MyXForm.eM21 = -MyXForm.eM12
    MyXForm.eM22 = MyXForm.eM11
    Call SetWorldTransform(Me.hDC, MyXForm)
    Me.CurrentX = 20
    Me.CurrentY = -7
    Me.Print "180 degrés"

    RotAng = 240
    RotRad = (RotAng / 180) * Pi
    MyXForm.eM11 = Cos(RotRad)
    MyXForm.eM12 = Sin(RotRad)
    MyXForm.eM21 = -MyXForm.eM12
    MyXForm.eM22 = MyXForm.eM11
    Call SetWorldTransform(Me.hDC, MyXForm)
    Me.CurrentX = 20
    Me.CurrentY = -7
    Me.Print "240 degrés"

    RotAng = 300
    RotRad = (RotAng / 180) * Pi
    MyXForm.eM11 = Cos(RotRad)
    MyXForm.eM12 = Sin(RotRad)
    MyXForm.eM21 = -MyXForm.eM12
    MyXForm.eM22 = MyXForm.eM11
    Call SetWorldTransform(Me.hDC, MyXForm)
    Me.CurrentX = 20
    Me.CurrentY = -7
    Me.Print "300 degrés"

End Sub

Daniel
3

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
19 mars 2007 à 20:28
t'es sûr que c'est une PictureBox ???
je pensais qu'il n'y en avait pas en VBA
l'exemple ci-dessus était sur la forme directement
sinon il faut un contrôle avec un hdc, et changer Me par le nom de ton controle:
    Me.hDc, Me.CurrentX, Me.CurrentY, Me.Print
bien chosir l'origine du monde en fonction de tes besoins:
    Call SetViewportOrgEx(Me.hDC, 100, 100, OldOrg)
    le point 100,100 (en pixels) devient la nouvelle origine.

Daniel
3
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
19 mars 2007 à 21:01
oui il y a une autre méthode avec les APi, il faut créer sa police avec CreateFont
mais je la trouve plus compliquée et je préfère passer par les coordonnées du monde (ça s'appelle comme ça)
ça marche avec tout ce qui est graphique, même avec les images
ne pas oublier de mettre AutoDraw à True.

Daniel
3
cs_WSAL74 Messages postés 10 Date d'inscription mardi 1 mars 2005 Statut Membre Dernière intervention 13 avril 2007
19 mars 2007 à 18:39
Tous d'abord merci à jmfmarques et à exploreur.

En faite je vais être un peu plus précis. Je crée pour le fun une variante du monopoly je veux que le joueur puisse par exemple créer un plateau avec les rue de sa ville ou sont patelin perdu s'il le souhaite (le tous bien evidement à des fin non commercial). Ces réglage sont stocker dans une feuille excel. j'ai déja bien avancé le projet en code VBA mais j'ai bloquer sur le même problème en VBA et n'est pas trouver de solutions.

jmfmarques  :

Je n'est pas trés bien compris ce que tu voulais dire par :

Il Te faudra donc soit afficher directement sur la Form, soit dans une pictureBox, soit enfin en donnant à un contrôle ayant sa propriété Style à Graphical une propriété Picture correspondant à une picturebox invisibe dans laquelle tu aurais pré-dessiné ton texte et dont les dimentions seraient identiqsues à celles de ton contrôle.

exploreur :

Merci beaucoup je vais essayer de comprendre et de tester.

A+
0
cs_WSAL74 Messages postés 10 Date d'inscription mardi 1 mars 2005 Statut Membre Dernière intervention 13 avril 2007
19 mars 2007 à 18:43
Re--

JE ne sais pas si j'accepte les deux réponses donnée, d'autre pourront-ils me données des info??

Car j'accepte ces deux méthodes..

Désolé mais je sais pas comment faire pour éditer un message.

A+ et encore merci à tous
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
19 mars 2007 à 18:45
Holà !

C'est seulement maintenant que tu nous dis développer sous VBA !!!!
Alors : oublie donc tout ce qui a été dit précédemment (le lien d'exploreur et mon baratin).

A moins, sous VBA, de te lancer dans du super compliqué, tu n'y parviendras pas avec ce qui t'a été dit; c'est sur !

IL EST IMPORTANT DE "POSTER" DANS LA BONNE SECTION (tu t'en rends maintenant bien compte)


Regarde si tu peux t'arranger avec l'insertion d'un objet OLE tel WordArt.


Bonne chance.
0
cs_WSAL74 Messages postés 10 Date d'inscription mardi 1 mars 2005 Statut Membre Dernière intervention 13 avril 2007
19 mars 2007 à 18:57
Re-

J'ai choisit de passer sous VB plutot que sous VBA pour la souplesse d'utilisation des fonction de redimentionnement de fenêtre. Je me suis dit que cela me permettrai en plus de m'aider à utilisé un nouveau language (pas si différent d'ailleur.) Comme je l'ai dit plus haut c'est pour le fun pas pour la simplicité car infograme à déja créer cela avec des pions animé et tous.

C'est vraiment par plaisir sadic envers mes méninges que je fait cela.

JE ne sais pas si je vais m'en sortir mais bon on verra bien..

En tous cas merci de votre patience et de votre temps. AU fait pour ce qui est de l'accepation, cela géne pour poster d'autre message ou pas?

Will ;-)
0
cs_WSAL74 Messages postés 10 Date d'inscription mardi 1 mars 2005 Statut Membre Dernière intervention 13 avril 2007
19 mars 2007 à 20:16
Salut daniel

Merci pour ce bout de code j'ai pas tous compris mais je l'est essayer sur mon projet.

J'affiche mon plateau dans une picturebox avec toutes les cases et les icones standards et mes essais avec ta méthode ce retrouve sous le dessins...

Mais je garde l'idée de coté... au cas ou.

A+ WIll ;-)
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
19 mars 2007 à 20:34
WSAL,


Dans son exemple, Daniel dessine sur la Form ( Me ).


Si tu dessines dans une pictureBox Picture1, rempleca Me par Picture1.
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
19 mars 2007 à 20:35
Bonsoir Daniel,

Uk développe finalement sous VB (a abandonné son idée de VBA)
0
cs_WSAL74 Messages postés 10 Date d'inscription mardi 1 mars 2005 Statut Membre Dernière intervention 13 avril 2007
19 mars 2007 à 20:48
Merci à tous les deux pour vos remarques.

Je vais tester avec ses modifications que je n'avait pas compris (fonction HDC et origine du monde.

Je vous tiens informer de la suite.

Pour info : dans le liens d'exploreur j'ai trouver des labelext et un ocx qui les fonts mais j'ai pas encore eu le temps de tester...

A+
0
cs_WSAL74 Messages postés 10 Date d'inscription mardi 1 mars 2005 Statut Membre Dernière intervention 13 avril 2007
20 mars 2007 à 19:40
Salut daniel et les autres

Désolé pour la réponse tardive mais hier j'avais les yeux explosé a force de lire du code...

Je pense que je vais essayer avec les coordonnées de monde et la fonction print.

Si d'autre on des idées car mon "usine à gaz" rique d'être très lourde en memoire et en gestion mais bon j'ai tendance naturellement à me compliquer la vie et à "utilisé le rouleau comprésseur pour tuer la mouche là où suffirait la tapette" comme on dit.

Encore merci à tous pour votre aide.

Will ;-)
0
cs_WSAL74 Messages postés 10 Date d'inscription mardi 1 mars 2005 Statut Membre Dernière intervention 13 avril 2007
13 avril 2007 à 17:55
Salut à tous


Bon voilà j'ai réussi à m'en sortir avec ces coordonnées de monde mais
ce n'était pas facile car la position relative du premier caractére
dépend de l'angle.


Enfin le plus important c'est d'avoir réussi.


Encore un grand merci à tous pour vos conseils.


Wilfried
0
Rejoignez-nous