OFFICE : Classe de gestion des images avec Gdi32

Thierry GASPERMENT

Module de classe VBA pour faciliter l'utilisation de la librairie graphique gdi32.dll (GDI)
Version actuelle : v1.7

- Titre : OFFICE : Classe de gestion des images avec Gdi32

- Auteur : Thierry GASPERMENT

- Parution : 16 octobre 2008

- Mise à jour : 11 janvier 2011

- Licence : Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2008 Thierry GASPERMENT. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Droits de diffusion permanents accordés à Developpez LLC.

Sommaire

- I. Introduction

- II. Remarques préalables

- II-A. Remarques

- II-B. Pré-requis

- II-C. Utilisation dans un UserForm

- III. Les fonctions de création et de sauvegarde de l'image principale

- III-A. OpenFile

- III-B. CloseFile

- III-C. CreateBitmap

- III-D. CreateBitmapForImage

- III-E. SaveFile

- IV. Autres fonctions de lecture / écriture de l'image principale

- IV-A. GetPixels

- IV-B. SetPixels

- IV-C. SetBitmap

- IV-D. GetBitmap

- IV-E. SetImageArray

- IV-F. GetImageArray

- IV-G. LoadBitmapFromControl

- IV-H. GetIPictureDisp

- V. Les fonctions de modification de l'image principale

- V-A. ReplaceColor

- V-B. FillColor

- V-C. Resize

- V-D. Crop

- V-E. Rotate

- VI. Les fonctions de dessin

- VI-A. DrawPixel

- VI-B. DrawLine

- VI-C. DrawRectangle

- VI-D. DrawRoundRectangle

- VI-E. DrawEllipse

- VI-F. DrawPolygon

- VI-G. DrawCurve

- VI-H. DrawSVG

- VI-I. DrawText

- VI-J. DrawImage

- VIII. Les fonctions pour gérer la liste d'images secondaires

- VIII-A. ImageListNew

- VIII-B. ImageListAdd

- VIII-C. ImageListAddBitmap

- VIII-D. ImageListAddRect

- VIII-E. ImageListAddFromControl

- VIII-F. ImageListAddFromArray

- VIII-G. ImageListAddPictureMask

- VIII-H. ImageListGetBitmap

- VIII-I. ImageListExists

- VIII-J. ImageListDel

- VIII-K. ImageListDelAll

- VIII-L. ImageListClone

- VIII-M. ImageListWidth

- VIII-N. ImageListHeight

- VIII-O. ImageListGetIPictureDisp

- VIII-P. Fonctions de dessin / transformation

- IX. Les fonctions de transformations

- IX-A. WorldRotate

- IX-B. WorldTranslate

- IX-C. WorldScale

- IX-D. WorldReset

- IX-E. WorldPush

- IX-F. WorldPop

- IX-G. WorldTransformPoint

- X. Les fonctions de restitution de l'image principale à l'écran

- X-A. RepaintControl

- X-B. RepaintControlNoFormRepaint

- X-C. FastRepaint

- X-D. FastRepaintSetCorrection

- X-E. FastRepaintSetClipControl

- X-F. FastRepaintSetClipRectangle

- X-G. FastRepaintSetClipRegion

- X-H. FastRepaintResetClip

- XI. Les fonctions pour gérer les régions

- XI-A. CreateRegionEllipse

- XI-B. CreateRegionPolygon

- XI-C. CreateRegionRect

- XI-D. CreateRegionRoundRect

- XI-E. CreateRegionCurve

- XI-F. CreateRegionSVG

- XI-G. DeleteRegion

- XI-H. DeleteAllRegions

- XI-I. FrameRegion

- XI-J. FillRegion

- XI-K. HatchRegion

- XI-L. GetRegionXY

- XI-M. PointInRegion

- XI-N. GetRegionRect

- XI-O. RegionExists

- XI-P. RegionCombine

- XI-Q. CreateRegionFromColor

- XI-R. ScaleRegion

- XI-S. TranslateRegion

- XI-T. RotateRegion

- XI-U. TransformRegion

- XI-V. RegionsIntersect

- XI-W. RegionClone

- XI-X. SetFormRegion

- XI-Y. ResetFormRegion

- XII. Sauvegarde de l'image principale en mémoire

- XII-A. KeepImage

- XII-B. ResetImage

- XII-C. ImageExists

- XII-D. DeleteImage

- XII-E. DeleteAllImages

- XII-F. GetImageBitmap

- XIII. Gestion des textures

- XIII-A. TextureAddFromFile

- XIII-B. TextureAddFromImage

- XIII-C. TextureAddFromControl

- XIII-D. TextureDel

- XIII-E. TextureTranslate

- XIII-F. TextureWidth

- XIII-G. TextureHeight

- XIV. Les fonctions de conversion

- XIV-A. ImgToCtrlX et ImgToCtrlY

- XIV-B. CtrlToImgX et CtrlToImgY

- XIV-C. PointsToPixelsX et PointsToPixelsY

- XIV-D. PixelToPointsX et PixelToPointsY

- XV. Les autres fonctions utiles

- XV-A. GetPixel

- XV-B. LongToRGB

- XV-C. SetXPTheme

- XV-D. SetDoubleBufferXP

- XV-E. DragForm

- XV-F. FontSizeToPixel

- XV-G. PixelToFontSize

- XV-H. GetUserFormHandle

- XV-I. GetClientHandle

- XV-J. GetControlSize

- XVI. Les propriétés

- XVI-A. ImageWidth et ImageHeight

- XVI-B. RefControl

- XVI-C. PenAlignMode

- XVI-D. WrapX et WrapY

- XVI-E. LineCap

- XVI-F. FillTexture

- XVI-G. IconBackColor

- XVI-H. LastTextBottom et LastTextRight

- XVI-I. MaxTextSize, MinTextSize et LastTextSize

- XVI-J. DrawClipRegion

- XVI-K. FastRepaintCompatible

- XVII. Conclusion

- XVIII. Les téléchargements

I - Introduction

GDI est une librairie graphique.
En d'autres termes ce sont des fonctions que l'on peut appeler depuis nos programmes en ayant pris soin auparavant de les déclarer : ce sont les fameuses API.
La librairie GDI est intégrée à toutes les versions de Windows.

La classe clGdi32, dont cet article est la documentation, encapsule ces API pour faciliter leur utilisations.

Exemples d'images obtenues grâce à cette classe : :

Les départements d'une carte de France sont colorés au passage de la souris, et on peut les sélectionner en cliquant dessus.
On peut afficher sur la carte le numéro des départements et leur nom lorsqu'on les survole.

Dessin d'une horloge analogique.
Si on déplace la souris en cliquant sur une aiguille l'heure change.

II - Remarques préalables

II-A - Remarques

- L'unité utilisée par cette classe est le pixel.

- La classe est développée sur Access 2003 ou Access2007 au format Access 2000; j'essaye autant que je peux d'assurer la meilleure compatibilité avec les autres versions.

- Dans tous mes exemples je nomme oGdi l'instance de la classe et Image0 le contrôle image.

- Les paramètres optionnels sont notés : [NomduParamètre] = ValeurParDéfaut
- Si non mentionné, les fonctions renvoient False (Faux) en cas d'échec (ou Vrai si succès).

II-B - Pré-requis

La librairie gdi32 est intégrée à toute les versions de Windows.
Il n'y a donc pas de pré-requis particuliers.

II-C - Utilisation dans un UserForm

Par défaut, le dessin se fait dans un contrôle image d'un formulaire Access.

Pour utiliser la classe ClGdi32 dans un UserForm, recherchez la constante de compilation Access et remplacez :

#Const Access = True

par

#Const Access = False

Le dessin se fait alors dans un contrôle image sur un UserForm.
N'importe quelle application Office gérant les UserForms peut alors être utilisée (Excel, Word, Powerpoint, ...)

Dans ce cas, la librairie Microsoft Forms X.X Objet Library est nécessaire.
Cette librairie est référencée automatiquement à la création d'un UserForm.
Sinon il faut la référencer dans Outils => Référence.

III - Les fonctions de création et de sauvegarde de l'image principale

III-A - OpenFile

Ouvre un fichier.

Charge le fichier en mémoire, il devient l'image principale.
On peut ensuite modifier l'image, dessiner dessus, ...

