A GDI+ használatához Windows XP, illetve a .NET Server operációs rendszerekre van szükség. Azonban lehetőségünk van régebbi verziójú operációs rendszereken való használatra is. Ehhez csupán egyetlen, GDIPlus.dll nevű állományt kell az alkalmazásunk számára elérhetővé tennünk. Ez a DLL a Microsoft web oldaláról ingyenesen letölthető. (http://www.microsoft.com/msdownload/platformsdk/sdkupdate/psdkredist.htm) A DLL nem igényel semmilyen regisztrációt, egyszerűen csak tegyük egy olyan könyvtárba, ahonnan alkalmazásunk számára elérhető. A GDIPlus.dll Windows 98-tól, illetve NT 4 SP6-tól felfelé használható. Ettől régebbi operációs rendszer esetén a GDI+ használatáról le kell mondanunk.
Saját alkalmazásunk készítésekor nyilván a GDIPlus.dll-ben lévő függvényeket kell felhasználnunk grafikáink elkészítéséhez. Ez a DLL összesen 609 db függvényt tartalmaz, melyet meghívhatunk alkalmazásunkból. Ehhez azonban nekünk kell elkészíteni a hivatkozást, mivel a Delphi unit-jai ezt nem tartalmazzák. A mellékelt példához szükséges függvény deklarációja megtalálható a mellékelt GDIPlus.pas állományban.
A GDI+ használata előtt inicializálnunk kell azt a GdiplusStartup függvény hívásával. Ennek első paraméterében kapunk vissza egy azonosító számot, melyre a későbbiek folyamán lesz szükségünk. Második és harmadik paraméterében egy-egy struktúrát kell megadnunk.
procedure TForm1.FormCreate(Sender: TObject);
begin
gsi.GdiplusVersion:=1;
...
GdiplusStartup(FToken, gsi, gso);
end;
Amikor már nincs szüksége alkalmazásunknak a GDIPlus.dll-re, akkor kell meghívnunk a GdiplusShutdown nevű függvényt. Ennek egyetlen paraméterében azt a számot kell megadnunk, mely a GdiplusStartup első paraméterében megadott változóba került.
procedure TForm1.FormDestroy(Sender: TObject);
begin
GdiplusShutdown(FToken);
end;
Az előkészületek után már nekiállhatunk a rajzolásnak.
procedure TForm1.FormPaint(Sender: TObject);
var
r: TRectangle;
graphics: DWORD;
brush: integer;
begin
Minden rajzoláshoz szükséges létrehoznunk egy Graphics objektumot, melyet most a Form Canvas azonosítóját felhasználva hozunk létre a GdipCreateFromHDC függvény segítségével. Itt első paraméterként a Canvas Handle property-nek értékét adjuk meg, míg a második paraméterbe kapjuk vissza azt az azonosítót, melyet felhasználhatunk a rajzoláshoz.
graphics:=0;
GdipCreateFromHDC(Canvas.Handle, graphics);
Egy megadott színnel törölhetjük a hátteret a GdipGraphicsClear függvény hívásával. Első paraméterként a kapott graphics azonosítót használjuk, míg másodikként egy ARGB színt kell megadnunk, melyet most feketére választunk. A szín megadásánál egy DWORD értéket használunk, mely négy bájtra bontható. Ebből az első lesz az Alpha csatorna, mely az áttetszőség mértékét adja, majd ezt követik a szokásos RGB színösszetevők bájtjai.
GdipGraphicsClear(graphics, $FF000000);
Következő lépésként létrehozunk egy olyan speciális ecsetet, melyet felhasználva színátmenetes kitöltést adhatunk objektumainknak. Ehhez a GdipCreateLineBrushFromRectI függvényt kell használnunk. Ennek első paraméterében egy olyan struktúrát kell megadnunk, mely hasonlít a Delphi-ben lévő TRect-re, ez is négy integert tartalmaz, mely leír egy téglalapot, csupán az értelmezése más. A Left és Top egyezik a TRect azonos nevű elemével, míg a másik két változó a Width és a Height nevű lesz, mely a téglalap szélességét és magasságát írja le. Az itt megadott téglalap területén képződik a színátmenet.
A következő két paraméterben egy-egy ARGB szín értéket kell megadnunk. E két szín között jön létre a színátmenet.
A negyedik paraméterben adhatjuk meg a színátmenet irányát:
| Értéke |
Leírás |
| 0 |
Vízszintes |
| 1 |
Függőleges |
| 2 |
45 fok lefelé |
| 3 |
45 fok felfelé |
Az ötödik paraméter a színátmenet felhasználási módját szabályozza. Erre főleg akkor van szükség, ha az ecset létrehozásánál megadott téglalap mérete nem egyezik a kirajzolt grafika befoglaló téglalapjának méretével.
| Értéke |
Leírás |
| 0 |
Tile - egymás mellett ismétlés |
| 1 |
TileFlipX - x tengely mentén tükrözés |
| 2 |
TileFlipY - y tengely mentén tükrözés |
| 3 |
TileFlipXY - x és y tengely mentén tükrözés |
A függvény utolsó paraméterében kell megadnunk egy változót, melyben visszakapjuk a létrehozott ecsetet azonosító számot.
GdipCreateLineBrushFromRectI(@r, $FFFF0000, $FFFFFF00, 0, 0, brush);
Az ecset létrehozása után már tényleg csak a rajzolás marad hátra. Egy ellipszis rajzolásához a GdipFillEllipseI függvényt használhatjuk. Itt első paraméterként a már tárolt graphics azonosítót, másodikként az imént létrehozott ecset azonosítóját kell megadnunk. Ezt követően négy szám jön, mely a rajzolandó ellipszis befoglaló téglalapját írja le a következő sorrendben: a téglalap bal széle, teteje, szélessége, magassága.
GdipFillEllipseI(graphics, brush, 100, 20, 100, 100);
Ha már nincs szükségünk az ecsetre, akkor a GdipDeleteBrush függvény hívásával meg kell szüntetnünk a lefoglalt erőforrásokat.