Delphi - Diagram komponens készítés

forráskód letöltése
Készítünk egy olyan komponenst, melyben grafikusan tudunk megjeleníteni egy egész számot két értékhatár között. Ha a megjelenítendő adatok mennyisége már meghaladja a komponensben elférők számát, akkor folyamatosan görgetni kezdjük a diagram tartalmát. Készítünk egy olyan komponenst, melyben grafikusan tudunk megjeleníteni egy egész számot két értékhatár között. Ha a megjelenítendő adatok mennyisége már meghaladja a komponensben elférők számát, akkor folyamatosan görgetni kezdjük a diagram tartalmát.


Mellékelt példa megnyitása előtt a Diagram.pas-ban lévő komponenst telepítenie kell a Delphi-be.

A komponenst a TCustomControl-ból származtatjuk. Létrehozunk benne egy tömböt FBuffer néven, mely egyszerre 80 számot képes tárolni. A diagram ezt a tömböt fogja grafikusan megjeleníteni. Ha majd ennél több adat áll rendelkezésre, akkor mindig csak az utolsó 80 számot fogjuk tárolni.

A diagram kirajzolását a Paint eljárás végzi. Itt első lépésként megrajzoljuk a diagram hátterében látható rácshálót két FOR ciklus segítségével.

Létrehozunk egy FCount globális változót is. Ebben tároljuk el, hogy hány darab szám került tárolásra az FBuffer tömbbe.

Ha már legalább két értékünk van, akkor elkezdhetjük a kirajzolást, hiszen egy vonal húzásához két végpont már elegendő.

Egy ciklus segítségével végig megyünk az FBuffer tömbön és megjelenítjük az összes vonalat egymás után.

Utolsó lépésként pedig a komponens tetejére kiírunk egy számot. Ez a szám a diagram utolsó elemének az értékét fogja megjeleníteni a felhasználó számára.


Az FBuffer feltöltésére létrehozunk egy AddItem nevű eljárást. Ennek egyetlen integer típusú paraméterében adhatjuk át a következő számot megjelenítésre.

Az adat tárolása előtt ellenőrizzük, hogy van-e még hely a tömbben. Ha még van, akkor eltároljuk a soron következő helyre az FBuffer tömbben. Ha már nincs hely, vagyis megvan a 80 db szám, akkor először egy FOR ciklussal a tömb összes elemét egy hellyel előre léptetjük, majd az új elemet a tömb utolsó pozíciójára írjuk be.

Végül már csak a képernyő frissítése marad hátra, melyet az Invalidate eljárás meghívásával kezdeményezünk.


A komponens persze nem mondható teljes értékűnek jelen állapotában. Korlátja a komponensnek, hogy nem kezel automatikusan egy tetszőleges értékhatárt. Így a megjeleníthető érték csak nulla és a komponens magassága között lehet.

További szépséghiba, hogy a megjelenítendő elemek számát jó lenne egy property-n keresztül beállítani és nem fixen 80-ra választani.