Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > IHM
IHM Ce forum est dédié aux questions relatives à la création de formulaires et d'états, avec ou sans code VBA, et macros.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 27/05/2011, 12h05   #1
Candidat au titre de Membre du Club
 
Inscription : février 2007
Messages : 41
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 41
Points : 12
Points : 12
Par défaut Gdi+, Trait mis en forme clGDIPLUS

Bonjour

Dans une précédente discussion (20/05/2011), J'ai obtenu une modif de la classe clgdi32 qui me permettait de moduler la longueur des tirets, est-il possible d'avoir la même modif mais avec clGdiPlus cette fois.

merci d'avance
thermo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/05/2011, 13h59   #2
Responsable Access
 
Avatar de Arkham46
 
Inscription : septembre 2003
Messages : 4 300
Détails du profil
Informations personnelles :
Localisation : France, Loiret (Centre)

Informations forums :
Inscription : septembre 2003
Messages : 4 300
Points : 7 939
Points : 7 939
Citation:
Envoyé par thermo Voir le message
Bonjour

Dans une précédente discussion (20/05/2011), J'ai obtenu une modif de la classe clgdi32 qui me permettait de moduler la longueur des tirets, est-il possible d'avoir la même modif mais avec clGdiPlus cette fois.

merci d'avance
ça y est dans la précédente discussion :
http://www.developpez.net/forums/d10...e/#post5989758
__________________
Assistant de création/modification de rubans Office
Utilisez en VBA les librairies graphiques GDI, GDI+ et openGL

Blog Office Mon Site DVP
Arkham46 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/05/2011, 16h13   #3
Candidat au titre de Membre du Club
 
Inscription : février 2007
Messages : 41
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 41
Points : 12
Points : 12
Par défaut Gdi+, Trait mis en forme clGDIPLUS

Bonjour thierry