La fonction renvoie Vrai si le fichier a été ouvert avec succès.

Paramètres :

Paramètre

Type

Explication

pFile

String

Chemin complet du fichier image

[pIcon]=Gdi32NoIcon

EGdi32IconType

Gdi32NoIcon = Charge le fichier normalement
Gdi32SmallIcon = Charge la grande icone associée au fichier
Gdi32LargeIcon = Charge la grande icone associée au fichier

III-B - CloseFile

Ferme l'image principale.

L'image principale peut être un fichier chargé avec OpenFile, un bitmap créé avec CreateBitmap, ...
Pensez à refermer l'image dès que possible pour libérer de la mémoire.

Une seule image principale est active à la fois : la fonction CloseFile n'a donc pas besoin de paramètre.

III-C - CreateBitmap

Création d'une image vierge.
L'image est créée en mémoire, elle devient l'image principale.

Paramètres :

Paramètre

Type

Explication

pWidth

Long

Largeur de l'image en pixels

pHeight

Long

Hauteur de l'image en pixels

III-D - CreateBitmapForImage

Création d'une image vierge.
L'image a la taille du contrôle donné en paramètre.
L'image est créée en mémoire, elle devient l'image principale active.

Paramètres :

Paramètre

Type

Explication

pImgCtrl

Contrôle

Contrôle qui détermine la taille de l'image.

III-E - SaveFile

Sauvegarde l'image principale dans un fichier.

La fonction renvoie Vrai si le fichier a pû être sauvegardé.

Paramètres :

Paramètre

Type

Explication

pFile

String

Chemin du fichier de sauvegarde.

[pFormat]="BMP"

String

Format du fichier : BMP ou EMF.

[pTransparentColor]=-1

Long

Couleur de transparence pour EMF uniquement.
La couleur spécifiée sera transparente dans l'image exportée.

IV - Autres fonctions de lecture / écriture de l'image principale

IV-A - GetPixels

Renvoie un tableau de pixels avec les couleurs ARGB

Paramètres :

Paramètre

Type

Explication

pPixels

Tableau de Byte

Tableau de points ARGB

La fonction renvoie un tableau de pixels ARGB.
A = Alpha = Transparence : Non utilisé par gdi32
R = Red = Rouge
G = Green = Vert
B = Blue = Bleu

Les valeurs sont comprises entre 0 et 255.

Exemple :

Lire les couleurs des pixels

' Tableau pour recevoir les pixels
Dim lPixels() As Byte
' Compteurs
Dim lCptX As Long, lCptY As Long
' Lecture des pixels dans le tableau
lPixels = oGdi.GetPixels
' Boucle sur les pixels
For lCptX = LBound(lPixels(), 2) To UBound(lPixels(), 2)
For lCptY = LBound(lPixels(), 3) To UBound(lPixels(), 3)
' Composante bleue = lPixels(1, lCptX, lCptY)
' Composante verte = lPixels(2, lCptX, lCptY)
' Composante rouge = lPixels(3, lCptX, lCptY)
Next
Next

IV-B - SetPixels

Crée l'image principale à partir un tableau de pixels avec les couleurs ARGB
L'image précédente est écrasée.

Paramètres :

Paramètre

Type

Explication

pPixels

Tableau de Byte

Tableau de points RGB

Exemple :

Appliquer un filtre rouge sur l'image

' Tableau pour recevoir les pixels
Dim lPixels() As Byte
' Compteurs
Dim lCptX As Long, lCptY As Long
' Lecture des pixels de l'image
lPixels = oGdi.GetPixels
' On boucle sur les pixels
For lCptX = LBound(lPixels(), 2) To UBound(lPixels(), 2)
For lCptY = LBound(lPixels(), 3) To UBound(lPixels(), 3)
' On ne garde que la couleur rouge en mettant les deux autres composantes à zéro
' Annule la composante bleue
lPixels(1, lCptX, lCptY) = 0
' Annule la composante verte
lPixels(2, lCptX, lCptY) = 0
' Composante bleue = lPixels(1, lCptX, lCptY)
' Composante verte = lPixels(2, lCptX, lCptY)
' Composante rouge = lPixels(3, lCptX, lCptY)
' Composante alpha = lPixels(4, lCptX, lCptY)
Next
Next
' On réinjecte les couleurs dans l'image
oGdi.SetPixels lPixels

IV-C - SetBitmap

Crée l'image principale à partir d'un bitmap gdi32

Le bitmap source défini par pBitmap est copié, il faut donc ensuite le supprimer si nécessaire.
Voir GetBitmap pour un exemple d'utilisation.

Paramètres :

Paramètre

Type

Explication

pBitmap

Long

Identifiant d'un bitmap Gdi

[pDelete] = Vrai

Boolean

Si Vrai, supprime le bitmap passé en paramètre.

IV-D - GetBitmap

Sauvegarde l'image principale dans un bitmap gdi32

La fonction renvoie un bitmap Gdi32 qui est une copie de l'image principale.

Exemple :

Affecter l'image d'une classe à une autre

' Le paramètre pDelete de SetBitmap doit être à Vrai pour supprimer le bitmap une fois transféré
' Sinon il y aurait une fuite de mémoire
' C'est le paramètre par défaut
lReturn = oGdiOut.SetBitmap(oGdiIn.GetBitmap())

IV-E - SetImageArray

Définit l'image principale à partir d'un tableau de byte

Paramètres :

Paramètre

Type

Explication

pArray

Tableau de Byte

Données de l'image :
- peut être un équivalent à la propriété PictureData d'un contrôle Access;
- ou le contenu d'un fichier image (bmp, jpg, gif, ...)

[pAttachment]=False

Boolean

Mettre à Vrai si les données proviennent d'un champ pièce-jointe (Access >= 2007).

Exemple :

Charge une image à partir d'un champ pièce-jointe

' Timages est le nom de la table
' data est le champ pièce-jointe
' id est un champ texte identifiant de l'image
oGdi.SetImageArray DLookup("data.filedata", "Timages", "id=""btnGIF"""), True

IV-F - GetImageArray

Sauvegarde l'image principale dans un tableau de byte

Paramètres :

Paramètre

Type

Explication

pArray

Tableau de Byte

Données de l'image.

pEmf

Boolean

Format des données :
- Bitmap si Faux
- EMF si Vrai

La fonction retourne un tableau de Byte contenant les données de l'image dans un format équivalent à la propriété PictureData d'un contrôle Access.

IV-G - LoadBitmapFromControl

Création de l'image principale à partir de l'image contenue dans un contrôle

Paramètres :

Paramètre

Type

Explication

pCtrl

Control

Contrôle contenant une image

IV-H - GetIPictureDisp

Renvoie l'image dans un objet IPictureDisp

Cet objet peut être utilisé pour une image du ruban par exemple.

V - Les fonctions de modification de l'image principale

V-A - ReplaceColor

Remplace une couleur de l'image par une autre.

Paramètres :

Paramètre

Type

Explication

pOldColor

Long

Ancienne couleur

pNewColor

Long

Nouvelle couleur

Exemple :

Remplace le blanc par la couleur de fond du formulaire Access

lReturn = oGdi.ReplaceColor(vbWhite, Me.Section(acDetail).BackColor)

V-B - FillColor

Rempli l'image principale d'une couleur.

Paramètres :

Paramètre

Type

Explication

pColor

Long

Couleur de remplissage

[pColorGradient]=-1

Long

Couleur pour dégradé
Le dégradé va de la couleur pColor vers la couleur pColorGradient

[pGradientVert] = Faux

Boolean

Mettre à Vrai pour un dégradé vertical

[pX1]
[pY1]
[pX2]
[pY2]

Long

Coordonnées du rectangle à remplir, ou toute l'image.

Exemple :

Rempli de blanc le quart de l'image en bas à droite

lReturn = oGdi.FillColor(vbWhite, , , oGdi.ImageWidth / 2, oGdi.ImageHeight / 2)

V-C - Resize

Redimensionne l'image principale.

Si un des paramètres de dimension (pWidth ou pHeight) est omis, il est calculé en fonction de l'autre dimension en conservant le ratio de l'image.

Paramètres :

Paramètre

Type

Explication

[pWidth]=0

