Gdi+ Rotate font

Résolu
Messages postés
232
Date d'inscription
mercredi 25 octobre 2000
Statut
Membre
Dernière intervention
5 octobre 2012
-
Messages postés
232
Date d'inscription
mercredi 25 octobre 2000
Statut
Membre
Dernière intervention
5 octobre 2012
-
Avé !
Je bidouille en vain pour parvenir à maitriser la rotation d'un texte avec GDI Plus, voici la fonction (qui marche pas pour la rotation => coordonnées ). Vous avez une idée ? merci

Public Sub DrawPrint2(ByRef oDest As Object, ByVal hdc As Long, ByVal Texte As String, ByVal x As Long, ByVal y As Long, _
                    ByVal FontColor As Long, ByVal Gras As Boolean, _                    Optional ByVal lWidth As Long 200, Optional ByVal lHeight As Long 50, _                    Optional ByVal Gauche As Boolean True, Optional ByVal Italic As Boolean False, Optional ByVal lSize As Long = 13, Optional ByVal lAngle As Long, _
                    Optional ByVal bAlignLibelleLeft As Boolean = False)
    '
    If Texte = vbNullString Then Exit Sub


    Dim hGraphics As Long
    Dim hFontFamily As Long
    Dim hFont As Long
    Dim hBrush As Long
    Dim hStringFormat As Long
    Dim lpR As GpRECTF
    Dim lpR2 As GpRECTF
    Dim eFontStyle As GpFontStyle


    GdipCreateFromHDC hdc, hGraphics


    GdipCreateSolidFill ByVal FontColor, hBrush
    GdipCreateFontFamilyFromName "Calibri", 0, hFontFamily
   
    If Gras Then
        If Italic Then
            eFontStyle = FontStyleBoldItalic
        Else
            eFontStyle = FontStyleBold
        End If
    Else
        If Italic Then
            eFontStyle = FontStyleItalic
        Else
            eFontStyle = FontStyleRegular
        End If
       
    End If
   
    If lAngle <> 0 Then
        GdipTranslateWorldTransform hGraphics, x * 3, y * 2, MatrixOrderPrepend
        GdipRotateWorldTransform hGraphics, -lAngle, 0 'MatrixOrderAppend
    End If
   
    GdipCreateFont hFontFamily, lSize, eFontStyle, UnitPixel, hFont
   
   
   
    GdipCreateStringFormat 0, 0, hStringFormat
   
    lpR.left = x
    lpR.top = y
    lpR.Width = lWidth
    lpR.Height = lHeight
 
    'GdipMeasureString hGraphics, StrConv(Texte, vbUnicode), -1, hFont, lpR, hStringFormat, lpR, 0, 0
    GdipSetTextRenderingHint hGraphics, TextRenderingHintAntiAliasGridFit
    GdipDrawString hGraphics, Texte, -1, hFont, lpR, hStringFormat, hBrush


    GdipDeleteStringFormat hStringFormat
    GdipDeleteFont hFont
    GdipDeleteFontFamily hFontFamily
    GdipDeleteBrush hBrush
    GdipDeleteGraphics hGraphics
End Sub

13 réponses

Messages postés
17287
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
73
salut l'ami

va voir ma source

http://www.vbfrance.com/codes/EXEMPLE-UTILISATION-GDI-DANS-VB6_39804.aspx

y'a un exemple d'utilisation de GdipTransformPoints

te permettra de passer les coordonnées de et vers le monde...
Messages postés
232
Date d'inscription
mercredi 25 octobre 2000
Statut
Membre
Dernière intervention
5 octobre 2012

Salut Maître !
Bon et bien que dire de plus... 

voici juste la modif...
    lpOrg.x = x
    lpOrg.y = y
    If lAngle <> 0 Then
        GdipRotateWorldTransform hGraphics, lAngle, MatrixOrderPrepend
        GdipTransformPoints hGraphics, CoordinateSpaceWorld, CoordinateSpaceDevice, lpOrg, 1
    End If

N'empêche y'a t il un truc que tu ne connaisses pas ?

