Delphi - Szögek megadására szolgáló komponens

forráskód letöltése
Ebben a példában egy olyan komponenst készítünk, amellyel 0-360 fokos szöget tudunk megadni akár több tizedes pontossággal is. A komponens két jól elkülöníthető részből áll. A szöget megadhatjuk egérrel, grafikusan, a komponens erre szolgáló részében, és beírhatjuk billentyűzetről is, amennyiben pontosabb értékre van szükség. Azt is megadhatjuk, hogy a szöget milyen pontossággal akarjuk bekérni (tizedes jegyek száma).
A mellékelt példaprogram megnyitása előtt az AngleEdit.pas-ban lévő komponenst telepítenie kell a Delphi alá. Ehhez válassza a Component - Install Component menüpontot.
A komponensben található egy szabályos kör alakú rész. Ebben a részben egyrészt látjuk grafikusan a megadott szöget, de akár új szöget is bejelölhetünk az egérrel, csak a megfelelő helyre kell kattintani. A komponensben található egy Edit komponens is, amiben billentyűzetről is megadhatjuk a szög értékét.
Angle
Osztály: TAngleEdit
property Angle: extended;
Ebből a property-ből olvashatjuk ki a beállított szöget, illetve ebben adhatjuk meg. Csak 0-360 közötti értékeket adhatunk meg (0-359.99).
Precision
Osztály: TAngleEdit
property Precision: integer;
Ebben a property-ben adhatjuk meg azt, hogy a szöget hány tizedes jeggyel jelenítjük meg. Ha 0-t adunk meg, akkor csak egész szögek adhatók meg, míg például 2 értéknél a megadott szög 2 tizedes jegyre lesz kerekítve a matematika szabályai szerint.
EditPosition
Osztály: TAngleEdit
property EditPosition: TEditPosition;
Az Edit mező elhelyezkedését adhatjuk meg ebben a property-ben. Vízszintesen ez mindig a kör mellett jobbra helyezkedik el, így ebben a property-ben csak a függőleges pozíciót határozhatjuk meg. A property értékei az alábbiak lehetnek:
  • epTop: a komponens felső oldalához van igazítva;
  • epCenter: a komponens közepére van igazítva (függőlegesen);
  • epBottom: a komponens alsó széléhez van igazítva;
Spacing
Osztály: TAngleEdit
property Spacing: integer;
A grafikus rész és az Edit komponens távolságát adhatjuk meg ebben a property-ben. Az értéket pixelben kell megadni.
OnChange
Osztály: TAngleEdit
property OnChange: TNotifyEvent;
Ez az esemény akkor következik be, amikor a szög értéke megváltozik (Angle property).
GetRect
Osztály: TAngleEdit
function GetRect: TRect;
Ez a függvény a kör alakú rész területének koordinátáit adja vissza egy TRect struktúrában. A terület szélességének és magasságának meg kell egyeznie, ezért a számítás a következőképpen történik: a bal felső sarok koordinátája mindig (0,0). A terület szélessége és magassága megegyezik a komponens magasságával, ha a komponens magassága kisebb, mint a szélessége. Ellenkező esetben a terület szélessége és magassága a komponens szélességével lesz egyenlő, de ekkor az Edit komponens nem lesz látható.
Visszatérési érték
A koordinátákat tartalmazó TRect struktúra.
ReAlign
Osztály: TAngleEdit
procedure ReAlign;
Ez az eljárás végzi el az Edit komponens igazítását. A kör által elfoglalt területből, és a komponens méreteiből kiszámítja az Edit komponens pozícióját és méretét, felhasználva ehhez az EditPosition, Spacing és Font property-ket.
Validate
Osztály: TAngleEdit
function Validate(
Value: string
): string;
Ez a függvény ellenőrzi a paraméterként megadott sztringet, és törli belőle a felesleges karaktereket. Ez a következőképpen történik:
  • a paraméterként megkapott sztringből törli az összes felesleges karaktert, csak a számokat, és az első tizedes elválasztó karaktert hagyja meg;
  • az átalakítás során kapott sztringet átalakítja valós számmá;
  • a számot visszaalakítja sztringgé, felhasználva a Precision property értékét.
Paraméterek
Value: string
Az átalakítandó sztring.
Visszatérési érték
Az átalakított, megfelelő formátumban lévő sztring, amit könnyedén vissza lehet konvertálni számmá.
SetAlignByPos
Osztály: TAngleEdit
procedure SetAlignByPos(
X,
Y: integer
);
Ez az eljárás akkor hívódik meg, amikor a körben megadjuk a szög értékét az egérrel. Az eljárás kiszámolja a kör középpontjához képest a megadott koordináta milyen szögben helyezkedik el, és ezt beírja az Angle property-be.
Paraméterek
X
Az egér X koordinátája (relatív a komponens bal széléhez képest).
Y: integer
Az egér Y koordinátája (relatív a komponens felső széléhez képest).