Long

Nouvelle largeur

[pHeight]=0

Long

Nouvelle hauteur

[pAntialise] = Faux

Boolean

Si vrai alors l'image est lissée
Remarque : ce lissage n'est pas un vrai anti-aliasing, le résultat n'est pas toujours très bon.

[pFixColor] = -1

Long

Couleur à figer si antialiasing
Permet de conserver une couleur de fond uni.

Exemple :

Redimensionne l'image à 10% de sa taille d'origine

lReturn = oGdi.Resize(oGdi.ImageWidth / 10, oGdi.ImageHeight / 10)

V-D - Crop

Découpe l'image principale.

Paramètres :

Paramètre

Type

Explication

[pLeft] = 0

Long

Position à gauche

[pTop] = 0

Long

Position en haut

[pWidth] = 0

Long

Largeur

[pHeight] = 0

Long

Hauteur

Exemple :

Découpe le quart haut-gauche de l'image

lReturn = oGdi.Crop(0, 0, oGdi.ImageWidth / 2, oGdi.ImageHeight / 2)

V-E - Rotate

Rotation de l'image principale.

Paramètres :

Paramètre

Type

Explication

pAngle

Long

Angle de rotation en degrés

[pBackColor] = -1

Long

Couleur de fond de l'image.
Cette couleur rempli les portions de l'image qui ne sont plus remplies après rotation.

Exemple :

Tourne l'image de 30°

lReturn = oGdi.Rotate(30)

VI - Les fonctions de dessin

Ces fonctions dessinent sur l'image principale.
Le dessin tient compte des transformations définies par les fonctions World*.

Il est également possible de dessiner sur une image secondaire en utilisant des fonctions similaires dont le nom commence par ImageList.

VI-A - DrawPixel

Dessine un pixel.

Paramètres :

Paramètre

Type

Explication

pX

Long

Position horizontale du pixel

pY

Long

Position verticale du pixel

pColor

Long

Couleur du pixel

Exemple :

Dessiner un pixel rouge au milieu du contrôle

lReturn = oGdi.DrawPixel(oGdi.ImageWidth / 2,oGdi.ImageHeight / 2, vbRed)

VI-B - DrawLine

Dessine une ligne.

Paramètres :

Paramètre

Type

Explication

pX1,pY1

Long

Position du premier point

pX2,pY2

Long

Position du deuxième point

[pPenColor] = vbBlack

Long

Couleur de la ligne

[pPenWidth] = 1

Long

Epaisseur de la ligne

[pDash] = False

Boolean

Pointillés si Vrai

[pArrowLength] = 0

Long

Taille des traits pour dessiner une flèche

Exemple :

Dessiner une ligne bleue pointillée de 4 pixels de large qui traverse le contrôle en diagonal

lReturn = oGdi.DrawLine(0, 0, oGdi.ImageWidth, oGdi.ImageHeight, vbBlue, 4, True)

VI-C - DrawRectangle

Dessine un rectangle.

Paramètres :

Paramètre

Type

Explication

pX1,pY1,pX2,pY2

Long

Coordonnées du rectangle

[pBackColor] = -1

Long

Couleur de remplissage
Laisser -1 pour un rectangle transparent.

[pPenColor] = vbBlack

Long

Couleur de la ligne

[pPenWidth] = 1

Long

Epaisseur de la ligne

[pDash] = False

Boolean

Pointillés si Vrai

[pRegion] = ""

String

Nom de la région à créer avec les mêmes coordonnées

Exemple :

Dessiner un rectangle aléatoire

' pBackColor = -1 siginifie qu'on dessine uniquement la bordure sans le fond
' pPenColor = vbBlue pour dessiner en bleu
lReturn = oGdi.DrawRectangle(Rnd * oGdi.ImageWidth, Rnd * oGdi.ImageHeight, _
Rnd * oGdi.ImageWidth, Rnd * oGdi.ImageHeight, _
-1, vbBlue, 4)

VI-D - DrawRoundRectangle

Dessine un rectangle avec coins arrondis.

Paramètres :

Paramètre

Type

Explication

pX1 ,pY1 ,pX2 ,pY2

Long

Coordonnées du rectangle

pX3 ,pY3

Long

Taille de l'ellipse utilisé pour les coins

[pBackColor] = -1

Long

Couleur de remplissage
Laisser -1 pour un rectangle transparent.

[pPenColor] = vbBlack

Long

Couleur de la ligne

[pPenWidth] = 1

Long

Epaisseur de la ligne

[pDash] = False

Boolean

Pointillés si Vrai

[pRegion] = ""

String

Nom de la région à créer avec les mêmes coordonnées

VI-E - DrawEllipse

Dessine une ellipse.

Paramètres :

Paramètre

Type

Explication

pX1,pY1,pX2,pY2

Long

Position de l'ellipse

[pType] = 0

EGdi32TypeEllipse

Type de positionnement
Si pType = TypeEllipseRectangle = 0 : On passe un rectangle en paramètre, l'ellipse remplit ce rectangle
pX1,Y1 : Point Haut-Gauche du rectangle
pX2,Y2 : Point Bas-Droite du rectangle
Si pType = TypeEllipseCenter = 1 : on passe le centre et les rayons de l'ellipse en paramètre
pX1,pY1 : Centre de l'ellipse
pX2 : Rayon horizontal
pY2 : Rayon vertical

[pBackColor] = -1

Long

Couleur de remplissage
Laisser -1 pour une ellipse transparente

[pPenColor] = vbBlack

Long

Couleur de la ligne

[pPenWidth] = 1

Long

Epaisseur de la ligne

[pDash] = False

Boolean

Pointillés si Vrai

[pStartAngle] = Null

Variant/Single

Angle de démarrage d'un arc en degré

[pSweepAngle] = Null

Variant/Single

Angle de balayage d'un arc en degré

[pRegion] = ""

String

Nom de la région à créer avec les mêmes coordonnées

Exemple :

Dessiner une ellipse au milieu du contrôle

' Dessin d'une ellipse rouge d'épaisseur 2, centrée au mileu du contrôle, remplie de vert,
'   et de rayons 1/5è de la taille du contrôle
lReturn = oGdi.DrawEllipse(oGdi.ImageWidth / 2, oGdi.ImageHeight / 2, oGdi.ImageWidth / 5, oGdi.ImageHeight / 5, 1, vbGreen, vbRed, 2)

VI-F - DrawPolygon

Dessine un polygone.

Paramètres :

Paramètre

Type

Explication

pPoints

Variant

Tableau de points formant le polygone : Array(X1,Y1,X2,Y2,X3,Y3,...)

[pBackColor] = -1

Long

Couleur de remplissage
Laisser -1 pour un polygone transparent.

[pPenColor] = vbBlack

Long

Couleur de la ligne

[pPenWidth] = 1

Long

Epaisseur de la ligne

[pDash] = False

Boolean

Pointillés si Vrai

[pRegion] = ""

String

Nom de la région à créer avec les mêmes coordonnées

VI-G - DrawCurve

Dessine une ou plusieurs courbes de bézier.

Paramètres :

Paramètre

Type

Explication

pPoints

Variant

Tableau de points formant la courbe: Array(X1,Y1,X2,Y2,X3,Y3,...).
Necessite 1 point de depart + 3 points par courbe.

[pBackColor] = -1

Long

Couleur de remplissage
Laisser -1 pour une courbe transparente.

[pPenColor] = vbBlack

Long

Couleur de la ligne

[pPenWidth] = 1

Long

Epaisseur de la ligne

[pDash] = False

Boolean

Pointillés si Vrai

[pRegion] = ""

String

Nom de la région à créer avec les mêmes coordonnées

VI-H - DrawSVG

Dessine un chemin SVG.

M : point de départ.
L : ligne.
V : ligne verticale.
H : ligne horizontale.
C : courbe de bézier (1 point de contrôle).
Q : courbe de bézier quadratique (2 points de contrôle).
A : Arc : non gérés à ce jour.
z : ferme le chemin.

Paramètres :

Paramètre

Type

Explication

pPath

String

Chemin au format SVG.

[pBackColor] = -1

Long

Couleur de remplissage
Laisser -1 pour une courbe transparente.

[pPenColor] = vbBlack

Long

Couleur de la ligne

[pPenWidth] = 1

Long

Epaisseur de la ligne

[pDash] = False

Boolean

Pointillés si Vrai

[pRegion] = ""

String

Nom de la région à créer avec les mêmes coordonnées

Exemple :

Dessine un chemin SVG

lReturn = oGdi.DrawSVG("M 20 20 h 50 L 100 100 Q 120 120 100 150 70 180 z")

VI-I - DrawText

Dessine du texte.

Paramètres :

Paramètre

Type

Explication

pText

String

Texte à écrire
Peut contenir des retours à la ligne (vbCrLf) mais le texte sera alors automatiquement aligné en haut.

pSize

Long

Taille du texte en pixel

[pFontName]=""

String

Nom de la police (Arial, ...)
Si non précisé, utilise la police système par défaut.

[pX1]= 0
[pY1]= 0
[pX2]
[pY2]

Long

Position du texte.
Le texte est écrit dans le rectangle défini par ces coordonnées
Si pX2 et pY2 ne sont pas renseignés, le texte est positionné sur le point de coordonnées pX1,pY1.

[pAlignHoriz] = HorzAlignCenter

EGdi32HorzAlign

Alignement horizontal
- HorzAlignLeft = 0 : Gauche
- HorzAlignCenter = 1 : Centre
- HorzAlignRight = 2 : Droite

[pAlignVert] = VertAlignCenter

EGdi32VertAlign

Alignement vertical
- VertAlignTop = 0 : Haut
- VertAlignCenter = 1 : Centre
- VertAlignBottom = 2 : Bas

[pPenColor] = 0

Long

Couleur du texte

[pBackColor] = -1

Long

Couleur de fond (-1 si transparent)

[pItalic] = False

Boolean

Italique Vrai/Faux

[pBold] = False

Boolean

Gras Vrai/Faux

[pUnderline] = False

Boolean

Souligné Vrai/Faux

[pStrikeOut] = False

Boolean

Barré Vrai/Faux

[pAntialiase] = Faux

Boolean

Lisser le texte Vrai/Faux

[pOnlyGetSize] = Faux

Boolean

Si vrai, n'écrit pas le texte sur l'image et renvoie la taille du texte dans pX1,pY1,pX2,pY2, pSize

Exemple :

Ecrit un texte en haut à gauche de l'image, en bleu

lReturn = oGdi.DrawText("TEST", 30, "Arial", 0, 0, oGdi.ImageWidth - 1, oGdi.ImageHeight - 1, 0, 0, vbBlue)

VI-J - DrawImage

Affiche une image de la liste d'images secondaires.

Voir les fonctions ImagesList* pour créer les images secondaires.

Paramètres :

Paramètre

Type

Explication

pName

String

Identifiant de l'image

pX1,pY1,[pX2],[pY2]

Long

Position de l'image
Si pX2 et pY2 sont omis alors on conserve la taille de l'image
Si pX2 ou pY2 sont omis alors on calcule la dimension manquante par rapport à l'autre en conservant le rapport hauteur/largeur.
Si pImgSizeMode = Gdi32SizeModeAutoSize:
pX1,pY1 : Position de l'image
pX2 : Largeur de l'image
pY2 : Hauteur de l'image
Si pImgSizeMode = Gdi32SizeModeZoom ou Gdi32SizeModeStretch ou Gdi32SizeModeClip:
pX1,Y1 : Point Haut-Gauche du rectangle contenant l'image
pX2,Y2 : Point Bas-Droite du rectangle contenant l'image

[pTranspcolor] = -1

Integer

Couleur de transparence : les points de cette couleur ne
seront pas dessinés

[pImgSizeMode] = Gdi32SizeModeZoom

EGdi32ImgSizeMode

Type d'affichage de l'image (Zoom par défaut)

[pImgPictureAlignment] = Gdi32AlignCenter

EGdi32ImgPictureAlignment

Position de l'image (centrée par défaut)

[pPercent]=255

Integer

Pourcentage pour affichage transclucide (0:invisible;255:normal)

[pAntialise] = Faux

Boolean

Si vrai alors l'image est lissée
Remarque : ce lissage n'est pas un vrai anti-aliasing, le résultat n'est pas toujours très bon.

[pRegion] = ""

String

Ajoute une région de nom pRegion

[pRegionColor] = -1

Long

Si renseigné, la région ajoutée contient les points de couleurs différentes de pRegionColor.
Sinon la région ajoutée est le rectangle de positionnement.

VIII - Les fonctions pour gérer la liste d'images secondaires

Ces images secondaires sont déconnectées de l'image principale.
Il est possible de les modifier sans altérer cette dernière.

Chaque image possède un identifiant unique de type chaîne de caractères.

Utilisez ensuite la fonction DrawImage pour dessiner une de ces images sur l'image principale.

Paramètres :

VIII-A - ImageListNew

Crée une image secondaire vierge.

Paramètres :

Paramètre

Type

Explication

pName

String

Identifiant de l'image

pWidth

Long

Largeur de l'image

pHeight

Long

Hauteur de l'image

VIII-B - ImageListAdd

Ajoute une image secondaire à partir d'un fichier.

Paramètres :

Paramètre

Type

Explication

pName

String

Identifiant de l'image

[pFile]=""

String

Chemin du fichier de l'image
Si aucun fichier n'est passé en paramètre alors on sauvegarde l'image
en mémoire dans la liste d'images secondaires.

[pWidth]=0
[pHeight]=0

Long

Taille de l'image pour redimensionnement lors du chargmement.
Si pWidth et pHeight sont nulles toutes les deux l'image conserve sa taille
Si seulement une des deux tailles est nulles alors l'autre est calculée en
en conservant les proportions de l'image d'origine.

[pAntialiase] = Faux

Boolean

Lisse l'image lors du redimensionnement si Vrai.
Remarque : ce lissage n'est pas un vrai anti-aliasing, le résultat n'est pas toujours très bon.

[pIcon]=Gdi32NoIcon

EGdi32IconType

Gdi32NoIcon = Charge le fichier normalement
Gdi32SmallIcon = Charge la grande icone associée au fichier
Gdi32LargeIcon = Charge la grande icone associée au fichier

VIII-C - ImageListAddBitmap

Ajoute une image secondaire à partir d'un bitmap gdi.
Le bitmap source est copié.

Paramètres :

Paramètre

Type

Explication

pName

String

Identifiant de l'image

pBitmap

Long

Identifiant d'un bitmap Gdi

[pDelete]= True

Boolean

Si Vrai, supprime le bitmap source après l'avoir inséré dans la liste d'images.

Exemple :

Passage d'une image d'une classe à un autre classe

' Voir plus loin pour l'explication de ImageListGetBitmap
' Il faut supprimer le bitmap en mettant le paramètre pDelete de ImageListAddBitmap à Vrai (par défaut)
' Sinon il y a une fuite de mémoire, le bitmap temporaire n'étant jamais supprimé
lReturn = oGdiOut.ImageListAddBitmap("MonImage", oGdiIn.ImageListGetBitmap("MonImage"), True)

VIII-D - ImageListAddRect

Ajoute une image secondaire à partir d'une portion de l'image principale.

Paramètres :

Paramètre

Type

Explication

pName

String

Identifiant de l'image

pX1,pY1,pX2,pY2

Long

Coordonnées du rectangle à copier.

VIII-E - ImageListAddFromControl

Ajoute une image secondaire à partir de l'image intégrée à un contrôle.

Paramètres :

Paramètre

Type

Explication

pName

String

Identifiant de l'image

pCtrl

Control

Contrôle contenant l'image à charger.

VIII-F - ImageListAddFromArray

Ajoute une image secondaire à partir d'un tableau de byte.

Paramètres :

Paramètre

Type

Explication

pName

String

Identifiant de l'image

pArray

Tableau de Byte

Données de l'image :
- peut être un équivalent à la propriété PictureData d'un contrôle Access;
- ou le contenu d'un fichier image (bmp, jpg, gif, ...)

[pAttachment]=False

Boolean

Mettre à Vrai si les données proviennent d'un champ pièce-jointe (Access >= 2007).

Exemple :

Charge une image à partir d'un champ pièce-jointe

