
A mellékelt példaprogram megnyitása előtt a HungarianCard.pas-ban lévő komponenst telepítenie kell a Delphi alá. Ehhez válassza a Component - Install Component menüpontot.
A komponens használata
Amikor elhelyezzük a komponenst egy Form-on, a CardIndex tulajdonság beállításával választhatjuk ki, hogy melyik lapot jelenítse meg a pakliból. A magyar kártyában 32 lap található, ennek megfelelően a tulajdonság értéke is 1-32 intervallumban mozoghat. A kártyák színenként csoportosítva, növekvő sorrendben helyezkednek el.
Az 1-es index a piros alsóé, 2-es a piros felső. A színek sorrendje: piros, zöld, tök és makk. Ennek megfelelően, például a 29-es index a makk nyolcast azonosítja.
Amikor a CardIndex tulajdonság alapján kiválasztunk egy kártyát, a CardName tulajdonságban megjelenik a lapnak a neve, a CardValue-ban pedig a lap értéke. Minden egyes alkalommal, amikor a CardIndex tulajdonságot módosítjuk, a CardName-be és CardValue-ba az alapértelmezett értékek kerülnek. A lapok betöltődése után ezeket az értékeket akár módosíthatjuk is.
A komponens rendelkezik az OnClick, OnDblClick, OnMouseDown, OnMouseMove és az OnMouseUp eseményekkel.
A komponens elkészítése
Először valamilyen formában elő kell állítanunk a kártyalapok képeit. Ezt megtehetjük, mondjuk egy scanner segítségével. A képeket célszerű BMP formátumban elmenteni, a könnyebb alkalmazhatóság miatt.
A képekből erőforrás állományt kell készítenünk, hogy azokat befordíthassuk az exe fájlba. Ha így teszünk, akkor nem kell a képeket is lemásolnunk a program mellé.
Az erőforrás állomány létrehozásához a BMP képeket másoljuk egy könyvtárba. Hozzunk létre egy bmp.rc állományt, ugyanabban a könyvtárban, ahová a képeket helyeztük. Ezt bármilyen szövegszerkesztő programmal megtehetjük. Minden egyes képhez az RC állományban el kell helyeznünk egy sort.
Amikor majd fordítás után létrejön az erőforrás állomány, és azt beépítjük az alkalmazásunkba, a 01.BMP nevű képre, BMP1 néven hivatkozhatunk majd. A 01.BMP az első lapot ábrázoló kép jelenlegi, fizikai neve. Az RCDATA kulcsszó a létrejövő erőforrás típusát határozza meg. A képeket célszerű valamilyen logika alapján sorba rendezni.
Ha megszerkesztettük az RC állományt, akkor nincs más hátra, minthogy lefordítsuk azt. Ezt a Delphi, Bin alkönyvtárában található a BRCC32.exe program segítségével tehetjük meg. A BRCC32.exe-nek az RC állomány elérési útját és nevét kell paraméterként megadni.
Ha a fordítás sikeresen lezajlott, létrejön a BMP.res, erőforrás állomány, amelyet beépíthetünk az exe-be. Az erőforrás állományt másoljuk ugyanabba a könyvtárba, ahová a komponens forráskódját helyezzük.
Komponensünket a TGraphicControl osztályból származtatjuk. Az erőforrás használatához az implementation kulcsszó után el kell helyeznünk az alábbi sort:
A komponens Create metódusában célszerű az erőforrás tartalmát egy ImageList objektumba felfűzni, a későbbi gyors használhatóság érdekében.
Egy erőforrást a FindResource függvény segítségével kereshetünk meg.
Res:=FindResource(HInstance,PChar('BMP'+IntToStr(i)),RT_RCDATA);
Ha az erőforrás létezik, akkor a SizeofResource függvénnyel lekérdezhetjük annak 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.
Miután a LockResource függvénnyel azonosítottuk az erőforrást, azaz az adott képet, azt be tudjuk tölteni egy TMemoryStream típusú objektumba. Ebből a MemoryStream-ből be tudjuk tölteni a képet egy TBitmap objektumba, a LoadFromStream metódus segítségével.
A BMP képet el kell helyeznünk az FImageList objektumban, és a továbbiakban csak az ImageList megfelelő indexére kell hivatkoznunk.
A CardIndex tulajdonsággal kiválasztott képet a Paint metódusban tudjuk megjeleníteni. Ehhez a TCanvas osztály StretchDraw metódusát használhatjuk.
Canvas.StretchDraw(Rect(0,0,Width,Height),Bitmap);
A metódus egy megadott területre, „kifeszíti” a képet.
A CardIndex property értékének beállítására szolgáló SetCardIndex metódusban kell gondoskodnunk arról, hogy a CardName és a CardValue tulajdonságok megfelelő értékeket kapjanak, amikor a CardIndex értéke módosul.
A komponensben használni kívánt eseményeket csak fel kell sorolnunk a published deklarációban, hiszen azokat közvetve örököltük a TControl osztályból.