J'ai refais mon prog avec clGdiPlus.
dans notre précédente discussion,Il y a bien la modif clGdiPlus pour obtenir différents types de tirets; Donc ça, ça marche.
Mais la modif pour obtenir différentes longueurs de tirets que tu m'a donnée est pour la clGdi32. De toutes façon, je ne trouve pas la ligne
LnewPen = ExtCreatePen (Etc... que je doit remplacer donc je suppose que la modif pour clGdiPlus est <> de ClGdi32

A plus j'espère.
thermo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/05/2011, 16h53   #4
Responsable Access
 
Avatar de Arkham46
 
Inscription : septembre 2003
Messages : 4 300
Détails du profil
Informations personnelles :
Localisation : France, Loiret (Centre)

Informations forums :
Inscription : septembre 2003
Messages : 4 300
Points : 7 939
Points : 7 939
Citation:
Envoyé par thermo Voir le message
Mais la modif pour obtenir différentes longueurs de tirets que tu m'a donnée est pour la clGdi32.
effectivement...

Ajouter la déclaration de GdipSetPenDashArray sous la déclaration de GdipSetPenDashStyle (il y a deux endroits différents)

Code :
1
2
3
4
 
Private Declare PtrSafe Function GdipSetPenDashStyle Lib "gdiplus" (ByVal pen As LongPtr, ByVal dStyle As Long) As Long
' Ajouter la ligne ci-dessous
Private Declare PtrSafe Function GdipSetPenDashArray Lib "gdiplus" (ByVal pen As LongPtr, dash As Single, ByVal count As Long) As Long
Code :
1
2
3
Private Declare Function GdipSetPenDashStyle Lib "gdiplus" (ByVal Pen As Long, ByVal dStyle As Long) As Long
' Ajouter la ligne ci-dessous
Private Declare Function GdipSetPenDashArray Lib "gdiplus" (ByVal Pen As Long, dash As Single, ByVal count As Long) As Long
Modifier les déclarations de DrawLine, ImageListDrawLine, et PrivDrawLine :
Code :
1
2
3
4
5
#If VBA6 Then
Public Function DrawLine(ByVal pX1 As Long, ByVal pY1 As Long, ByVal pX2 As Long, ByVal pY2 As Long, Optional pPenColor As Long = 0, Optional pPenWidth As Long = 1, Optional pDash As Variant, Optional pAlpha As Integer = 255, Optional ByVal pArrowLength As Long, Optional pStartAndEnd As EGdipLineCap) As Boolean
#Else
Public Function DrawLine(ByVal pX1 As Long, ByVal pY1 As Long, ByVal pX2 As Long, ByVal pY2 As Long, Optional pPenColor As Long = 0, Optional pPenWidth As Long = 1, Optional pDash As Variant, Optional pAlpha As Integer = 255, Optional ByVal pArrowLength As Long, Optional pStartAndEnd As Long) As Boolean
#End If
Code :
1
2
3
4
5
#If VBA6 Then
Public Function ImageListDrawLine(PImage As String, ByVal pX1 As Long, ByVal pY1 As Long, ByVal pX2 As Long, ByVal pY2 As Long, Optional pPenColor As Long = 0, Optional pPenWidth As Long = 1, Optional pDash As Variant, Optional pAlpha As Integer = 255, Optional pArrowLength As Long, Optional pStartAndEnd As EGdipLineCap) As Boolean
#Else
Public Function ImageListDrawLine(PImage As String, ByVal pX1 As Long, ByVal pY1 As Long, ByVal pX2 As Long, ByVal pY2 As Long, Optional pPenColor As Long = 0, Optional pPenWidth As Long = 1, Optional pDash As Variant, Optional pAlpha As Integer = 255, Optional pArrowLength As Long, Optional pStartAndEnd As Long) As Boolean
#End If
Code :
1
2
 
Private Function PrivDrawLine(ByVal pX1 As Long, ByVal pY1 As Long, ByVal pX2 As Long, ByVal pY2 As Long, Optional pPenColor As Long = 0, Optional pPenWidth As Long = 1, Optional pDash As Variant, Optional pAlpha As Integer = 255, Optional pArrowLength As Long, Optional pStartAndEnd As Long, Optional PImage As String = "") As Boolean
Dans PrivDrawLine, remplacer :
Code :
1
2
3
 
    ' Pointilles
    If pDash Then GdipSetPenDashStyle lPen, 1
Par :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
    ' Pointilles
    If Not IsMissing(pDash) Then
        If IsArray(pDash) Then
            Dim lcpt As Long
            ReDim ldash(LBound(pDash) To UBound(pDash)) As Single
            For lcpt = LBound(pDash) To UBound(pDash)
                ldash(lcpt) = pDash(lcpt)
            Next
            GdipSetPenDashArray lPen, ldash(LBound(ldash)), UBound(ldash) - LBound(ldash) + 1
        Else
            GdipSetPenDashStyle lPen, pDash
        End If
    End If
pDash peut alors être un tableau :
Code :
o.DrawLine 10, 10, 300, 10, vbBlue, 2, Array(20, 5, 10, 5)
Attention : les valeurs sont exprimées par rapport à la taille du trait.
Ici avec un trait de 2 px de large ce sera 40px, 10px, 20px, 10px
__________________
Assistant de création/modification de rubans Office
Utilisez en VBA les librairies graphiques GDI, GDI+ et openGL

Blog Office Mon Site DVP
Arkham46 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 29/05/2011, 18h19   #5
Candidat au titre de Membre du Club
 
Inscription : février 2007
Messages : 41
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 41
Points : 12
Points : 12
Par défaut Gdi+ format de trait

Merci thierry

j'ai pu récupérer mon prog avec la classe gdi+. C'est nickel

J'attends maintenant que tu t' intéresses aux splines pour que je puisse l'utiliser dans mes schémas pour mes exercices de foot.
Je surveille de prés tes prochaines productions

A plus et encore merci.
thermo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/05/2011, 10h00   #6
Responsable Access
 
Avatar de Arkham46
 
Inscription : septembre 2003
Messages : 4 300
Détails du profil
Informations personnelles :
Localisation : France, Loiret (Centre)

Informations forums :
Inscription : septembre 2003
Messages : 4 300
Points : 7 939
Points : 7 939
Pour les cardinals :

Ajouter la déclaration de GdipAddPathCurve2I sous la déclaration de GdipAddPathBeziersI (il y a deux endroits différents)

Code :
1
2
3
4
 
Private Declare PtrSafe Function GdipAddPathBeziersI Lib "gdiplus" (ByVal path As LongPtr, Points As POINTAPI, ByVal count As Long) As Long
' Ajouter la ligne ci-dessous
Private Declare PtrSafe Function GdipAddPathCurve2I Lib "gdiplus" (ByVal path As LongPtr, Points As POINTAPI, ByVal count As Long, ByVal tension As single) As long
Code :
1
2
3
4
 
Private Declare Function GdipAddPathBeziersI Lib "gdiplus" (ByVal path As Long, Points As POINTAPI, ByVal count As Long) As Long
' Ajouter la ligne ci-dessous
Private Declare Function GdipAddPathCurve2I Lib "gdiplus" (ByVal path As Long, Points As POINTAPI, ByVal count As Long, ByVal tension As Single) As Long
Modifier la déclaration de PrivDrawPolygon :
Code :
Private Function PrivDrawPolygon(pPoints As Variant, Optional pBackColor As Long = -1, Optional pPenColor As Long = 0, Optional pPenWidth As Long = 1, Optional pDash As Boolean, Optional pAlpha As Integer = 255, Optional PImage As String = "", Optional pRegion As String = "", Optional pBezier As Boolean, Optional pOnlyCreateRegion As Boolean, Optional pCardinal As Boolean, Optional pTension As Single) As Boolean
Dans PrivDrawPolygon, remplacer :
Par :
Code :
1
2
3
4
 
    If pCardinal Then
        GdipAddPathCurve2I lPath, lPolyPoints(0), UBound(lPolyPoints) + 1, pTension
    ElseIf pBezier Then
Ajouter la fonction DrawCardinal (après la fonction DrawCurve par exemple) :
Code :
1
2
3
4
 
Public Function DrawCardinal(pPoints As Variant, Optional pTension As Single = 0.5, Optional pBackColor As Long = -1, Optional pPenColor As Long = 0, Optional pPenWidth As Long = 1, Optional pDash As Boolean, Optional pAlpha As Integer = 255, Optional pRegion As String = "") As Boolean
    DrawCardinal = PrivDrawPolygon(pPoints, pBackColor, pPenColor, pPenWidth, pDash, pAlpha, , pRegion, , , True, pTension)
End Function
si je n'ai rien oublié :
Code :
o.DrawCardinal Array(10, 10, 100, 100, 150, 10, 200, 100), 0.5
le deuxième paramètre est la tension : à 0, ça dessine des segments

c'est une modif un peu à l'arrache mais ça marche
pour les prochaines versions j'essayerai d'intégrer les pointillés personnalisés et les cardinales splines mais ça devient une usine à gaz
__________________
Assistant de création/modification de rubans Office
Utilisez en VBA les librairies graphiques GDI, GDI+ et openGL

Blog Office Mon Site DVP
Arkham46 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/05/2011, 12h19   #7
Candidat au titre de Membre du Club
 
Inscription : février 2007
Messages : 41
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 41
Points : 12
Points : 12
Par défaut Gdi+ format de trait

Bonjour thierry

J'apprécie une fois de plus ta rapidité. Je n'ai pas encore testé la modif, mais il me faut absolument les différents pointillés.
Un joueur qui se déplace sans ballon est représenté par des tirets espaces tirets.
un joueur avec ballon, c'est tiret espace point . Les lignes continues sont pour les passes.
J'ai même du faire de savants calculs (pour moi) pour dessiner des flèches au bout de chaque courbe de bezier (non prévu dans ta classe).
Donc il me faut vraiment les pointillés.
Mais rien ne presse et puis j'ai vraiment l'impression que tu es sur tous les fronts avec cet excellent site.
Au fait,Y a t'il une façon de savoir si une réponse est ajoutée à une discussion particulière sans aller chaque fois la rechercher.

A plus si tu as le temps.
thermo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/05/2011, 12h53   #8
Responsable Access
 
Avatar de Arkham46
 
Inscription : septembre 2003
Messages : 4 300
Détails du profil
Informations personnelles :
Localisation : France, Loiret (Centre)

Informations forums :
Inscription : septembre 2003
Messages : 4 300
Points : 7 939
Points : 7 939
bjr,

pour retrouver tes discussions, va dans le tableau de bord (lien en haut à gauche)

sinon pour les pointillés sur les courbes, il faut faire la même manip que pour les lignes, à savoir la modif de pDash en variant (sur la déclaration des fonctions PrivDrawPolygon, *DrawCurve, *DrawPolygon), et modifier PrivDrawPolygon comme PrivDrawLine pour l'appel à GdipSetPenDashStyle

Pour les flèches, gdi+ le gère très bien.

Je propose un ajout de 2 paramètres StartArrowLength et EndArrowLength :
(pour simplifier la modif parce que les fonctions commencent à contenir beaucoup de paramètres...)

Sous :
Code :
1
2
 
Public DrawWithoutTransparency As Boolean    ' Dessin des images sans transparence (plus rapide si pas besoin de transparence)
Ajouter :
Code :
1
2
3
 
Public StartArrowLength As Single
Public EndArrowLength As Single
Sous :
Code :
Private Declare PtrSafe Function GdipSetPenEndCap Lib "gdiplus" (ByVal pen As LongPtr, ByVal endCap As Long) As Long
Ajouter :
Code :
1
2
3
4
Private Declare PtrSafe Function GdipCreateAdjustableArrowCap Lib "gdiplus" (ByVal Height As Single, ByVal Width As Single, ByVal isFilled As Long, cap As Longptr) As Long
Private Declare PtrSafe Function GdipSetPenCustomStartCap Lib "gdiplus" (ByVal pen As Longptr, ByVal customCap As Longptr) As Long
Private Declare PtrSafe Function GdipSetPenCustomEndCap Lib "gdiplus" (ByVal pen As Longptr, ByVal customCap As Longptr) As Long
Private Declare PtrSafe Function GdipDeleteCustomLineCap Lib "gdiplus" (ByVal customCap As Longptr) As Long
Sous :
Code :
Private Declare Function GdipSetPenEndCap Lib "gdiplus" (ByVal Pen As Long, ByVal endCap As Long) As Long
Ajouter :
Code :
1
2
3
4
5
 
Private Declare Function GdipCreateAdjustableArrowCap Lib "gdiplus" (ByVal Height As Single, ByVal Width As Single, ByVal isFilled As Long, cap As Long) As Long
Private Declare Function GdipSetPenCustomStartCap Lib "gdiplus" (ByVal Pen As Long, ByVal customCap As Long) As Long
Private Declare Function GdipSetPenCustomEndCap Lib "gdiplus" (ByVal Pen As Long, ByVal customCap As Long) As Long
Private Declare Function GdipDeleteCustomLineCap Lib "gdiplus" (ByVal customCap As Long) As Long

dans PrivDrawPolygon (ou PrivDrawLine pour les lignes simples), ajouter sous le GdipSetPenDashStyle :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
        Dim lccap
        If StartArrowLength > 0 Then
            GdipCreateAdjustableArrowCap StartArrowLength, StartArrowLength, True, lccap
            GdipSetPenCustomStartCap lPen, lccap
            GdipDeleteCustomLineCap lccap
        End If
        If EndArrowLength > 0 Then
            GdipCreateAdjustableArrowCap EndArrowLength, EndArrowLength, True, lccap
            GdipSetPenCustomEndCap lPen, lccap
            GdipDeleteCustomLineCap lccap
        End If
(Mettre False au lieu de True pour des flèches non remplies)

Ensuite il suffit de définir StartArrowLength ou EndArrowLength (fonction de la taille du trait) avant de dessiner :
Code :
1
2
3
o.EndArrowLength = 5 ' flèche = 5 fois la taille du trait
o.DrawCardinal Array(10, 10, 100, 100, 150, 10, 200, 100), 2
o.EndArrowLength = 0 ' plus de flèche pour la suite
Gdi+ calcule tout seul l'inclinaison de la flèche
__________________
Assistant de création/modification de rubans Office
Utilisez en VBA les librairies graphiques GDI, GDI+ et openGL

Blog Office Mon Site DVP
Arkham46 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/05/2011, 19h21   #9
Candidat au titre de Membre du Club
 
Inscription : février 2007
Messages : 41
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 41
Points : 12
Points : 12
Par défaut Gdi+, Trait mis en forme clGDIPLUS

rebonjour

C'est Ok Pour la spline, par contre la fleche ne s'affiche pas.
J'ai bien placé dans privDrawpolygone et privdrawline sous
"GdipSetPenDashStyle lPen, pDash" le code que tu m'a donné, mais comme ça parle de Pdash, je me demande si c'est le bon endroit. Peux-tu me confirmer SVP s'il n'y a pas d'erreur?

A plus
thermo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/05/2011, 20h01   #10
Responsable Access
 
Avatar de Arkham46
 
Inscription : septembre 2003
Messages : 4 300
Détails du profil
Informations personnelles :
Localisation : France, Loiret (Centre)

Informations forums :
Inscription : septembre 2003
Messages : 4 300
Points : 7 939
Points : 7 939
Citation:
Envoyé par thermo Voir le message
C'est Ok Pour la spline, par contre la fleche ne s'affiche pas.
J'ai bien placé dans privDrawpolygone et privdrawline sous
"GdipSetPenDashStyle lPen, pDash" le code que tu m'a donné, mais comme ça parle de Pdash, je me demande si c'est le bon endroit
c'est sous le pavé :
Code :
1
2
3
4
 
If Not IsMissing(pDash) Then
[...]
End If
qu'il faut mettre le code pour la flèche
__________________
Assistant de création/modification de rubans Office
Utilisez en VBA les librairies graphiques GDI, GDI+ et openGL

Blog Office Mon Site DVP
Arkham46 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/05/2011, 21h48   #11
Candidat au titre de Membre du Club
 
Inscription : février 2007
Messages : 41
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 41
Points : 12
Points : 12
Par défaut Gdi+, Trait mis en forme clGDIPLUS

Merci thierry

Ok pour la spline avec la flèche

Je mets tout ça comme il faut et peut être qu'on pourrait en faire un tutoriel.
D'autres seraient peut être intéressé.

A plus
thermo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2011, 13h21   #12
Responsable Access
 
Avatar de Arkham46
 
Inscription : septembre 2003
Messages : 4 300
Détails du profil
Informations personnelles :
Localisation : France, Loiret (Centre)

Informations forums :
Inscription : septembre 2003
Messages : 4 300
Points : 7 939
Points : 7 939
Citation:
Envoyé par thermo Voir le message
Je mets tout ça comme il faut et peut être qu'on pourrait en faire un tutoriel.
D'autres seraient peut être intéressé.
si tu penses que d'autres peuvent être intéressés, tu peux toujours commencer par mettre ton appli sur le forum Contribuez

ensuite il faudrait que j'intègre les fonctionnalités de pointillés peronnalisés et de flèches aux classes mais en ce moment je réfléchis à tout ré-écrire parce que ça devient trop difficile à maintenir (et sans doute à utiliser vu la multiplication des paramètres et propriétés pour certaines fonctions)
__________________
Assistant de création/modification de rubans Office
Utilisez en VBA les librairies graphiques GDI, GDI+ et openGL

Blog Office Mon Site DVP
Arkham46 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2011, 15h45   #13
Candidat au titre de Membre du Club
 
Inscription : février 2007
Messages : 41
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 41
Points : 12
Points : 12
Par défaut Gdi+, Trait mis en forme clGDIPLUS

Bonjour thierry

Je vais mettre mon application au propre car je dois faire le tri entre tes améliorations et mes erreurs. Elle ne réagit pas toujours comme je voudrais, mais ça je commence à maitriser. Ensuite j’essaierai de faire quelque chose de simple à mettre sur le forum. Pour les flèches, c'est vrai que ce triangle n'est pas terrible (j'utilise une autre pointe avec world pour mes schémas) donc si tu fais la modif, je l'utiliserai volontier. Peut être pourras-tu me prévenir par mail? Et puis bon courage si tu refais ta classe

A plus
thermo est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h03.


 
 
 
 
Partenaires

Hébergement Web