' Timages est le nom de la table
' data est le champ pièce-jointe
' id est un champ texte identifiant de l'image
oGdi.ImageListAddFromArray "IdImage", DLookup("data.filedata", "Timages", "id=""btnGIF"""), True

VIII-G - ImageListAddPictureMask

Ajoute une image secondaire à partir à partir d'un bitmap et d'un masque gdi32.

Le masque est un bitmap monochrome noir et blanc définissant la transparence de l'image.

Paramètres :

Paramètre

Type

Explication

pName

String

Identifiant de l'image

pPicture

Long

Identifiant d'un bitmap gdi32.

pMask

Long

Identifiant d'un masque gdi32.

[pBackColor] = vbWhite

Long

Couleur de fond de l'image.

[pDelete] = True

Boolean

Si Vrai, le bitmap et le masque sont supprimés.

VIII-H - ImageListGetBitmap

Renvoie le bitmap gdi32 d'une image secondaire.

Voir ImageListAddBitmap pour un exemple d'utilisation.

Paramètres :

Paramètre

Type

Explication

pName

String

Identifiant de l'image

VIII-I - ImageListExists

Teste si l'image secondaire existe.
La fonction renvoie Vrai si l'image est déjà dans la liste

Paramètres :

Paramètre

Type

Explication

pName

String

Identifiant de l'image

VIII-J - ImageListDel

Supprime une image secondaire de la liste d'images.

Paramètres :

Paramètre

Type

Explication

pName

String

Identifiant de l'image

VIII-K - ImageListDelAll

Supprime toutes les images secondaires de la liste d'images.

VIII-L - ImageListClone

Clone une image secondaire de la liste d'images.

Paramètres :

Paramètre

Type

Explication

pNameSource

String

Identifiant de l'image source

pNameDest

String

Identifiant de l'image destination

VIII-M - ImageListWidth

Largeur d'une image secondaire.

Paramètres :

Paramètre

Type

Explication

pName

String

Identifiant de l'image

VIII-N - ImageListHeight

Hauteur d'une image secondaire.

Paramètres :

Paramètre

Type

Explication

pName

String

Identifiant de l'image

VIII-O - ImageListGetIPictureDisp

Renvoie l'image secondaire dans un objet IPictureDisp

Cet objet peut être utilisé pour une image du ruban.

Paramètre

Type

Explication

pName

String

Identifiant de l'image

VIII-P - Fonctions de dessin / transformation

Les fonctions de dessin / transformation existent également pour les images secondaires.

Ces fonctions ont un préfixe ImageList et acceptent les même paramètres que les fonctions originales.

Le premier paramètre supplémentaire pImage est l'identifiant de l'image de la liste.

IX - Les fonctions de transformations

Ces fonctions appliquent une transformation au contexte d'affichage.
Ces transformations s'appliquent aux opérations de dessin effectuées sur l'image principale et la création de régions.

IX-A - WorldRotate

Effectue une rotation.
Cette rotation a pour point pivot le point en haut à gauche.

Paramètres :

Paramètre

Type

Explication

pAngle

Single

Angle de rotation en degrés

pAppend

Boolean

Mettre à True pour ajouter cette transformation à la transformation active.
Sinon elle remplace la transformation déjà définie.

IX-B - WorldTranslate

Effectue une translation.

Paramètres :

Paramètre

Type

Explication

pdX

Single

Translation horizontale

pdY

Single

Translation verticale

pAppend

Boolean

Mettre à True pour ajouter cette transformation à la transformation active.
Sinon elle remplace la transformation déjà définie.

IX-C - WorldScale

Effectue une mise à l'échelle.

Paramètres :

Paramètre

Type

Explication

psX

Single

Mise à l'échelle horizontale

psY

Single

Mise à l'échelle verticale

pAppend

Boolean

Mettre à True pour ajouter cette transformation à la transformation active.
Sinon elle remplace la transformation déjà définie.

IX-D - WorldReset

Annule les transformations.

IX-E - WorldPush

Sauvegarde les transformations.
Restaurez avec WolrdPop.
Paramètres :

Paramètre

Type

Explication

[pMatrix] = "default"

String

Identifiant de la matrice à sauvegarder.

IX-F - WorldPop

Restaure les transformations préalablement sauvegardées avec WorldPush.

Paramètres :

Paramètre

Type

Explication

[pMatrix] = "default"

String

Identifiant de la matrice à restaurer.

IX-G - WorldTransformPoint

Transforme les coordonnées d'un point.

Paramètres :

Paramètre

Type

Explication

pX, pY

Long

Coordonnées du texte à transformer.

[pMatrix] = "default"

String

Identifiant de la matrice à utiliser pour la transformation.

X - Les fonctions de restitution de l'image principale à l'écran

X-A - RepaintControl

Injecte l'image dans un contrôle.

Paramètres :

Paramètre

Type

Explication

pControl

Image

Contrôle dans lequel est injecté l'image

[pResizeBefore]=False

Boolean

Si Vrai, redimensionne l'image avant

[pResizeAntialise]=False

Boolean

Anti-aliasing lors du redimensionnement
Remarque : ce lissage n'est pas un vrai anti-aliasing, le résultat n'est pas toujours très bon.

[pUseEMF]=False

Boolean

Pour ACCESS uniquement : Utilisation du type d'image EMF
A tester pour améliorer la qualité de l'image dessinée.

Affichage de l'image dans le contrôle Image0 avec redimensionnement et lissage

oGdi.RepaintControl Me.Image0,True,True

X-B - RepaintControlNoFormRepaint

Injecte l'image dans un contrôle, mais ne la dessine que temporairement.
Cette fonction peut être utilisée pour réduire les scintillements (ou "flash") à l'écran.
Il peut y avoir des légers décalages d'un ou deux pixels, qu'on peut essayer de corriger avec la fonction FastRepaintSetCorrection et/ou en retirant les bordures de l'image.

Paramètres :

Paramètre

Type

Explication

pControl

Image

Contrôle dans lequel est injecté l'image

[pResizeBefore]=False

Boolean

Si Vrai, redimensionne l'image avant

[pResizeAntialise]=False

Boolean

Anti-aliasing lors du redimensionnement
Remarque : ce lissage n'est pas un vrai anti-aliasing, le résultat n'est pas toujours très bon.

[pUseEMF]=False

Boolean

Pour ACCESS uniquement : Utilisation du type d'image EMF
A essayer pour améliorer la qualité de l'image dessinée.

X-C - FastRepaint

Dessine directement sur le formulaire.
L'affichage est plus rapide mais temporaire.
Il peut y avoir des légers décalages d'un ou deux pixels, qu'on peut essayer de corriger avec la fonction FastRepaintSetCorrection et/ou en retirant les bordures de l'image.

Paramètres :

Paramètre

Type

Explication

pImgCtrl

Image

Contrôle déterminant l'emplacement de l'image

[pAntialiase] = Faux

Boolean

Lisse l'image si Vrai.
Remarque : ce lissage n'est pas un vrai anti-aliasing, le résultat n'est pas toujours très bon.

[phDc] = 0

Long

Handle d'un device contexte si connu.

[phWnd] = 0

Long

Handle d'une fenêtre si connu.

X-D - FastRepaintSetCorrection

Corrections pour la fonction FastRepaint.

*Dest pour correction sur le formulaire.
*Src pour correction sur l'image dessiné.

Paramètres :

Paramètre

Type

Explication

pLeftDest, pLeftSrc

Long

Correction à gauche

pTopDest, pTopSrc

Long

Correction à droite

pWidthDest, pWidthSrc

Long

Correction de largeur

pHeightDest, pHeightSrc

Long

Correction de hauteur

X-E - FastRepaintSetClipControl

Définit l'emplacement à redessiner avec la fonction FastRepaint.

Permet de placer des contrôles sur l'images et de ne pas dessiner par dessus si on utilise la fonction FastRepaint.
Il est possible de combiner plusieurs contrôles en appelant plusieurs fois la fonction.

Paramètres :

Paramètre

Type

Explication

pCtrl

Contrôle

Contrôle dont l'emplacement est à inclure ou exclure

pInclude

Boolean

Si Vrai, le contrôle spécifié délimite un rectangle qui sera redessiné à l'appel de la fonction FastRepaint.
Si Faux, le contrôle spécifié délimite un rectangle qui ne sera pas redessiné.

