HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Gázóra komponens készítése


Példaprogram letöltése

4839 bájt

Készítünk egy komponenst, amely a gázórához hasonlóan, körbe forgó számlapok segítségével jelenít meg az egyes helyi értéken szereplő számokat. Helyi érték szerint növekvő sorrendben a számok értéke mindig hatással van az utána következő „görgőre”.

A mellékelt példaprogram megnyitása előtt a GasMeter.pas-ban lévő komponenst telepítenie kell a Delphi alá. Ehhez válassza a Component - Install Component menüpontot.
A GasMeter komponens Value tulajdonságában adhatjuk meg a megjelenítendő értéket. Az itt megadható szám Double típusú. A komponens 6 helyi értéket használ az érték megjelenítésére, ebből adódóan a maximálisan megadható szám 999999.
Az óra hátterének színét a BackColor, a számlapok színét a ForeColor tulajdonságok segítségével adhatjuk meg. A számlapokon megjelenő számok betűtípusát a Font property-n keresztül módosíthatjuk.
A komponenst a TGraphicControl osztályból származtatjuk.
A gázórákhoz hasonló kijelzőkön, egy helyi értéken maximum két szám látható egyszerre, ha az óra görgője éppen két szám között áll. Ilyenkor mindig a felső számot kell néznünk, amíg az el nem tűnik.
Ahhoz, hogy a komponenssel folyamatos görgetést tudjunk biztosítani, elegendő helyi értékenként két számlapot elkészítenünk. Ennek a két számlapnak a Top koordinátáját és az általuk megjelenített számokat folyamatosan frissítjük. Mivel a számlap szélessége függ a komponens Width tulajdonságától, azt nem kell eltárolnunk. Elegendő a számlapon megjelenítendő számot és a lap Top koordinátáját megjegyeznünk. Ehhez létrehozunk egy új típust.
TCards = record
  Top: Integer;
  Number: Char;
end;
A számlapokat egy kétdimenziós tömbben tároljuk el. Az első index az oszlopot, a második a sort jelenti.
FCards: array[1..6,1..2] of TCards;
A komponens megrajzolásához felül kell írnunk a Paint metódust. A megjelenítést két részre bontjuk, előkészítésre és kirajzolásra. A Paint metódusban meghívjuk a SetCards metódust, amely beállítja a szükséges számokat a számlapokra, valamint a lapok Top koordinátáit, ezzel elvégezve az előkészítési fázist.
Procedure SetCards;
A Value tulajdonságban megadott szám tartalmazhat egész vagy tört értékeket egyaránt. A komponens csak az egész részt jeleníti meg, de az utolsó helyi értéken szereplő számlapra hatással van a tört rész is.
A Value property-ben megadott szám egész részét, sztring formában eltároljuk a Decimal változóban. A változó tartalmát balról feltöltjük 0 karakterekkel, hogy mérete pont 6 karakter legyen. Így egy for ciklus segítségével könnyedén beállíthatjuk az első sor számértékét.
FCards[i,1].Number:=Decimal[i];
A második sorban elhelyezkedő számlapoknak eggyel nagyobb számot kell megjeleníteniük, mint az első sornak.
if Ord(Decimal[i])<57 then
  FCards[i,2].Number:=Chr(Ord(Decimal[i])+1)
else
  FCards[i,2].Number:='0';
A számok meghatározásakor kihasználjuk azt, hogy az ASCII kódtáblában a számok 0-9 sorrendben egymás után helyezkednek el.
A számok beállításával kész vagyunk, most meg kell határoznunk, hogy az egyes számlapokból mennyi rész legyen látható. A Decimal változó tárolja az egész részt, a d változóba eltároljuk a tört részt.
d:=FValue-StrToFloat(Decimal);
A számlapok magasságát a komponens Height tulajdonságának függvényében határozzuk meg, úgy hogy alul és felül is még 3 képpontnyi sáv maradjon. A lapokat a 3 sortól kezdjük majd kirajzolni.
A d változóban eltárolt tört rész az utolsó helyi értéken lévő számlap megjelenésére van hatással.
FCards[6,1].Top:=3-Round(CardHeight*d);
A maradék 5 számlap helyzete mindig csak a mögötte lévő értékétől függ.
for i:=5 downto 1 do
  FCards[i,1].Top:=3-Round(CardHeight/10*StrToInt(FCards[i+1,1].Number));
Ezzel meghatároztuk az első számlapsor Top koordinátáit. A második sor tetejének mindig egy CardHeight magassággal kell lejjebb lennie.
Miután minden adatot előkészítettünk, a Paint metódusban csak meg kell rajzolnunk a kijelzőt.
A koordináták számolásánál itt is be kell kalkulálnunk, hogy a számlapok körül 3 képpont szabadon maradjon a háttérnek. Az egyes helyi értékek között 2 képpontot hagyunk ki.

Könyv
Ez a cikk megtalálható ebben a könyvben: Delphi Software Offline 2003 évkönyv 60. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |