
A mellékelt példaprogram megnyitása előtt a FrenchCards.dpr-ben lévő DLL-t fordítsa le a Delphi-vel, majd telepítse a FrenchCard.pas-ban lévő komponenst. A telepítéshez válassza a Component - Install Component menüpontot.
A komponens CardIndex tulajdonságában állíthatjuk be, hogy melyik lapot jelenítse meg. 57 lap közül választhatunk, az első lap indexe 1. A lapok fajtánként rendezetten, növekvő sorrendben helyezkednek el. A sorrend: kör (1-13), káró (14-26), pikk (27-39) és treff (40-52). Ezeken belül az első lap a 2-es, az utolsó az ász.
53-55-ig három darab joker helyezkedik el. Az utolsó két helyen kétfajta hátlap található.
Ha kiválasztunk egy kártyát, a CardName tulajdonságból lekérdezhetjük a lap magyar nevét.
A komponens rendelkezik OnClick, OnDblClick, OnMouseDown, OnMouseMove és OnMouseUp eseményekkel.
A komponens elkészítése
Először létre kell hoznunk a szükséges képeket, ehhez használhatunk például scannert. A képeket mentsük el JPG formátumba, hogy minél kevesebb helyet foglaljanak.
Ha megvannak a képek, el kell készítenünk egy erőforrás állományt, amelyet majd befordítunk egy DLL-be.
Létre kell hoznunk egy RC kiterjesztésű állományt, amelyben fel kell sorolnunk a képeket, az alábbi módon.
Az első helyen a kép logikai neve helyezkedik el, a lefordított erőforrásban ezzel a névvel tudunk majd hivatkozni a képre. Az RCDATA kulcsszó azt jelenti, hogy a kép az erőforrásba adatként kerül. Az utolsó helyen a kép jelenlegi, fizikai neve szerepel. Minden képet fel kell sorolnunk, külön sorban.
Az RC állományt a Delphi Bin könyvtárában található BRCC32.EXE programmal fordíthatjuk le.
Sikeres fordítás után létrejön a JPG.RES állomány, amelyet be kell másolnunk abba a könyvtárba, ahol a DLL forráskódja helyezkedik el.
DLL létrehozásához válasszuk a File – New – Other menüpontot. A megjelenő New Items ablakban válasszuk a New fület, majd a DLL elemet.
A képeket tartalmazó erőforrást az R direktívával fordíthatjuk be a DLL-be.
A JPG képek kezeléséhez a uses listában fel kell sorolnunk a JPEG unit nevét is, szükség lesz továbbá a Windows unitra is.
Egyetlen függvényre van szükségünk, amely az erőforrások közül kikeres egy képet, és azt TJPEGImage típusként visszaadja.
function GetCard(Index: Byte): TJPEGImage; stdcall;
Egy erőforrást a FindResource függvénnyel kereshetünk meg.
Res:=FindResource(HInstance,PChar('JPG'+IntToStr(Index)),RT_RCDATA);
A Res változóba az erőforrás azonosítója kerül, ha az létezik.
A SizeOfResource függvénnyel lekérdezhetjük az erőforrás méretét, a LoadResource függvénnyel pedig az azonosítóját.
Si:=SizeOfResource(HInstance,Res);
Res:=LoadResource(HInstance,Res);
Létre kell hoznunk egy mutatót, amely a kiválasztott erőforrásra (képre) fog mutatni.
Az erőforrást egy TMemoryStream változóba mentjük el. Létre kell hoznunk egy TJPEGImage típusú objektumot, amelybe a LoadFromStream metódus meghívásával betölthetjük a JPG képet. Ezt az objektumot adjuk vissza a függvény visszatérési értékeként.
Hogy a függvényünk elérhetővé váljon, az exports kulcsszó után fel kell sorolnunk a nevét.
A DLL-t a Project menü bármelyik Compile parancsával lefordíthatjuk.
A kártyák kezelését megvalósító komponenst a TGraphicControl osztályból származtatjuk.
A DLL-ben tárolt függvény eléréséhez a következő deklarációt kell használnunk.
function GetCard(Index: Byte): TJPEGImage; stdcall; external 'FrenchCards.dll';
A CardIndex-ben megadott kép beolvasását a SetCardIndex metódusban végezzük el.
FPicture:=GetCard(Value);
Itt kell gondoskodnunk arról is, hogy a CardName property-be mindig a megfelelő érték kerüljön.
A kártya megrajzolásához felül kell írnunk a Paint metódust. A megjelenítést a TCanvas osztály StretchDraw metódusával végezzük.
if FPicture<>Nil then
Canvas.StretchDraw(Rect(0,0,Width,Height),FPicture);