pCorrectLeft

Long

Correction à gauche en pixels

pCorrectTop

Long

Correction en haut en pixels

pCorrectRight

Long

Correction à droite en pixels

pCorrectBottom

Long

Correction en bas en pixels

X-F - FastRepaintSetClipRectangle

Définit l'emplacement à redessiner avec la fonction FastRepaint.

Permet d'accélérer le dessin en ne dessinant qu'une portion de l'image.
Il est possible de combiner plusieurs rectangles en appelant plusieurs fois la fonction.

Paramètres :

Paramètre

Type

Explication

pX1, pY1, pX2, pY2

Long

Coordonnées du rectangle à dessiner.
En pixels par rapport à l'image principale.

pInclude

Boolean

Si Vrai, le rectangle sera redessiné à l'appel de la fonction FastRepaint.
Si Faux, le rectangle ne sera pas redessiné.

pCorrectLeft

Long

Correction à gauche en pixels

pCorrectTop

Long

Correction en haut en pixels

pCorrectRight

Long

Correction à droite en pixels

pCorrectBottom

Long

Correction en bas en pixels

X-G - FastRepaintSetClipRegion

Définit le rectangle entourant une région comme l'emplacement à redessiner avec la fonction FastRepaint.

Permet d'accélérer le dessin en ne dessinant qu'une portion de l'image.
Il est possible de combiner plusieurs rectangles en appelant plusieurs fois la fonction.

Paramètres :

Paramètre

Type

Explication

pRegion

String

Identifiant de la région à dessiner.

pInclude

Boolean

Si Vrai, le rectangle sera redessiné à l'appel de la fonction FastRepaint.
Si Faux, le rectangle ne sera pas redessiné.

pCorrectLeft

Long

Correction à gauche en pixels

pCorrectTop

Long

Correction en haut en pixels

pCorrectRight

Long

Correction à droite en pixels

pCorrectBottom

Long

Correction en bas en pixels

X-H - FastRepaintResetClip

Réinitialise l'emplacement à redessiner avec la fonction FastRepaint.

Après l'appel de cette fonction, l'image entière est à nouveau dessinée.

XI - Les fonctions pour gérer les régions

XI-A - CreateRegionEllipse

Ajoute une région elliptique.

Paramètres :

Paramètre

Type

Explication

pRegion

String

Identifiant de la region

pX1,pY1,pX2,pY2

Long

Position de l'ellipse

[pType] = TypeEllipseRectangle

EGdi32TypeEllipse

Type de positionnement
Si pType = TypeEllipseRectangle = 0 : On passe un rectangle en paramètre, l'ellipse remplit ce rectangle
pX1,Y1 : Point Haut-Gauche du rectangle
pX2,Y2 : Point Bas-Droite du rectangle
Si pType = TypeEllipseCenter = 1 : on passe le centre et les rayons de l'ellipse en paramètre
pX1,pY1 : Centre de l'ellipse
pX2 : Rayon horizontal
pY2 : Rayon vertical

XI-B - CreateRegionPolygon

Ajoute une région polygonale.
Pensez à fermer le polygone pour créer une région.

Paramètres :

Paramètre

Type

Explication

pRegion

String

Identifiant de la region

pPoints

Variant

Tableau de points formant le polygone
Array(X1,Y1,X2,Y2,X3,Y3,...)

XI-C - CreateRegionRect

Ajoute une région rectangulaire.

Paramètres :

Paramètre

Type

Explication

pRegion

String

Identifiant de la region

pX1,pY1

Long

Point Haut-Gauche du rectangle

pX2,pY2

Long

Point Bas-Droite du rectangle

XI-D - CreateRegionRoundRect

Ajoute une région rectangulaire avec coins arrondis.

Paramètres :

Paramètre

Type

Explication

pRegion

String

Identifiant de la region

pX1,pY1

Long

Point Haut-Gauche du rectangle

pX2,pY2

Long

Point Bas-Droite du rectangle

pX3,pY3

Long

Taille de l'ellipse utilise pour les coins

XI-E - CreateRegionCurve

Ajoute une région à partir d'une ou plusieurs courbes de bézier.

Paramètres :

Paramètre

Type

Explication

pRegion

String

Identifiant de la region

pPoints

Variant

Tableau de points formant la courbe: Array(X1,Y1,X2,Y2,X3,Y3,...).
Necessite 1 point de depart + 3 points par courbe.

XI-F - CreateRegionSVG

Ajoute une région à partir d'un chemin SVG.

Paramètres :

Paramètre

Type

Explication

pRegion

String

Identifiant de la region

pPath

String

Chemin au format SVG.
Voir la fonction DrawSVG pour plus d'informations.

XI-G - DeleteRegion

Supprime une région.

Paramètres :

Paramètre

Type

Explication

pRegion

String

Identifiant de la region à supprimer

XI-H - DeleteAllRegions

Supprime toutes les régions spécifiées.

Paramètre

Type

Explication

[pRegion]="*"

String

Identifiant des regions à supprimer, peut contenir un joker (*)

XI-I - FrameRegion

Dessine un trait qui encadre la région.

Paramètres :

Paramètre

Type

Explication

pRegion

String

Identifiant de la region

[pPenColor] = vbBlack

Long

Couleur du trait

[pPenWidth] = 1

Long

Epaisseur du trait

XI-J - FillRegion

Remplit une region d'une couleur.

Paramètres :

Paramètre

Type

Explication

pRegion

String

Identifiant de la region

[pColor] = vbBlack

Long

Couleur de remplissage

XI-K - HatchRegion

Hachure une région.

Paramètres :

Paramètre

Type

Explication

pRegion

String

Identifiant de la region

[pColor] = vbBlack

Long

Couleur de remplissage

[pBackColor] = -1

Long

Deuxième couleur pour le fond

[pStyle] = HatchStyleHorizontal

EGdi32HatchStyle

Type de hachures

XI-L - GetRegionXY

Identifie la region située sur un point.

Paramètres :

Paramètre

Type

Explication

pX

Long

Position X du point

pY

Long

Position Y du point

[pInclude]

Variant

Tableau de régions à inclure.
L'utilisation de joker (*) est possible.

[pExclude]

Variant

Tableau de régions à exclure.
L'utilisation de joker (*) est possible.

[pControl]

Variant

Contrôle utilisé pour convertir les coordonnées de twips vers pixels.

La fonction renvoie le nom de la région située sur le point précisé.

Exemple :

Recherche l'identifiant de la région sous le curseur de la souris

Private Sub Image0_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim lRegion As String       ' Region survolée
' On convertit les coordonnées vers des coordonnées images en pixels avec CtrlToImgX et CtrlToImgY
lRegion = oGdi.GetRegionXY(oGdi.CtrlToImgX(X, Me.Image0), oGdi.CtrlToImgY(Y, Me.Image0))
' Ou alors on peut utiliser le paramètre pControl
lRegion = oGdi.GetRegionXY(X, Y, , ,Me.Image0)
End Sub

XI-M - PointInRegion

Teste si un point est dans une region.

Paramètres :

Paramètre

Type

Explication

pX

Long

Position X du point

pY

Long

Position Y du point

pRegion

String

Nom de la région à tester

La fonction renvoie Vrai si le point est dans la région précisée en paramètre.

XI-N - GetRegionRect

Coordonnées rectangulaires d'une région.

Paramètres :

Paramètre

Type

Explication

pRegion

String

Identifiant de la région.

pX1, pY1, pX2, pY2

Long

Coordonnées du rectangle contenant la région.

XI-O - RegionExists

Teste si une région existe.

Paramètres :

Paramètre

Type

Explication

pRegion

String

Nom de la région à tester

La fonction renvoie Vrai si la région existe.

XI-P - RegionCombine

Combine deux régions.

Paramètres :

Paramètre

Type

Explication

pRegion1

String

Nom de la première région
Cette région reçoit la région résultante de la combinaison.

pRegion2

String

Nom de la deuxième région

pCombineMode

EGdi32CombineMode

Mode de combinaison

XI-Q - CreateRegionFromColor

Ajoute une région définie par la couleur des points.

Paramètres :

Paramètre

Type

Explication

pRegion

String

Nom de la région à créer

[pColor]=-1