Bon sinon, as-tu une mise à jour de Win32API.tlb ?
Car je ne sais pas créer les tlb... l'idéal serait que tu m'apprends ("on lui donne le beurre et il veut la crémière en plus" )
Allez super merci
Messages postés
232
Date d'inscription
mercredi 25 octobre 2000
Statut
Membre
Dernière intervention
5 octobre 2012

Messages postés
17287
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
73
que je ne connaisse pas ?

oh que oui ! et heureusement, ce serai triste, sans cela ^^ sans cesse en R&D

pour exemple, actuellement, je joues a générer des PDF

disons qu'on a des points d'intérêt croisés, et que je suis passé par la cas "je suis en GDI+ et je veux changer mes coordonnées" ^^
Messages postés
232
Date d'inscription
mercredi 25 octobre 2000
Statut
Membre
Dernière intervention
5 octobre 2012

oui, tu as 100 TGV d'avance avec 10 ans de mois, quelle horreur !

Coté PDF, j'ai trouvé cette source récemment que j'ai mis sous le coude : http://www.vbfrance.com/codes/SANZEREUR-CORRECTEUR-ORTHOGRAPHIQUE_40715.aspx
J'ai seulement regretté la structure du code mais ça marche.
Messages postés
17287
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
73
sympa.... mais le code coté PDF semble pire que celui de WSPDF, et ça n'est pas peu dire ^^
http://www.vbfrance.com/codes/WSPDF-CLASSE-GENERATION-FICHIER-PDF-SANS-OCX-NI_25958.aspx

le code semble rigide, avec les numéros des objets PDF en dur, etc.


En fait, je travaille depuis quelques années dans l'éditique. J'ai l'expérience de composeurs professionnels - rien a voir avec les Crystal Report et consorts, je parle de choses bien plus souples.
J'ai un point de vue enrichi par l'expérience, et j'ajoute des choses simples dans ma dll de génération PDF. Je ne pense pas livrer les sources, mais je vais voir pour en fournir l'usage libre pour les projets non commerciaux.

elle avance bien, et sera surement greffée à un module qui la pilote, afin de générer des états et autres correspondances.
Messages postés
232
Date d'inscription
mercredi 25 octobre 2000
Statut
Membre
Dernière intervention
5 octobre 2012

Quel entreprise, l'an passé j'ai passé je ne sais combien de mois pour maitrise l'impression à l"écran et sur le papier pour créer un aperçu avant impression digne de ce nom ! et mon prochain challange sera en effet de l'amélioré vers directement l'envoyer enb PDF, j'avais vu WSPDF mais je m'en souvenais plus et en effet pas photo
Messages postés
232
Date d'inscription
mercredi 25 octobre 2000
Statut
Membre
Dernière intervention
5 octobre 2012

Flute, je vient de me rendre compte que la rotation c'est pas bon ! grrrr

En fait j'essaie de faire comme une ombre du texte donc c'est un flipY... as-tu une idée l'a dessus ?
Messages postés
17287
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
73
flipY ? je ne te suis pas...

normallement, juste un peu de translation... (gaffe a l'ordre des transformations)
Messages postés
232
Date d'inscription
mercredi 25 octobre 2000
Statut
Membre
Dernière intervention
5 octobre 2012

Et bien faire une rotation sur l'axe Y => un effet miroir


J'ai essayé de trouver un exemple : bon y'a que ce :) : http://img248.imageshack.us/img248/3025/floflobetagl9.png
Messages postés
17287
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
73
ah, ok, comme tu parlais "d'ombre"

c'est un scale que tu cherches a faire, avec un Height négatif
Messages postés
232
Date d'inscription
mercredi 25 octobre 2000
Statut
Membre
Dernière intervention
5 octobre 2012

j'y avais pensé mais ca marche point : lpR.Height = -lHeight
Messages postés
232
Date d'inscription
mercredi 25 octobre 2000
Statut
Membre
Dernière intervention
5 octobre 2012

Hum, ça doit se faire sur de la transformation de matrice du genre:

  GdipCreateMatrix Matrix

  GdipScaleMatrix Matrix .....            

  GdipSetWorldTransform hGraphics, Matrix

Je vais laisser de côté pour le moment car là je m'aventure dans du complexe