Long

Couleur déterminant la région

[pIncludeColor]=False

Boolean

- Vrai : La région contient les points de couleur pColor.
- Faux : La région contient les points de couleur différente de pColor.

[pPointX]=-1, [pPointY]=-1

Long

Si renseigné, seuls les points adjacents sont traités (à la manière du pot de peinture de paint)

XI-R - ScaleRegion

Redimensionne une région.

Paramètres :

Paramètre

Type

Explication

pRegion

String

Nom de la région

pScaleX, pScaleY

Single

Facteurs de redimensionnement

[pCenter] = True

Booléen

Si vrai, le rectangle contenant la région est recentré après redimensionnement

XI-S - TranslateRegion

Déplace une région.

Paramètres :

Paramètre

Type

Explication

pRegion

String

Nom de la région

pdX, pdY

Long

Nombre de pixels de déplacement

XI-T - RotateRegion

Applique une rotation à une région.

Paramètres :

Paramètre

Type

Explication

pRegion

String

Nom de la région

pAngle

Single

Angle en degré

[pCenter] = True

Booléen

Si vrai, le rectangle contenant la région est recentré après rotation

XI-U - TransformRegion

Trasforme une région.

Paramètres :

Paramètre

Type

Explication

pRegion

String

Nom de la région

[pMatrix] = ""

String

Identifiant d'une matrice sauvegardée avec WorldPush.
Ou matrice courante si non précisé.

XI-V - RegionsIntersect

Teste si deux régions ont une intersection.

La fonction renvoie Vrai si les deux régions ont une intersection.

Paramètres :

Paramètre

Type

Explication

pRegion1

String

Nom de la première région

pRegion2

String

Nom de la deuxième région
Si ce paramètre est laissé vide, il sera renseigné avec la première région trouvée qui a une intersection avec pRegion1

XI-W - RegionClone

Clone une région.

Paramètres :

Paramètre

Type

Explication

pRegion

String

Nom de la région à cloner

pRegionClone

String

Nom de la région clone

XI-X - SetFormRegion

Limite l'affichage de formulaire a une région.

Paramètres :

Paramètre

Type

Explication

pForm

Formulaire

Le formulaire à limiter

pRegion

String

Nom de la région

[pCtrlRef]=Nothing

Image

Contrôle image de référence
A utiliser si la région a été créée par rapport à l'image

[pInverseRegion]=False

Boolean

Si Vrai, la région est inversée

[pCorrectionLeft]=0

Single

Correction de position gauche de la région en pixel

[pCorrectionTop]=0

Single

Correction de position haute de la région en pixel

[pCorrectionRight]=0

Single

Correction de position droite de la région en pixel

[pCorrectionBottom]=0

Single

Correction de position basse de la région en pixel

XI-Y - ResetFormRegion

Rétablit l'affichage du formulaire complet.

Paramètres :

Paramètre

Type

Explication

pForm

Formulaire

Le formulaire à rétablir

XII - Sauvegarde de l'image principale en mémoire

XII-A - KeepImage

Sauvegarde l'image principale en mémoire

Paramètres :

Paramètre

Type

Explication

[PImage]="Default"

String

Nom de la sauvegarde

L'image principale est sauvegardée en mémoire, prête à être rétablie avec la fonction ResetImage.

XII-B - ResetImage

Rétablit l'image principale de la mémoire

Paramètres :

Paramètre

Type

Explication

[PImage]="Default"

String

Nom de la sauvegarde

XII-C - ImageExists

Test si une image principale sauvegardée existe en mémoire.

Paramètres :

Paramètre

Type

Explication

[PImage]="Default"

String

Nom de la sauvegarde à tester

XII-D - DeleteImage

Supprime une image principale sauvegardée en mémoire.

Paramètres :

Paramètre

Type

Explication

[PImage]="Default"

String

Nom de la sauvegarde à supprimer

XII-E - DeleteAllImages

Supprime toutes les images principales sauvegardées en mémoire.

Paramètres :

XII-F - GetImageBitmap

Renvoie le bitmap gdi d'une image principale sauvegardée en mémoire.

Paramètres :

Paramètre

Type

Explication

[PImage]="Default"

String

Nom de la sauvegarde

XIII - Gestion des textures

Utilisez ensuite la propriété FillTexture pour choisir la texture à utiliser.

XIII-A - TextureAddFromFile

Ajoute une texture à partir d'un fichier.

Paramètres :

Paramètre

Type

Explication

pName

String

Identifiant de la texture

pFile

String

Chemin du fichier de la texture

XIII-B - TextureAddFromImage

Ajoute une texture à partir d'une image secondaire.

Paramètres :

Paramètre

Type

Explication

pName

String

Identifiant de la texture

pImgName

String

Identifiant de l'image secondaire contenant la texture

XIII-C - TextureAddFromControl

Ajoute une texture à partir de l'image integrée a un contrôle.

Paramètres :

Paramètre

Type

Explication

pName

String

Identifiant de la texture

pCtrl

Control

Contrôle contenant la texture

XIII-D - TextureDel

Supprime une texture.

Paramètres :

Paramètre

Type

Explication

pName

String

Identifiant de la texture

XIII-E - TextureTranslate

Déplace une texture.

Paramètres :

Paramètre

Type

Explication

pName

String

Identifiant de la texture

pDx, pDy

Long

Deplacements en pixels

XIII-F - TextureWidth

Largeur une texture.

Renvoie la largeur en pixel.
Paramètres :

Paramètre

Type

Explication

pName

String

Identifiant de la texture

XIII-G - TextureHeight

Hauteur une texture.

Renvoie la hauteur en pixel.
Paramètres :

Paramètre

Type

Explication

pName

String

Identifiant de la texture

XIV - Les fonctions de conversion

XIV-A - ImgToCtrlX et ImgToCtrlY

Converti depuis les coordonnées image vers les coordonnées contrôle

On donne des pixels en entrée, on reçoit des points (Excel) ou Twips (Access) en sortie.

Paramètres :

Paramètre

Type

Explication

pX ou pY

Long

Abcisse ou ordonnées à convertir

pImgCtrl

Image

Contrôle Image à utiliser pour la conversion.

[pDecalage] = True

Boolean

Calcul avec décalage (Position de l'image dans le contrôle)
Définir à Vrai pour convertir une position, à Faux pour convertir une taille.

XIV-B - CtrlToImgX et CtrlToImgY

Converti depuis les coordonnées contrôle vers les coordonnées image

On donne des points (Excel) ou Twips (Access) en entrée, on reçoit des pixels en sortie.

Paramètres :

Paramètre

Type

Explication

pX ou pY

Long

Abcisse ou ordonnées à convertir

pImgCtrl

Image

Contrôle Image à utiliser pour la conversion.

[pDecalage] = True

Boolean

Calcul avec décalage (Position de l'image dans le contrôle)
Définir à Vrai pour convertir une position, à Faux pour convertir une taille.

XIV-C - PointsToPixelsX et PointsToPixelsY

Converti les Points (Excel) ou Twips (Access) en Pixels

Paramètres :

Paramètre

Type

Explication

pPointsX
pPointsY

Long

Valeur à convertir

La fonction retourne la valeur convertie en Pixels

XIV-D - PixelToPointsX et PixelToPointsY

Converti les Pixels en Points (Excel) ou en Twips (Access)

Paramètres :

Paramètre

Type

Explication

pPixelsX
pPixelsY

Long

Valeur à convertir

La fonction retourne la valeur convertie en Points (Excel) ou en Twips (Access)

XV - Les autres fonctions utiles

XV-A - GetPixel

Renvoie la couleur d'un point

Paramètres :

Paramètre

Type

Explication

pX,pY

Long

Coordonnées du point

la fonction renvoie la couleur du point dans un Long.

Exemple :

Recherche la couleur du pixel sous le curseur de la souris

Private Sub Image0_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)<br/>
Dim lColor As Long       ' Couleur sous la souris
' On convertit les coordonnées vers des coordonnées images en pixels avec CtrlToImgX et CtrlToImgY
lColor = oGdi.GetPixel(oGdi.CtrlToImgX(X, Me.Image0), oGdi.CtrlToImgY(Y, Me.Image0))
End Sub

XV-B - LongToRGB

Conversion code couleur Long vers RGB

Paramètres :

Paramètre

Type

Explication

pLong

Long

Valeur de la couleur

pRed

Long

Composante rouge de la couleur

pGreen

Long

Composante verte de la couleur

pBlue

Long

Composante bleue de la couleur

XV-C - SetXPTheme

Active ou désactive le thème XP pour les contrôles.
Permet de réduire le scintillement de l'image (pour WinXP/Acc2003)
La fonction s'applique sur toute l'application, mais seulement sur les contrôles (les barres de menu, barres de titre, ... conservent le thème XP).

Remarque : Utiliser la fonction RepaintControlNoFormRepaint à la place de la fonction RepaintControl aide à réduire significativement les scintillements.

Voir la fonction SetDoubleBufferXP pour réduire les scintillements sans désactiver le thème XP.

Utilisez cette fonction même si vous avez déjà désactivé le thème XP dans les options de la base de données.

Paramètres :

Paramètre

Type

Explication

[pActive]=True

Boolean

Vrai pour activer.
Faux pour désactiver.

Exemple :

Réduire les scintillements si la version d'Access est 2003

' Désactive le thème XP pour réduire les scintillements si la version d'Access est 2003
If SysCmd(acSysCmdAccessVer) = "11.0" Then oGdi.SetXPTheme False

XV-D - SetDoubleBufferXP

Permet de réduire le scintillement de l'image (pour WinXP/Acc2003)

Remarque : Utiliser la fonction RepaintControlNoFormRepaint à la place de la fonction RepaintControl aide à réduire significativement les scintillements.

La fonction de double buffer est gourmande en ressource.
Envisagez l'utilisation de la fonction SetXPTheme pour désactiver le thème XP.

Paramètres :

Paramètre

Type

Explication

pForm

Formulaire

Formulaire dont on veut réduire le scintillement
Privilégiez un formulaire de type indépendant (Fen. Indépendante = Oui).
Si la fonction est appliquée sur un formulaire avec la propriété Fen. Indépendante = Non, alors le double buffer s'applique sur toute l'application et peut faire scintiller d'autres objets.

[pActive]=True

Boolean

Vrai pour activer.
Faux pour désactiver.

Exemple :

Réduire les scintillements si la version d'Access est 2003

' Activer le double buffer pour réduire les scintillements si la version d'Access est 2003
If SysCmd(acSysCmdAccessVer) = "11.0" Then oGdi.SetDoubleBufferXP Me

XV-E - DragForm

Permet le déplacement du formulaire
Cette fonction permet de déplacer le formulaire même s'il n'a pas de barre de titre.

Exemple :

Paramètre

Type

Explication

pForm

Formulaire

Formulaire à déplacer

Comment déplacer le formulaire en cliquant sur une image

' Remarque : Ne fonctionne pas sur l'événement Click
Private Sub Image0_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
oGdi.DragForm Me
End Sub

XV-F - FontSizeToPixel

Conversion taille police en pixel

Convertit une taille de police de caractères en pixel pour la fonction DrawText.
Paramètres :

Paramètre

Type

Explication

pSize

Long

Taille de police

[pCtrlRef]=Nothing

Control

Contrôle de référence

XV-G - PixelToFontSize

Conversion taille police en points

Convertit une taille de police de caractères de pixels en points.

Paramètres :

Paramètre

Type

Explication

pPixel

Long

Taille en pixel

[pCtrlRef]=Nothing

Control

Contrôle de référence

XV-H - GetUserFormHandle

Identifiant d'un userform

Pour Excel.

Paramètres :

Paramètre

Type

Explication

pForm

Long

Objet formulaire

pClientArea

Boolean

Si Faux, la fonction renvoie l'identifiant du formulaire
Si Vrai, la fonction renvoie l'identifiant de la sous-fenêtre sur laquelle on dessine

XV-I - GetClientHandle

Identifiant de la sous-fenêtre sur laquelle on dessine (=section).

Pour Access.

Paramètres :

Paramètre

Type

Explication

pImgCtrl

Image

Objet image contenu dans la section de laquelle on veut l'identifiant.

XV-J - GetControlSize

Lecture de la position d'un contrôle en pixels.

Paramètres :

Paramètre

Type

Explication

pCtrl

Control

Le contrôle.

pX1,pY1,pX2,pY2

Long

Les positions des points haut-gauche et bas-droite du rectangle contenant le contrôle.

[pIncludeBorders]=False

Boolean

Mettre à Vrai (True) pour inclure les bordures.

Renvoit le décalage en pixel de l'image dans le contrôle.

XVI - Les propriétés

XVI-A - ImageWidth et ImageHeight

Taille de l'image en pixels

Type Long en Lecture seule.

C'est la taille de l'image en mémoire.

XVI-B - RefControl

Contrôle de référence pour coordonnées passées en points/twips

Type Control en Lecture/Ecriture.

Si RefControl est défini, les fonctions acceptent des coordonnées passées en Twips (pour Access) ou en Points (Pour Excel).

Pour annuler et repasser en pixels, affectez Nothing à cette propriété.

Exemple :

Affichage d'un pixel rouge à l'emplacement de la souris

' Deux solutions identiques :
'
' 1 - Sans utiliser RefControl
oGdi.DrawPixel oGdi.CtrlToImgX(X, Me.Image0), oGdi.CtrlToImgY(Y, Me.Image0), vbRed
'
' 2 - En utilisant RefControl
oGdi.RefControl = Me.Image0
oGdi.DrawPixel X, Y, vbRed
oGdi.RefControl = Nothing

XVI-C - PenAlignMode

Alignement du crayon

Type Long en Lecture/Ecriture.

Voir énumération EGdi32PenAlignMode
S'applique aux fonctions de dessin (rectangle, polygone, ellipse, ...).

XVI-D - WrapX et WrapY

Décalage d'une image avec enroulement.

Type Long en Lecture/Ecriture.

S'applique aux fonctions DrawImage et DrawBitmap.

Attention : on ne peut pas utiliser WrapX et WrapY en même temps.

XVI-E - LineCap

Début et fin des traits.

Type Long en Lecture/Ecriture.

Voir énumération EGdi32LineCap
S'applique aux fonctions de dessin.

XVI-F - FillTexture

Texture de remplissage.

Type String en Lecture/Ecriture.

S'applique aux fonctions de dessin (y compris des textes), ainsi qu'au remplissage de région (FillRegion).

XVI-G - IconBackColor

Couleur de fond des icones.

Type Long en Lecture/Ecriture.

S'applique aux fonctions de chargement d'image : OpenFile et ImageListAdd.

XVI-H - LastTextBottom et LastTextRight

Position en bas et à droite du dernier texte écrit.

Type Long en Lecture/Ecriture.

LastTextRight n'est correct que si le texte est écrit avec un alignement à gauche.

XVI-I - MaxTextSize, MinTextSize et LastTextSize

Taille du texte ajusté.

Type Long en Lecture/Ecriture.

Si MinTextSize ou MaxTextSize sont différents de 0, le texte va s'ajuster pour tenir dans le rectangle défini dans l'appel à DrawText.
LastTextSize contient alors la dernière taille du texte ajusté.

XVI-J - DrawClipRegion

Region limitant le dessin.

Type String en Lecture/Ecriture.

La région spécifiée limite le dessin à l'intérieur de celle-ci, ou à l'extérieur si le paramètre pInclude est égal à False.

XVI-K - FastRepaintCompatible

Dessin rapide identique à celui d'Access.

Type Booléen en Lecture/Ecriture.

Lors d'un affichage en mode Zoom ou Etendu, il peut y a avoir une différence de rendu entre FastRepaint (ou RepaintControlNoFastRepaint) et RepaintControl.
Mettre ce paramètre à Vrai (=True) pour dessiner de manière identique.

XVII - Conclusion

La librairie gdi32.dll offre de nombreuses possibilités graphiques que l'on peut exploiter dans Access.

Merci à l'équipe Office de developpez.com pour ses relectures, commentaires et encouragements!

XVIII - Les téléchargements

Télécharger la classe au format texte

Ensuite insérez le contenu du fichier dans un module de classe.

Télécharger la base d'exemples au format ACCESS 2000
Télécharger la base d'exemples au format EXCEL 2000