111
1 DIPLOMAMUNKA Török György Budapest 1999

DIPLOMAMUNKA - · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

  • Upload
    buihanh

  • View
    216

  • Download
    1

Embed Size (px)

Citation preview

Page 1: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

1

DIPLOMAMUNKA

Török György

Budapest 1999

Page 2: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

2

GÁBOR DÉNES

FŐISKOLA

Logikai adatszerkezeti ábra Szerkesztő

Sorszáma: 763/1999

Török György

Budapest 1999

Page 3: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

3

Tartalomjegyzék

1 TARTALOMJEGYZÉK........................................................................................................................1

2 BEVEZETŐ ............................................................................................................................................4

2.1 TÉMAVÁLASZTÁS .................................................................................................................................4

2.2 FEJLESZTŐESZKÖZ ................................................................................................................................4

2.3 FELADATSPECIFIKÁCIÓ .........................................................................................................................6

2.4 OBJEKTUMORIENTÁLT PROGRAMOZÁS .................................................................................................9

2.5 A LOGIKAI ADATELEMZÉS (LOGICAL DATA MODEL)..........................................................................11

3 RENDSZERTERV ...............................................................................................................................16

3.1 NAGYVONALÚ PROGRAMTERV ...........................................................................................................16

3.2 OSZTÁLYDIAGRAM..............................................................................................................................17

3.3 OBJEKTUMDIAGRAM...........................................................................................................................18

3.4 OSZTÁLYLEÍRÁS .................................................................................................................................19

3.5 METÓDUSLEÍRÁS ................................................................................................................................38

3.5.1 TDrawinDesk ...........................................................................................................................38

3.5.2 A TShapeEntity osztály.............................................................................................................84

3.5.3 A ContactLine osztály...............................................................................................................87

3.5.4 A TWorkPad osztály .................................................................................................................89

3.5.5 A TMainForm osztály...............................................................................................................95

4 MELLÉKLETEK.................................................................................................................................99

4.1 FELHASZNÁLÓI KÉZIKÖNYV................................................................................................................99

4.2 NYOMTATÁSI KÉPEK.........................................................................................................................107

5 TAPASZTALATOK, TOVÁBBFEJLESZTÉSI LEHETŐSÉGEK ..............................................110

6 KÜLSŐ FORRÁSANYAGOK ..........................................................................................................111

6.1 IRODALOMJEGYZÉK ..........................................................................................................................111

6.2 TANULMÁNYOZOTT ALKALMAZÁSOK...............................................................................................111

Page 4: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

4

1 Bevezető

1.1 Témaválasztás

A számítógépes rendszerek kifejlesztése egyike a legösszetettebb vállalkozásoknak.

Ilyen rendszerek létrehozása mintegy 3-4 évtizeddel ezelőtt kezdődött el és világszerte több százezer szakember vett részt a munkákban. Mégis az a tapasztalat, hogy viszonylag kevés volt a sikeres információs rendszerfejlesztési projekt. Ez a szomorú mérleg nagyban ösztönözte a jobb minőségű információs rendszerek létrehozását biztosító módszertanok kifejlesztését. E fejlesztési törekvések egyik eredménye a strukturált fejlesztési módszertanok megalkotása, melyek technológiai folyamatként fogták fel az egész rendszerfejlesztési munkát és pontosan meghatározták a feladatokat. Ilyen strukturált rendszerelemzési és -tervezési módszer például a 80-as években kifejlesztett SSADM (Stuctured System Analysis and Design Method). A rendszerszervezők tehát egy olyan szabványos technológia alapján dolgozhatnak, amelyek -helyes használat esetén- szavatolják az eredményes számítógépes rendszerfejlesztéseket. A strukturált módszertanok fontos jellemzője hogy egységes rendszerként kezeli az egymással összefüggő, sőt egymásra épülő módszereket. Ezeket a módszereket többnyire technikáknak szoktuk nevezni. Vannak olyan technikák, amelyeket ezekkel a módszertanokkal egyidejűleg fejlesztettek ki, de többségük már korábban is ismert volt valamilyen formában. Néhány példa a technikákra: adatmodellezés, folyamatmodellezés, dialógustervezés, esemény modellezés, stb. Természetesen ezek a technikák is több elemből tevődnek össze.

A módszertanok a rendszerfejlesztéshez szükséges kommunikáció támogatásának érdekében előszeretettel használják a képi ábrázolás lehetőségét, tehát különböző diagramok segítségével teszik átláthatóvá az adott technikát. Jelen szakdolgozat témája is egy ilyen diagram készítő szoftver megtervezése és elkészítése, amely az adatmodellezés egyik elemét a logikai adatszerkezeti ábra vizuális tervezését támogatja Az elkészítendő alkalmazás az SSADM dokumentációjában megfogalmazott jelölésmódot valósítja meg.

1.2 Fejlesztőeszköz

A fejlesztőeszköz kiválasztásánál alapvető szempont volt, hogy az elkészítendő

alkalmazás a legelterjedtebb PC-s operációs rendszereken működjön, amelyek jelenleg a 32-bites Microsoft Windows operációs rendszerek. (Windows’95, Windows’98, Windows NT). A konkrét fejlesztő eszköz kiválasztásánál elsősorban azt vettem figyelembe, hogy az minél széleskörűbben támogassa a grafikai alkalmazások készítését és az objektumorientált programozást. Mivel a windows-os fejlesztőeszközök közül a legnagyobb gyakorlatot Borland Delphi-ben szereztem, ezért választásom a Borland Delphi 3.0-ás verziójára esett.

Page 5: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

5

A program tervezéséhez az UML1 technikát alkalmaztam és a dokumentációban Angster Erzsébet, „Az Objektumorientált tervezés és programozás alapjai” című könyv eszköz rendszerért használtam. A bonyolultabb metódusokat Jackson ábrák2, a rajzolási mechanizmusokat egyéb ábrák segítségével próbáltam áttekinthetőbbé tenni. Az alkalmazás külső megjelenésére, kezelési mehanizmusára erős hatással volt a PowerSoft, S-Designor AppModeler szoftvere.

1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra.

Page 6: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

6

1.3 Feladatspecifikáció

Legyen egy rajzasztal, amelyen egyedeket jelölő, lekerekített sarkú téglalapokat

(egyedtéglalap) helyezhetünk el, melyeket kapcsolatokat jelölő vonalakkal (kapcsolatvonal) köthetünk össze. Alapelvek: - A felhasználói felület és a kezelési mechanizmus tervezésekor, kivitelezésekor

törekedni kell a mai vizuális rajzoló, dokumentumkezelő, modellező alkalmazásokban használt -jól bevált- megoldások alkalmazására, mivel így gyorsabban elsajátítható a program kezelése.

- A programnak követnie kell a ’WYSIWYG’ (What You See Is What You Get) és a ’Look and Feel’ elveket, vagyis a képernyőn látható ábrának kell megjelennie a nyomatón is, valamint a felhasználó által kiváltott események hatására bekövetkező változásokat azonnal meg kell jeleníteni.

- Az alkalmazásban az un. MDI több ablakos technikát kell használni, ahol az egyes funkciókat toolbar-on és menürendszeren keresztül kell elérhetővé tenni. A nyitott ablakok (modellek) közötti váltást egy dinamikus menü segítségével kell biztosítani.

- Továbbá biztosítani kel az ablakok belső tartalmának görgetését belsejének ’megragadásával’ majd ’vonszolásával’. Az egérkurzor formájának jeleznie kell az éppen aktuális rajzolási, vezérlési állapotot.

1. Rajzasztal (rajzolási felület) A rajzfelületet egymásmellé helyezett szabványos papírlapoknak kell alkotni, így a modell készítése nem korlátozódik az A4-es lapok fizikai kereti közé. (1. Ábra)

Biztosítani kell a rajzasztal nagyítását és kicsinyítését. A rajzasztal tulajdonságait dialógus ablakokon keresztül lehessen beállítani: - rajzasztalt felépítő papírlapok méretét és orientációját - a modellre vonatkozó fejlécet, (cím, szerző, verzió,…stb.)

1 2 3 4 5

1

2

3

Lapszélesség

Lapmagasság

egy lap

Lapok

Lapok

Modell

1. Ábra

Page 7: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

7

- rácspontok színét, egymáshoz viszonyított távolságát (a rácspontok az elhelyezendő objektumok pontosabb pozícionálását segíti elő)

- a rácspontok engedélyezését, megjelenítésének engedélyezését - az újonnan elhelyezett egyedtéglalapok alaptulajdonságait - az újonnan elhelyezett kapcsolatvonalak alaptulajdonságait Biztosítani kell a modell nyomatatási képének vázlatos megjelenítését, a nyomtatási paraméterek beállítását és a modell nyomtatását. A nyomtatás paramétereit dialógus ablakon keresztül lehessen beállítani: - nyomtató tulajdonságait - keretengedélyezést - színes és monokróm nyomtatást - példányszámot Biztosítani kell a rajzasztal és a rajta elhelyezkedő objektumok háttértárra történő mentését és visszatöltését, valamint a jelölt objektumok vágólapra helyezését, illtetve onnan történő visszatöltését. 2. Egyedtéglalap Az egyedtéglalap szolgál a logikai adatmodell egyedeinek megjelenítésére, tulajdonságaiknak tárolására. Az egér használatával kell biztosítani az egyedtéglalapok létrehozását, áthelyezését, átméretezését és tulajdonságainak beállítását. Az áthelyezést és átméretezést a klasszikus „drag and drop” módszerrel kell megvalósítani: - a bal egérgomb lenyomásával „megfogjuk” az objektumot, - az egérkurzort a kívánt pozícióba visszük („vonszoljuk az objektumot”), - végül felengedjük, a mozgatás alatt nyomva tartott egérgombot, vagyis „elengedjük” az

objektumot. (Objektum alatt itt az egyedtéglalap és kapcsolatvonal értendő!)

Az egyedtéglalapok kijelölését el lehessen érni - egyedileg: a bal egérgomb lenyomásával; - egyenként: a shift billentyű és a bal egérgomb lenyomásával; illetve - csoportosan: a csoport kijelölő kerettel. (Természetesen az egérgomb lenyomása az egyedtéglalap felületén értendő.)

A jelöltség egy állapot, melynek hatására az egyedtéglalap 4 sarkában és 4 oldalvonalának közepén egy-egy piros négyzet jelenik meg. (2. Ábra)

1 2 3

4

567

8

Piros négyzet

Egyedtéglalap

2. Ábra

Page 8: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

8

Csoportosan kijelölt egyedtéglalapok esetén az átméretezését, áthelyezését és a tulajdonságok beállítását a csoport valamennyi tagjára érvényesíteni kell. A csoportot jelölő keretet a következőképpen kell működtetni (3. Ábra): - az egérkurzort a kijelölésre szánt terület bal-felső sarkába visszük, - majd az egérgombot lenyomva -és folyamatosan nyomva tartva- a kijelölésre szánt

terület bal-alsó sarkába húzzuk, - itt felengedve az egérgombot a kereten belül elhelyezkedő valamennyi objektum

(egyedtéglalap, kapcsolatvonal) jelölt állapotba kerül.

Az egyedtéglalap tulajdonságait dialógus ablakon keresztül lehessen beállítani (4. Ábra): - az egyedtéglalap megnevezését, (a megnevezés akár több soros is lehet és az

egyedtéglalap közepén kell elhelyezni) - a megnevezés szövegének ’font’ tulajdonságát - vízszintes és függőleges méretét - a keretének színét, vastagságát - az egyedtéglalap háttérszínét

3. Kapcsolatvonal A kapcsolatvonal szolgál a logikai adatmodell kapcsolatainak megjelenítésére, tulajdonságaiknak tárolására (5. Ábra). A kapcsolatvonal alapjellemzői és kezelése: - Egyik vége mindig ’csirkelábban’ a másik egy egyenesben kell, hogy végződjön. Tehát

csak 1:N jellegű kapcsolat ábrázolható. Amennyiben a modellezendő kapcsolat nem ilyen, akkor azt ilyen formára kell hozni.

- Az egér használatával kell biztosítani a létrehozását, áthelyezését és tulajdonságainak beállítását.

(x1,y1)

(x2,y2)

jelölő keret

egyedtéglalap

kapcsolatvonal

3. Ábra

KeretHáttérszín

Több

soros

szöveg

Egyedtéglalap

Magasság

Szélesség

4. Ábra

Page 9: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

9

- Végpontjai minden esetben két különböző egyedtéglalapon kell, hogy elhelyezkedjen. - Függőleges és vízszintes szakaszokból (max:3) kell felépíteni. - A felépítő szakaszok számát és elhelyezését egy algoritmus alapján a programnak kell

elvégezni, méghozzá a kapcsolatvonal által összekötött egyedtéglalapok egymáshoz viszonyított helyzete alapján.

- Azonosító nevét a kapcsolatvonal közepén kell elhelyezni. A kapcsolatvonalak kijelölését el lehessen érni - egyedileg: a bal egérgomb lenyomásával; - egyenként: a shift billentyű és a bal egérgomb lenyomásával; - csoportosan: a csoport kijelölő kerettel. (Természetesen az egérgomb lenyomása a kapcsolatvonal szűk környezetében értendő.) A csoport kijelölés menete megegyezik az egyedtéglalapnál leírtakkal.

A kapcsolatvonal tulajdonságait dialógus ablakon keresztül lehessen beállítani: - a kapcsolat megnevezését - a kapcsolat jellegét szaggatott vonallal (Létezhet-e az egyed anélkül, hogy létezne az

adott kapcsolatban hozzá kapcsolt másik egyed, vagy sem) - a kapcsolat kizáró-vagy jellegű, vagy sem - a kapcsolatvonal színét, vastagságát Csoportos jelöltségű kapcsolatvonalak esetén a tulajdonságok beállítását a csoport valamennyi tagjára érvényesíteni kell. Kapcsolatvonalak törlése esetén gondoskodni kell a hozzá tartozó egyedtéglalapok törléséről is.

1.4 Objektumorientált programozás

A vizuális tervező alkalmazásokkal különböző alakzatokat helyezhetünk el a

képernyőn. Ezeknek az alakzatoknak megváltoztathatjuk bizonyos tulajdonságait, mint pl.: pozíció, méret, szín, stb. Rögtön felvetődik a gondolat, hogy alkossuk meg ezeknek az alakzatoknak egy olyan vázát, mely tartalmazza a rá vonatkozó adatokat, valamint az adatokon dolgozó eljárásokat. Az így meghatározott váz alapján ezután már könnyedén

Végpont

2. szakasz

Csirkeláb Végpont

Kizáró kapcsolat

Kapcsolatvonal

EgyedtéglalapKapcsolat azonosító

5. Ábra

Page 10: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

10

tudnánk azonos viselkedésű alakzatokat (példányokat) létre hozni. Az ilyen feladatok megoldásának leghatékonyabb eszköze az objektumorientált programozás. Ebben a fejezetben szeretném néhány mondatban összefoglalni ezt a programozási szemléletet. „Az objektumorientált program egymással kommunikáló objektumok összessége, melyben minden objektumnak meg van a jól meghatározott feladata.”3

Az objektumorientált szemléletben az objektumok a modellezendő valós világ egy-

egy önálló egységét jelölik. Az objektumokat meghatározzák belső állapotuk és a nekik küldhető üzenetekre történő reagálásuk. Ez a „reagálás” jelentheti azt, hogy megváltozik az objektum belső állapota és/vagy az objektum elvégez valamilyen műveletet, kijelez a külső világ számára valamilyen értéket, üzenetet küld más objektumoknak, létrehoz, töröl, másol, illetve mozgat más objektumokat. Mivel ezeket az objektumokat egymástól meg kell tudnunk különböztetni, ezért minden objektum egyértelműen azonosítható. Tehát két objektum akkor sem azonos, ha tulajdonságaik, állapotaik tökéletesen a megegyeznek

A valós világ leírásakor általában az objektumokat bizonyos tulajdonságaik

azonossága alapján osztályokba soroljuk. Az osztályok csupán típusspecifikációk, minták, amelyek alapján objektum példányokat, objektumokat hozhatunk létre. A fenti feladatot alapul véve egy alakzat megfeleltethető egy objektumnak, míg annak váza

megfeleltethető egy osztálynak

Egy osztály definiálható kell, hogy legyen, mint egy másik osztály leszűkítése vagy

kiterjesztése. Ekkor az új osztály a kiindulásul vett osztály örököse vagy utóda, illetve a kiindulásul vett osztály az új osztály szülője vagy őse. Az utód osztály tehát örökölhet tulajdonságokat és viselkedésformákat az ős osztálytól. Az utód osztályban csak az ős osztálytól való eltéréseket kell megadni. Tételezzük fel, hogy van egy négyzet osztályunk, mely rendelkezik egy méret és egy szín

tulajdonsággal. Ha szükségünk van egy téglalap osztályra is, akkor a téglalapot a

négyzetből örököltetjük és csupán egyetlen tulajdonsággal -egy újabb mérettel- egészítjük

ki. Az öröklés miatt a másik méret és szín tulajdonsággal már rendelkezni fog.

Az objektumok fontos tulajdonsága az egybezártság. Az objektumok belseje

sérthetetlen, vagyis az objektumokat csak üzeneteken keresztül kérhetjük fel egy-egy művelet végrehajtására, melynek pontos elvégzéséért is az objektum a felelős. Az üzenetet feldolgozó programegységet (utasítássorozatot) metódusnak hívjuk.

Az objektumok „felkérhetik” egymást különböző feladatok elvégzésére. Ezt a felkérést üzenetküldésnek, vagy kérelemnek szokás nevezni, amely valójában egy kívülről elérhető metódus meghívását jelenti. Az üzenetküldésben az üzenetet küldő objektum a ’Szerver’ az üzenetet fogadó a ’Kliens’. Természetesen ugyanaz az objektum lehet egyszer kliens, máskor szerver. Amennyiben minden alakzatnak meg akarjuk változtatni színét, akkor az alakzatokat

tartalmazó objektum (ablak) egy-egy üzenet küld az alakzatoknak.

A polimorfizmus az objektumok esetében azt jelenti, hogy az objektum-

hierarchiában a különböző objektumtípusok ugyanazt a tulajdonságot azonos néven definiálják, viszont ez más lehet a megvalósítás tekintetében. Ezáltal egy végrehajtandó

3 Angster Erzsébet, Az objektumorintált tervezés és programozás alapjai

Page 11: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

11

feladat többféle alakban is szerepelhet, attól függően, hogy hol helyezkedik el az osztályhierarchiában. Tételezzük fel, hogy a téglalap és a négyzet objektumok rendelkeznek a nagyítás(százalék)

metódussal. Ha négyzetnek küldünk egy nagyítás(5) üzenetet, akkor a négyzet – a saját

metódusa alapján- 5 %-kal növeli oldalának értékét. Ugyan erre az üzenetre a téglalapnak

növelnie kell minkét oldalának méretét. Tehát ugyan arra az üzenetre, eltérő a két

objektum reagálása.

1.5 A logikai adatelemzés (Logical Data Model)

Az adatfeldolgozási feladatokat egyfajta „szabványosított” modellekben un.

adatmodellekben célszerű kezelni. Ezek a modellek három szerkezeti elemből: az egyedből, a tulajdonságból, és a kapcsolatból épülnek fel. E három elemből az egyedek és kapcsolatok ábrázolására több féle módszer terjedt el, mint például a Chen féle, a „varjú lábas” és az SSADM által javasolt. Ez utóbbi jelölésmód pontos leírását az SSADM dokumentációján belül a ’Logikai adatszerkezeti ábra’ fejezetben találhatjuk meg. Ennek célja, hogy egy áttekinthető ábrán jelenítse meg az egyedeket és kapcsolataikat, azok pontos leírása nélkül. (A leírásokat az objektumokhoz rendeljük, de azokat az ábrán nem szerepeltetjük.) Bár a technika meghatározza az egyedek és kapcsolatok jelölésmódját, az általam vizsgált egyetlen tervező eszköz sem támogatta ezt. A fő eltérést a kapcsolatok megjelenítésben találtam, illetve volt olyan, amely csak az attributomokkal ellátott egyedábrázolást támogatta. Ebben a fejezetben összefoglalom a logikai adatmodellezés fontosabb elemeit, valamint az SSADM által javasolt jelöléseket. Az adatmodellek alapelemei: - Egyed

Egyednek hívunk minden olyan dolgot, ami minden más dologtól megkülönböztethető és amiről adatokat tárolunk. Pl.: dolgozó, autó, személy. Az egyed konkrét dolgok absztrakciója, konkrét dolgokat fog egybe. Pl.: az autó mint

egyed sok autót jelent. Egy egyed által képviselt konkrét elemek halmazát egyedhalmaznak is szoktuk nevezni. Pl.: a dolgozó nevű egyed egyedhalmaza az

összes dolgozókból áll. Az egyed egy konkrét értékét az egyed egy előfordulásának nevezzük.

- Tulajdonság

Az egyedeket tulajdonságokkal (attribútomokkal) írjuk le. A tulajdonság az egyed egy jellemzője, ami megadja, meghatározza az egyed egy részletét. Pl.: A dolgozó nevű

egyed tulajdonsági lehetnek: azonosító, név, cím, fizetés, stb. A tulajdonság is voltaképpen egy absztrakció, amely több elemet foglal egybe, tehát konkrét értékekből előfordulásokból áll.

- Kulcs

Amennyiben egy tulajdonság vagy tulajdonságok egy csoportja egyértelműen meghatározza, hogy az egyed melyik értékéről, előfordulásáról van szó, akkor ezeket a tulajdonságokat együtt elsődleges kulcsnak nevezzük.

Page 12: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

12

- Kapcsolat Kapcsolatoknak nevezzük az egyedek közötti viszonyt. A kapcsolat mindig valóságos objektumok közötti viszonyt fejez ki, hiszen az egyed ilyen objektumokat képvisel. Pl.: Ha vevő az egyik egyed a rendelés a másik, akkor a vevő és a rendelés egyedtípusok között vevő-rendelés kapcsolat van, hiszen a vevő rendelést ad le, a vevőhöz tartoznak rendelések. A kapcsolat foka: Attól függően, hogy egy adott egyed egy előfordulásához hány előfrodulás kapcsolódik a másik egyedből három esetet különböztetünk meg. a) Egy-egy típusú kapcsolat (1:1 kapcsolat) A kapcsolat lehet olyan, hogy az egyik egyedhalmaz mindegyik eleméhez a másik egyedhalmaz pontosan egy eleme kapcsolódik Az ilyen kapcsolatot egy-egy típusúnak nevezzük. Pl: a rendszám egyed és a gépkocsi egyed között a kapcsolat 1:1

b) Egy-több típusú kapcsolat (1:N kapcsolat) Legyen A és B két egyed. A két egyed között egy-több típusú kapcsolat van, ha az A egyedhalmaz mindegyik eleméhez a B egyedhalmaz több eleme is tartozhat. Pl: A

számla egyed és a számlatétel egyed között 1:N kapcsolat van. Mindegyik számlához

több tétel tartozik. Egy tétel nem tartozhat több számlához.

c) Több-több típusú kapcsolat (N:M kapcsolat) Legyen A és B két egyed. A két egyed között több-több típusú kapcsolat van, ha az A egyed minden eleméhez a B egyedhalmaz több eleme tartozhat, és fordítva egy B-beli elemhez is több A-beli elemet rendelhetünk hozzá. Pl: Az alkatrész egyed és az autó

egyed között N:M kapcsolat van. Egy alkatrész több autóba is beszerelhető és egy autó

javításához több alkatrész is felhasználható.

A fentiek alapján egyszerűen megfogalmazjató az adatmodell fogalma: “Az adatmodell egyedek, tulajdonságok, és kapcsolatok halmaza, amely absztrakt módon

tükrözi a valós objektumoknak, azok jellemzőinek (tulajdonságainak) és viszonyainak

(kapcsolatainak) elvont kategóriáit.”4

4 Dr. Szelezsán János, Adatbázisok

Page 13: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

13

A logikai adatmodell helye az SSADM-ben: A logikai adatmodellezés célja: „Valamely szervezet (vállalat, intézmény) működéséhez szükséges adatok feldolgozási követelményektől független és feldolgozó, ill. tároló eszközök lehetőségei által nem korlátozott leírása, belső, logikai szerkezetének meghatározása.”5 A logikai adatmodellezés (LDM, Logical Data Model) a logikai adatszerkezet és kapcsolódó dokumentumainak elkészítésére irányul. A technika az egyedek és köztük létezõ kapcsolatok elemzésére és leírására szolgál. Kezdetben az egyedek és kapcsolataik elemzése a feladat, aminek az eredménye egy adatszerkezeti ábra az elemzés alá vont területrõl. Ez az adatszerkezeti ábra, egyed-, kapcsolat- és attribútum-leírásokkal kiegészítve alkotja a logikai adatmodellt. A logikai adatmodell a következõ elemekbõl áll:

• Logikai adatszerkezeti ábra (kiegészítve esetleg több részábrával) • Egyedleírások • Kapcsolatleírások • Attribútum-leírások (az adatjegyzék részeként) • Közös tartomány leírások (az adatjegyzék részeként)

Ezen öt elemből a Logikai adatszerkezeti ábra elkészítését támogatja ez az alkalmazás. Az SSADM által javasolt jelölésmódok a LDM-nél: A logikai adatmodellezés egyfelől pontos és egyértelmű kíván lenni, másfelől világos és áttekinthető képet akar nyújtani. A kettőt úgy lehet összeegyeztetni, hogy áttekinthető ábrákon világos jelölésmóddal ábrázoljuk az egyedeket és kapcsolataikat, a pontos leírásokat viszont nem ábrázoljuk, hanem az ábrákon szereplő objektumokhoz rendeljük. Egyed

Az egyedeket a logikai adatszerkezeti ábrán lekerekített sarkú téglalap jelzi, benne az egyed nevével (6. Ábra)

5 Bana István, Az SSADM redszerszervezési módszertan

Számla

6. Ábra

Page 14: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

14

A logikai adatmodellek diagramjain a kapcsolattípusokat vonalakkal, a kapcsolat fokát a vonal végére rajzolt csirkelábbal ábrázoljuk. Ha kapcsolat egy ’csirkeláb’-ban végződik, az arra utal, hogy egy-több kapcsolatról van szó (7. Ábra).

Persze nem csak egy-több kapcsolatok léteznek. Az egy-egy kapcsolatot egy egyszerű egyenessel jelöljük, azonban ezeket az adatmodellezés során egy-több kapcsolatokként értelmezzük (8. Ábra).

A több-több kapcsolatot mindkét végén villás vonal jelzi. Ezeket több-egy kapcsolatokká bontjuk szét (9. Ábra).

Vevõ

Megrendelés

7. Ábra

Számítógép

felépül

Alakatrész

típus

megtalálható

SzámítógépAlakatrész

típus

Csatoló

felbontás

9. Ábra

B CA

AB C

8. Ábra

Page 15: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

15

Ha kapcsolatot jelölő vonal egyik fele szaggatott, akkor nem feltétlenül tartozik a szaggatott vonal felöli egyed minden előfordulásához a másik egyednek egy előfordulása (10. Ábra).

A kapcsolatok egyik különleges esete az, amikor egy és ugyanazon egyedtípus különböző előfordulásai állnak kapcsolatban egymással. Az ilyen kapcsolatokat rekurzív kapcsolatoknak nevezzük (11. Ábra).

Előfordulhat az is, hogy a logikai adatszerkezet leíró ábrán kizáró vagy-jellegű kapcsolatot kell ábrázolnunk. Ezt a kapcsolatra rajzolt fél körívvel ábrázoljuk. Az így csoportosítandó kapcsolatokat úgy kell rendezni, hogy egymás mellé kerüljenek (12. Ábra).

Ahhoz, hogy a modell elemeire egyértelműen hivatkozni lehessen, szükség van ezek azonosítására. A kapcsolattípusoknak az „ortodox” SSADM-felfogásban nem is egy, hanem két nevet kell adni, azonban Bana István „Az SSADM Rendszerszervezési Módszertan” című könyvében több ellenérvet is felvet ezzel szemben (101.old.). Az általam megismert modellező programok is az „egy kapcsolat egy név elvet” követik, ezért saját alkalmazásomban én is ennek megfelelően járok el.

Bútor

tartalmaz

Láb

tartozik

10. Ábra

Alkatrész

Alkatrész

Alkatrészekvivalens

11. Ábra

Vevõ

rendelés

Rendeléssor

Szállító

rendelés

12. Ábra

Page 16: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

16

2 Rendszerterv

2.1 Nagyvonalú programterv

Esemény

helye

Rajzasztal Egyed Kapcsolat

Esemény

hatása

Csúsztat

Kicsinyít

/

Nagyít

Tulajdon

ságMent Nyomtat Létrehoz Töröl

Tulajdonság

(hely)

(méret)

Esemény

hatása

Esemény

hatása

Létrehoz TörölTulajdonság

(hely)

(méret)

Model ablak

14. Ábra

LDM Designer

Start ablak Fõablak

Model ablak

Esemény

Modelmegnyitás

Új model Model törlése Kilép

Model ablak

13. Ábra

Page 17: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

17

2.2 Osztálydiagram

ContactEntity

PreviewForm

ContactProp

EntityProp

HeadFormDraw

+ Create(AOwner: TComponent); override;

+ Destroy; override;

+ Update; override;

+ Paint; override;

+ Preview;

+ NewEntityCreate(X1,Y1:Integer):TShapeEntity;

+ NewContactLine(ShFrom,ShTo:TShapeEntity)

:TContactLine;

+ SetEntityProperties(ParamEntity: TShapeEntity);

+ SetContactProperties(ParamContact: TContactLine);

+ CopyToClipboard;

+ CutToClipboard;

+ PasteFromClipboard;

+ SaveToFile(FileName:String);

+ LoadFromFile(FileName:String);

+ SelectedDelete

...

- FCanvas: TCanvas

+ DrawingTool: TDrawingTool

+ EntityList: TList

+ ContactList: TList

+ PaperWidth: Integer

+ PaperHeight: Integer

+ Options: TOptions

+ ModelHead: TTitle

+ TrueWidth: Integer

+ TrueHeight: Integer

+ Percent: Integer

+ HorzPages: Integer

+ VertPages: Integer

# CBMemo TMemo

# DialogEntityProperties TEntityProperties

# DialogContactProperties TContactProperties

# FormPreview TPreviewForm

# ImageList TImageList

...

TDrawingDesk

TPanel

TShapeEntity

+ ID: Integer

+ Pen: TPen

+ Brush: TBrush

+ Text: TStrings

+ Marked: Boolean

+ TrueWidth: Integer

+ TrueHeight: Integer

+ TrueTop: Integer

+ TrueLeft: Integer

+ PozPercent Integer

+ SizePercent: Integer

...

# Paint; override;

+ Create(AOwner:

TComponent); override

+ Destroy; override

...

TContactLine

- FPercent: Integer

+ DotBegin: Boolean

+ DotEnd: Boolean

+ LockOutBegin: Boolean

+ LockOutEnd: Boolean

+ LineColor: TColor

+ LineWidth: Integer

+ Enabled: Boolean

+ FromEntity: TShapeEntity

+ ToEntity: TShapeEntity

+ Points: TPoints

+ TruePoints: TPoints

+ Marked: Boolean

+ ID: Integer

...

+ SetTruePoint

...

TShape

TObject

1

*

1

*

TDialogEntityProperties

- ColorDialog: TColorDialog

...

+ BGColorClick

...

TDialogContactProperties

+ ColorDialog: TColorDialog

...

+ LineColorClick

...

TFormPreview

+ SECopies: TSpinEdit

...

+ ShowModal

...

TOptions+ GridColor: TColor

+ GridSizeX: Integer

+ GridSizeY: Integer

+ GridEnabled: Boolean

+ GridShow: Boolean

+ EntityWidth: Integer

+ EntityHeight: Integer

+ EntityBgColor:TColor

+ EntityFrameColor:Tcolor

+ EntityFrameWidth:Integer

+ EntityFont: TFont

+ ContactColor:TColor

+ ContactWidth:Integer

+ Create

+ Destroy

TPersistent

TModelHead

+ Project String

+ Model String

+ Author String

+ Version String

+ Date String

+ Create

+ Destroy

TPersistent

TWorkPad

+ FileName: String

+ Desk: DrawingDesk

....

+ NewDesk

...

TMainForm

+ Options:Toptions

...

+ SBFileNewItemClick

...

TStartForm

...

+ Close

TFormHead

+ Project: TEdit

+ Model: TEdit

....

TOptionsForm

+ ColorDialog TColorDialog

+ FontDilaog TFontDialog

....

+ FontButtonClick

...

TForm

1

*

MainOptionSetMain

SSADMSys

DrawingDesk

ShapEntity

Page 18: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

18

2.3 Objektumdiagram

MainFrom:

TMainForm

WorkPad:

TWorkPad

Desk:

TDrawingDesk

ShapeEntity:

TShape

ContactLine:

TPersistent

1*

1

1

1

1*

*

DialogContactProperties:

TDialogContactProperties

DialogEntityProperties:

TDialogEntityProperties

Optios:

TOptions

FormPreview:

TForm

ModelHead:

TModelHead

Optios:

TOptions

FormStart:

TFormStart

FormHead:

TFormHead

OptionsForm:

TOptionsForm

15. Ábra

Page 19: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

19

2.4 Osztályleírás

Osztály neve: TDrawingDesk Feladatleírás: Az egyedtéglalapokat és kapcsolatvonalakat tároló, megjelenítő,

vezérlő osztály. Közvetlen ős: TPanel Objektumok száma: Megegyezik a gyerek-ablakok számával.

Adatok Private adatok Típus Leírás FCanvas TCanvas A rajzfelületet biztosító TCanvas objektum. A

TPanel osztály nem rendelkezik ezzel az objektummal, azonban egy őse, a TCustomControl igen.

FPaperWidth Integer A papírlap magassága. FPaperHeight Integer A papírlap szélessége. FOptions TOptions Egy TOptions típusú rekord, mely az

alapbeállítások adatait tárolja. FHorzPages Integer A rajzasztalon vízszintesen elhelyezkedő

papírlapok száma. FVertPages Integer A rajzasztalon függőlegesen elhelyezkedő

papírlapok száma. FTrueWidth Integer A rajzasztal valódi szélessége pixelben. FTrueHeight Integer A rajzasztal valódi magassága pixelben. FPercent Integer A nagyítás/kicsinyítés százalékos értéke, melynek

alapja a valódi méretek. FModelHead TTitle A modell fejléc adatait tartalmazó rekord Protected adatok Típus DragX Integer A kurzor X koordinátája az egérgomb

lenyomásának pillanatában. DragY Integer A kurzor Y koordinátája az egérgomb

lenyomásának pillanatában. CBMemo TMemo Memo objektum mely a modell szöveg

transzformáltját tárolja, ezzel egyszerűen megoldható a Vágólap használata, valamint a modell mentése és betöltése.

DragContact Record A vonszolt kapcsolatvonal adatai ActualContact TContactLine A vonszolt kapcsolatvonal

ActualLine Integer A kapcsolatvonalat felépítő 4 szakaszból annak a sorszáma, amelyre kattintottunk.

ActualPoint Integer A kapcsolatvonalat felépítő 4 szakasz végpontjaiból annak a sorszáma, amelyre kattintottunk.

CursorStartX Integer Az kurzor X koordinátája az egér bal gombjának lenyomásának pillanatában.

Page 20: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

20

CursorStartY Integer Az kurzor Y koordinátája az egér bal gombjának lenyomásának pillanatában.

StartX1 Integer A vonszolt szakasz kezdő pontjának X koordinátája

StartY1 Integer A vonszolt szakasz kezdő pontjának Y koordinátája

StartX2 Integer A vonszolt szakasz vég pontjának X koordinátája StartY2 Integer A vonszolt szakasz vég pontjának Y koordinátája OPoints TPoints Az előzőleg kirajzolt kapcsolatvonal koordináta

adatai LineBreak Byte A vonalban lévő töréspontok száma Moving Boolean A vonszolási állapot jelzője

GroupMark Record A csoportos kijelölés keretének adatai X1,Y1 Integer A keret jobb-felső koordinátája (fix)

X2,Y2 Integer A keret bal-alsó koordinátája (mozgó)

oX2,oY2 Integer A keret bal-alsó előző, mozgatás előtti koordinátája

NewLineEndPoint Record Az új kapcsolat létrehozásához használt segédvonal

X,Y Integer A segédvonal egérrel változtatott vég- koordinátája

oX,oY Integer Az előző vég-koordináta DialogEntity-Properties

TEntity-

Properties A egyedtéglalap jellemzőit beállító ablak (Form)

DialogContact-Properties

TContact-

Properties A kapcsolatvonal jellemzőit beállító ablak (Form)

FormPreview TPreviewForm A nyomtatási képet megjelenítő és a nyomtatás néhány jellemzőjét beállító ablak (Form)

PrintingParam TPrintingParam A nyomtatás paramétereit tároló rekord PageX1,PageY1 Integer A rajzasztalon kétdimenziós tömbben

elhelyezkedő és nyomtatandó lap bal-felső indexe PageX2,PageY2 Integer A rajzasztalon kétdimenziós tömbben

elhelyezkedő és nyomtatandó lap jobb-alsó indexe

ImageList TList A Preview-ban megjelenítendő lapok grafikus képét tároló lista.

Public adatok Típus DrawingTool TDrawingTool Az aktuális rajzolási módot tárolja EntityList TList Az egyedtéglalapokat ábrázoló ShapeEntity-k

tárolója ContactList TList A kapcsolatvonalakat ábrázoló TContact-ok

tárolója DeskMoveRec Record A rajzasztal Drag and Move típusú mozgatásához

szükséges adatokat tárolja

X Integer Az kurzor X koordinátája az egér bal gombjának lenyomásának pillanatában.

Page 21: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

21

Y Integer Az kurzor Y koordinátája az egér bal gombjának lenyomásának pillanatában.

Enable Boolean A mozgatás engedélyezése és tiltása MovedX

Integer Az egér elmozdulásának nagysága vízszintesen az

X pozícióhoz képest. MovedY Integer Az egér elmozdulásának nagysága függőlegesen

az Y pozícióhoz képest. Published adatok Típus PaperWidth Integer A papírlap magassága. PaperHeight Integer A papírlap szélessége. Options TOptions Egy TOptions típusú rekord, mely az

alapbeállítások adatait tárolja. ModelHead TTitle A modell fejléc adatait tartalmazó rekord TrueWidth Integer A rajzasztal valódi szélessége pixelben. TrueHeight Integer A rajzasztal valódi magassága pixelben. Percent Integer A nagyítás/kicsinyítés százalékos értéke, melynek

alapja a valódi méretek. HorzPages Integer A rajzasztalon vízszintesen elhelyezkedő

papírlapok száma. VertPages Integer A rajzasztalon függőlegesen elhelyezkedő

papírlapok száma.

Metódusok Private metódusok SetPaperWidth Beállítás: A papírlap szélessége SetPaperHeight Beállítás: A papírlap magassága SetOptions Beállítás: A rajzasztal alapjellemzői SetModelHead Beállítás: A modell fejléce SetPercent Beállítás: A rajzasztal és a rajzasztalon elhelyezkedő

objektumok kicsinyítés/nagyítás tulajdonságainak beállítása.

SetHorzPages Beállítás: A vízszintesen elhelyezkedő papírlapok száma SetVertPages Beállítás: A függőlegesen elhelyezkedő papírlapok száma ChickenFoot Egy kapcsolatvonalhoz tartozó ’csirkeláb’ kirajzolása DrawLockOutBegin Kizáró ív rajzolása a kapcsolatvonal elejére. DrawLockOutEnd Kizáró ív rajzolása a kapcsolatvonal végére. DrawContactText A kapcsolatvonal nevének kiírása (rajzolása) RealContact Meghatározza egy kapcsolatvonal és az általa összekötött

egyedtéglalapok metszéspontját. ShapeEntityMouseDown Az egyedtéglalapon történt egérgomb lenyomás, mint

esemény lekezelése. ShapeEntityStartDrag Az egyedtéglalap vonszolása előtt elvégzendő beállítások. ShapeEntityEndDrag Az egyedtéglalap vonszolása után elvégzendő beállítások. AddEntityCBoard Egy egyedtéglalap szöveges adatként történő hozzáadása a

CBMemo szövegtároló listájához. AddContactCBoard Egy kapcsolatvonal szöveges adatként történő hozzáadása

a CBMemo szövegtároló listájához. ReadCBoard Egyedtéglalapok és kapcsolatvonalak létrehozása,

elhelyezése a CBMemo-ból történt kiolvasás után

Page 22: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

22

WhereIsOldID A paraméterben megadott azonosító megkeresése az egyedtéglalapokat tároló listában.

CBMemoUpLoad A rajzasztal valamennyi objektumának áttöltése a CBMemo-ba.

Public metódusok Create A rajzasztal létrehozása Destroy A rajzasztal törlése, megszüntetése Paint A rajzasztalon lévő elemek megjelenítése Preview Egy vázlatos nyomtatási kép megjelenítése, a nyomtatási

paraméterek beállítása és a nyomtatás indítása. NewEntityCreate Egy új egyedtéglalap létrehozása a rajzasztalon NewContactLine Egy új kapcsolatvonal létrehozása a rajzasztalon SetEntityProperties A kijelölt egyedtéglalapok tulajdonságainak beállítása SetContactProperties A kijelölt kapcsolatvonalak tulajdonságainak beállítása CopyToClipboard A kijelölt elemek másolása a vágólapra CutToClipboard A kijelölt elemek áthelyezése a vágólapra PasteFromClipboard A kijelölt elemek bemásolása a rajzasztalra a vágólapról SaveToFile A modell mentése fájlba LoadFromFile Egy modell betöltése SelectAll A rajzasztal minden elemének kijelölése, illetve

jelöltségének megszüntetése (a paramétertől függően) IsAnySelected Van-e jelölt elem a rajzasztalon AllEnable Minden elem engedélyezése, aktívvá tétele illetve inaktívvá

tétele (a paramétertől függően) SelectedDelete A jelölt objektumok megszüntetése Protected metódusok MouseDown Az egér gombjának lenyomása az asztalon DeskDowndtArrow Az egér gombjának lenyomása az asztalon miközben a

rajzeszköz (szerkesztő nyíl). MouseUp Az egér gombjának felengedése az asztalon MouseMove Az egér mozgatása az asztalon DragOver Vonszolás az asztal fölött ShapesDragOver Egyedtéglalap vagy csoport vonszolása az asztal fölött

illetve az egyedtéglalap(ok) méretezése DragDrop Egy vonszolt elem elengedése ContactBeginDrag Egy kapcsolatvonal vonszolásához szükséges változók

beállítása ContactDragMove A vonszolt kapcsolatvonal mozgatásának megjelenítése LineDragMove A vonszolt kapcsolatvonal mozgatásának megjelenítése,

ha a vonszolt elem vonal PointDragMove A vonszolt kapcsolatvonal mozgatásának megjelenítése,

ha a vonszolt elem töréspont NewContactDrop Egy vonszolt kapcsolatvonal elengedése ContactEndDrag Egy újonnan létrehozott kapcsolatvonal véglegesítése SelectedGroupDragDrop A vonszolt csoport elengedése DrawContact Egy kapcsolatvonal kirajzolása DrawContactMark Egy kapcsolatvonal jelöltségének kirajzolása (piros

Page 23: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

23

négyzet) CalcContactPoint Kiszámítja az új kapcsolatvonalat felépítő szakaszrendszer

koordinátáit ReCalcContactPoint Kiszámítja egy kapcsolatvonalat felépítő szakaszrendszer

koordinátáit, valamely esemény által kiváltott változás hatására.

StuckPoint Egy megadott szakaszra, egy megadott pontból rábocsátott merőleges és a szakasz metszéspontja

DrawGroupMove A csoport kijelölő keret mozgatása MarkRectDraw A csoport kijelölő keret kirajzolása RectOrder A csoportos kijelölés keretének koordinátáinak rendezése MarkWithInFrame A csoport kijelölő keret határain belül elhelyezkedő

elemek jelöltre állítása SnapToGrid Egy adott koordinátát a rajzasztal grid érékéhez igazítja CursorOnAnyLine Igaz értékkel tér vissza, ha az egérkurzor egy

kapcsolatvonal felett áll a klikkelés pillanatában. OnThePoint Igaz értékkel tér vissza, ha az egérkurzor egy

kapcsolatvonalat felépítő szakaszok végpontjai felett áll a klikkelés pillanatában.

OnTheLine Igaz értékkel tér vissza, ha az egérkurzor egy kapcsolatvonalat felépítő szakasz felett áll a klikkelés pillanatában.

PointOnEntity Igaz értékkel tér vissza, ha a kapcsolatvonal végpontja az egyedtéglalapon van.

ApplyContactProperties A beállított jellemzők érvényesítése egy kapcsolatvonalon NewContactID Új egyedi azonosító generálása egy kapcsolatvonal

számára NewEntityID Új egyedi azonosító generálása egy egyedtéglalap számára AddHeadCBoard A modell fejadatának másolása a vágólapra Printing A modell lapjainak nyomtatása PChickenFoot Egy kapcsolatvonal csirkelábainak nyomtatása PRealContact Meghatározza egy kapcsolatvonal és az általa összekötött

egyedtéglalapok metszéspontját. PrintShapes Az egyedtéglalapok nyomtatása PrintTitle A modell cím adatainak nyomtatása PDrawLockOutBegin Egy kizáró kapcsolatot jelölő körív nyomtatása a

kapcsolatvonal elejére. PDrawLockOutEnd Egy kizáró kapcsolatot jelölő körív nyomtatása a

kapcsolatvonal végére. SetMinMax A rajzasztalon kétdimenziós tömbben elhelyezkedő és

nyomtatandó elemet tartalmazó lapok indexeinek beállítása

PreviewShow A vázlatos nyomtatási kép megjelenítése PreviewClose A nyomtatási kép bezárása

Page 24: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

24

Osztály neve: TShapeEntity Feladatleírás: Egy egyedtéglalap adatait, metódusait tároló osztály Közvetlen ős: TShape Objektumok száma: Nincs korlátozva

Adatok Private adatok Típus Leírás FPen TPen Az egyedet ábrázoló téglalap keretének jellemzői FBrush TBrush Az egyedet ábrázoló téglalap felületének

jellemzői FText TStrings Az egyedtéglalap megnevezését tároló szöveg

lista FMarked Boolean Az egyedtéglalap jelöltsége FTrueWidth Integer Az egyedtéglalap valódi szélessége pixelben. FTrueHeight Integer Az egyedtéglalap valódi magassága pixelben. FTrueTop Integer Az egyedtéglalap valódi függőleges koordinátája

pixelben. FTrueLeft Integer Az egyedtéglalap valódi vízszintes koordinátája

pixelben. FPozPercent Integer A nagyítás/kicsinyítés (az egyedtéglalap

pozíciójára vonatkozó) százalékos értéke, melynek alapja a valódi pozíció.

FSizePercent Integer A nagyítás/kicsinyítés (az egyedtéglalap méretére vonatkozó) százalékos értéke, melynek alapja a valódi pozíció.

Protected adatok Típus SizerBox Array of Record A méretező pontok (négyzetek) adatai.

x1,y1 Integer A méretező négyzet bal-felső koordinátája x2,y2 Integer A méretező négyzet jobb-alsó koordinátája

Public adatok Típus ID Integer Az egyedtéglalap egyedi azonosító sorszáma OldID Integer Az egyedtéglalap régi azonosító sorszáma SizingPoint Integer A 8 méretező pont közül az éppen aktuális

sorszáma EntityMovePos Record A rajzasztal Drag and Move típusú mozgatásához

szükséges adatokat tárolja oX1,oY1 Integer A méretező piros keret előző (mozgatás előtti)

bal-felső koordinátája oX2,oY2 Integer A méretező piros keret előző jobb-alsó

koordinátája MouseX,

MouseY Integer A kurzor X és Y koordinátája az egér bal

gombjának lenyomásának pillanatában. X1,Y1 Integer A méretező piros keret bal-felső koordinátája X2,Y2 Integer A méretező piros keret jobb-alsó koordinátája

Dragged Boolean Az egyedtéglalap vonszolási állapotának jelzője

Page 25: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

25

Pen TPen Az egyedtéglalapot ábrázoló téglalap keretének jellemzői

Brush TBrush Az egyedtéglalapot ábrázoló téglalap felületének jellemzői

Text TStrings Az egyedtéglalap megnevezését tároló szöveg lista

Marked Boolean Az egyedtéglalap jelöltsége TrueWidth Integer Az egyedtéglalap valódi szélessége pixelben. TrueHeight Integer Az egyedtéglalap valódi magassága pixelben. TrueTop Integer Az egyedtéglalap valódi függőleges koordinátája

pixelben. TrueLeft Integer Az egyedtéglalap valódi vízszintes koordinátája

pixelben. PozPercent Integer A nagyítás/kicsinyítés (az egyedtéglalap

pozíciójára vonatkozó) százalékos értéke, melynek alapja a valódi pozíció.

SizePercent Integer A nagyítás/kicsinyítés (az egyedtéglalap méretére vonatkozó) százalékos értéke, melynek alapja a valódi pozíció.

Metódusok

Protected metódusok SizerBoxCalc A méretező pontok koordinátáinak meghatározása. Paint Az egyedtéglalap kirajzolása MarkOn A méretező pontok (négyzetek) kirajzolása FontChange Az egyedtéglalap betűtípusának beállítása MouseMove Az egér mozgatása az egyedtéglalapon SetPen Beállítás: Az egyedet ábrázoló téglalap keretének

jellemzői SetBrush Beállítás: Az egyedet ábrázoló téglalap felületének

jellemzői SetText Beállítás: Az egyedtéglalap megnevezését tároló szöveg

lista SetMark Beállítás: Az egyedtéglalap jelöltsége SetTrueWidth Beállítás: Az egyedtéglalap valódi szélessége pixelben. SetTrueHeight Beállítás: Az egyedtéglalap valódi magassága pixelben. SetTrueTop Beállítás: Az egyedtéglalap valódi függőleges koordinátája

pixelben. SetTrueLeft Beállítás: Az egyedtéglalap valódi vízszintes koordinátája

pixelben. SetPozPercent Beállítás: A nagyítás/kicsinyítés (az egyedtéglalap

pozíciójára vonatkozó) százalékos értéke, melynek alapja a valódi pozíció.

SetSizePercent Beállítás: A nagyítás/kicsinyítés (az egyedtéglalap méretére vonatkozó) százalékos értéke, melynek alapja a valódi pozíció.

Public metódusok Create Az egyedtéglalap létrehozása Destroy Az egyedtéglalap törlése, megszüntetése

Page 26: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

26

Osztály neve: TContactLine Feladatleírás: Egy kapcsolatvonal adatait, metódusait tároló osztály Közvetlen ős: TObject Objektumok száma: Nincs korlátozva

Adatok Private adatok Típus Leírás FPercent Integer A nagyítás/kicsinyítés százalékos értéke, melynek

alapja a valódi méretek. Public adatok Típus Leírás DotBegin Boolean A kapcsolatot jelölő vonal eleje pontozott DotEnd Boolean A kapcsolatot jelölő vonal vége pontozott LockOutBegin Boolean Kizáró kapcsolatot jelölő körív a vonal elejére LockOutEnd Boolean Kizáró kapcsolatot jelölő körív a vonal végére LineColor TColor A kapcsolatvonal színe LineWidth Integer A kapcsolatvonal vastagsága pixelben. Enabled Boolean A kapcsolatvonal engedélyezése/tiltása FromEntity TShapeEntity Az egyedtéglalap, amelyből a kapcsolatvonal

kiindul. ToEntity TShapeEntity Az egyedtéglalap, amelybe a kapcsolatvonal

befut. Points TPoints A kapcsolatvonalat jelölő szakaszok koordinátáit

tároló tömb TruePoints TPoints A kapcsolatot jelölő vonal eredeti koordinátáit

tároló tömb Marked Boolean A kapcsolatvonal jelöltsége ID Integer A kapcsolatvonal egyedi azonosító sorszáma OldID Integer A kapcsolatvonal régi azonosító sorszáma

Metódusok Private metódusok SetPercent Beállítás: A nagyítás/kicsinyítés százalékos értéke, melynek

alapja a valódi méretek.

Public metódusok SetTruePoint A kapcsolatvonal valódi pontjainak kiszámítása

Page 27: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

27

Osztály neve: TOptions Feladatleírás: A rajzasztalok alapbeállításait tároló osztály. Közvetlen ős: TPersistent Objektumok száma: 1 a MainForm főablakban + ahány rajzasztalt létre lett hozva.

Adatok Private adatok Típus Leírás FGridColor TColor A rácspont színe FGridSizeX Integer A rácspontok közötti vízszintes távolság FGridSizeY Integer A rácspontok közötti függőleges távolság FGridEnabled Boolean Az egyedtéglalapok pontrácshoz való

igazításának engedélyezése FGridShow Boolean A pontrács megjelenítésének engedélyezése FEntityWidth Integer Az egyedtéglalap szélessége FEntityHeight Integer Az egyedtéglalap magassága FEntityBgColor TColor Az egyedtéglalap háttérszíne FEntityFrameColor Tcolor Az egyedtéglalap keretének színe FEntityFrameWidth Integer Az egyedtéglalap keretének vastagsága FEntityFont TFont Az egyedtéglalap font tulajdonsága FContactColor TColor A kapcsolatvonal színe FContactWidth Integer A kapcsolatvonal vastagsága Public adatok Típus Leírás GridColor TColor A rácspont színe GridSizeX Integer A rácspontok közötti vízszintes távolság GridSizeY Integer A rácspontok közötti függőleges távolság GridEnabled Boolean Az egyedtéglalapok pontrácshoz való

igazításának engedélyezése GridShow Boolean A pontrács megjelenítésének engedélyezése EntityWidth Integer Az egyedtéglalap szélessége EntityHeight Integer Az egyedtéglalap magassága EntityBgColor TColor Az egyedtéglalap háttérszíne EntityFrameColor Tcolor Az egyedtéglalap keretének színe EntityFrameWidth Integer Az egyedtéglalap keretének vastagsága EntityFont TFont Az egyedtéglalap font tulajdonsága ContactColor TColor A kapcsolatvonal színe ContactWidth Integer A kapcsolatvonal vastagsága

Metódusok Public metódusok Create Az objektum létrehozása Destroy Az objektum megszüntetése

Page 28: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

28

Osztály neve: TWorkPad Feladatleírás: A rajzasztalt tartalmazó gyerekablak osztálya. Közvetlen ős: TForm Objektumok száma: Nincs korlátozva

Adatok Public adatok Típus Leírás MainMenu TMainMenu Menürendszer objektuma FileMenu TMenuItem FileNewItem TMenuItem FileOpenItem TMenuItem FileSaveItem TMenuItem FileSaveAsItem TMenuItem FilePrintItem TMenuItem FilePrintSetupItem TMenuItem FileExitItem TMenuItem EditMenu TMenuItem EditCutItem TMenuItem EditCopyItem TMenuItem EditPasteItem TMenuItem EditDelItem TMenuItem SelectAllItem TMenuItem OptionsMenu TMenuItem GeneralItem TMenuItem HeadItem TMenuItem WindowMenu TMenuItem WindowTitleItem TMenuItem WindowCascadeItem TMenuItem HelpMenu TMenuItem HelpAboutItem TMenuItem PrintSetupDialog TPrintSetupDialog A nyomtatót beállító dialógusablak FontDialog TFontDialog A fontot beállító dialógusablak SaveDialog TSaveDialog A mentés dialógusablaka OpenDialog TOpenDialog A fájlnyitás dialógusablaka Public adatok Típus Leírás FileName String A modell fájlneve Desk TDrawingDesk A rajzasztal

Metódusok Public metódusok SetPageSize A rajzasztalt felépítő lapok méreteinek beállítása LoadFromFile Egy modell betöltése a háttértárolóról NewMenuItem Új almenüpont hozzáadása a Window menüponthoz SetUpOptions A rajzasztal alapbeállításának frissítése SetProperties A rajzasztal vagy tartalmazott objektumainak jellemzőit

beállító metódus

Page 29: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

29

SetFont A rajzasztal kiválasztott egyedtéglalapjainak font-típusát beállító metódus

FromCreate Az ablak létrehozásakor végrehajtandó beállítások FormClose Az ablak bezárása előtt végrehajtandó feladatok SBArrow A rajzasztal rajzeszközét ’Szerkesztés’ állapotúra állító

metódus SBNewEntity A rajzasztal rajzeszközét ’Új egyed’ állapotúra állító

metódus SBNewContact A rajzasztal rajzeszközét ’Új kapcsolat’ állapotúra állító

metódus DeskMove A rajzasztal rajzeszközét ’Görgetés’ állapotúra állító

metódus NewDesk Egy új rajzasztal létrehozása EditMenuClick Az Edit menüpontra történő kattintáskor elvégzendő

beállítások EditCutItemClick A rajzasztal jelölt objektumainak áthelyezése a vágólapra EditCopyItemClick A rajzasztal jelölt objektumainak átmásolása a vágólapra EditPasteItemClick A vágólap tartalmának beillesztése a modellbe EditDelItemClick A rajzasztal jelölt objektumainak törlése SelectAllItemClick A rajzasztal valamennyi objektumának jelöltre állítása SetCentreScrollBar A rajzasztal középpontját a képernyő középpontjába állító

metódus FormActivate Az ablak aktívvá válásakor végrehajtandó metódus IncDecPercent A nagyítás/kicsinyítés százalékos értékének beállítása SetPercent A nagyítás/kicsinyítés értékének aktualizálása FileOpenItemClick Egy új modell betöltése FileNewItemClick Új modell szerkesztő ablak létrehozása FileSaveAsItemClick A modell mentése valamely háttértárolóra egy megadott

néven FileSaveItemClick A modell mentése FilePrintSetupItemClick A nyomtó paramétereit beállító dialógusablak megnyitása PrintPreview A rajzasztal nyomtatási képének megjelenítése WindowMenuClick A Window menüpontra kattintáskor elvégzendő beállítások WindowTitleItemClick A nyitott ablakok elrendezése WindowCascadeItemClick A nyitott ablakok elrendezése WindowItemClick A választott menüpontnak megfelelő ablak aktívvá tétele DeskMouseMove A rajzasztal felületén mozgó egér pozíciójának

megjelenítése GeneralItemClick Az alapbeállítások dialógus ablak megnyitása HeadItemClick A modell fejadatát beállító dialógus ablak megjelenítése

Page 30: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

30

Osztály neve: TMainForm Feladatleírás: Az alkalmazás keretablaka (szülőablaka) amely mintegy

konténer osztály tartalmazza a rajasztal-ablakokat (gyerekablakokat), valamint vezérli is ezeket.

Közvetlen ős: TForm Objektumok száma: 1

Adatok Public adatok Típus Leírás MainMenu TMainMenu Menürendszer objektuma FileMenu TMenuItem FileNewItem TMenuItem FileOpenItem TMenuItem FilePrintSetupItem TMenuItem FileExitItem TMenuItem HelpMenu TMenuItem HelpAboutItem TMenuItem PrintSetupDialog TPrintSetupDialog A nyomtatót beállító dialógus ablak FontDialog TFontDialog A fontot beállító dialógus ablak OpenDialog TOpenDialog A fájlnyitás dialógus ablaka StatusLine TSatusLine Bizonyos információkat megjelenítő tálca SpeedBar TPanel A nem szerkesztő gombokat tároló panel EditPanel TPanel A szerkesztő gombokat tároló panel SBNewModell TSpeedButton Új modell SBOpenFile TSpeedButton Fájlnyitás SBFileSave TSpeedButton Mentés SBPrint TSpeedButton Nyomtatás SBZoomIn TSpeedButton Nagyítás SBZoomOut TSpeedButton Kicsinyítés SEPercent TMaskEdit A nagyítás/kicsinyítés százaléka SBFont TSpeedButton Font-típus beállítás SBArrow TSpeedButton Szerkesztés SBNewEntity TSpeedButton Új egyed SBNewContact TSpeedButton Új kapcsolat SBMove TSpeedButton Vonszolás SBProperties TSpeedButton Jellemzők

Metódusok Public metódusok FormCreate Az létrehozásakor végrehajtandó metódus FormActivate Az ablak aktívvá válásakor végrehajtandó metódus FileNewItemClick Új modell FileOpenItemClick Fájlnyitás FilePrintSetup Nyomtató beállítás FileExit Kilépés HelpAbout About form megjelenítése SBNewEntityClick Új egyed

Page 31: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

31

SBArrowClick Szerkesztés SBZoomInClick Kicsinyítés SBZoomOutClick Nagyítás SBNewContactClick Font-típus beállítás SBMoveClick Vonszolás SBFontClick Font-típus beállítása SBFileSaveClick Mentés SBPrintClick Nyomtatás SBPropertiesClick A tulajdonságok karbantartása EditPanelEnable A szerkesztő panel gombjainak engedélyezése FormClose Az ablak bezárásakor végrehajtandó metódus ViewOptionsForm Az alapadatok karbantartása SetUpOptions A rajzasztal alapadatainak frissítése OptionsRead Az Options form adatainak áttöltése az Options objektumba

Page 32: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

32

Osztály neve: TModelHead Feladatleírás: A modell fejadatát tároló osztály. Közvetlen ős: TPersistent Objektumok száma: Megegyezik a létrehozott rajzasztalok számával Private adatok Típus Leírás FProject String A projekt neve FModel String A modell neve FAuthor String A modell készítője FVersion String A modell verziószáma FDate String Az utolsó módosítás dátuma Public adatok Típus Leírás Project String A projekt neve Model String A modell neve Author String A modell készítője Version String A modell verziószáma Date String Az utolsó módosítás dátuma Public metódusok Create Az objektum létrehozása Destroy Az objektum megszüntetése

Page 33: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

33

Osztály neve: TDialogEntityProperties Feladatleírás: Egyedtéglalapok tulajdonságainak karbantartására szolgáló

dialógusablak Közvetlen ős: TForm Objektumok száma: Megegyezik a létrehozott rajzasztalok számával

Adatok Private adatok Típus Leírás ColorDialog TColorDialog FontDialog TFontDialog ID TLabel Az egyedtéglalap azonosító sorszáma SEWidth TSpinEdit Az egyedtéglalap szélessége SEHeight TSpinEdit Az egyedtéglalap magassága FrameColor TPanel Az egyedtéglalap keretének színe FrameWidth TSpinEdit Az egyedtéglalap keretének vastagsága BGColor TPanel Az egyedtéglalap háttérszíne FontButton TButton Az egyedtéglalap szövegének font beállítására

szolgáló nyomógomb OKBtn TButton A beállítások nyugtázására szolgáló nyomógomb CancelBtn TButton A beállítások elvetésére szolgáló nyomógomb

Metódusok Public metódusok FrameColorClick A ColorDialog ablak megnyitása és a keretszín beállítása BGColorClick A ColorDialog ablak megnyitása és a háttérszín beállítása FontButtonClick A FontDialog ablak megnyitása és a font tulajdonság

beállítása

Page 34: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

34

Osztály neve: TDialogContactProperties Feladatleírás: Kapcsolatvonalak tulajdonságainak karbantartására szolgáló

dialógusablak Közvetlen ős: TForm Objektumok száma: Megegyezik a létrehozott rajzasztalok számával

Adatok Private adatok Típus Leírás ColorDilaog TColorDialog ID TLabel A kapcsolatvonal azonosító sorszáma RBLineStyle1 TRadioButton A kapcsolatvonal vonaltípusa 1. RBLineStyle2 TRadioButton A kapcsolatvonal vonaltípusa 2. RBLineStyle3 TRadioButton A kapcsolatvonal vonaltípusa 3. RBLineStyle4 TRadioButton A kapcsolatvonal vonaltípusa 4. SBLockOut1 TRadioButton A kapcsolatvonal kizáró 1. SBLockOut1 TRadioButton A kapcsolatvonal kizáró 2. SBLockOut1 TRadioButton A kapcsolatvonal kizáró 3. LineColor TPanel A kapcsolatot felépítő vonalrendszer színe LineWidth TSpinEdit A vonal vastagsága ContactName TEdit A kapcsolatvonal megnevezése OKBtn TButton A beállítások nyugtázására szolgáló nyomógomb CancelBtn TButton A beállítások elvetésére szolgáló nyomógomb

Metódusok Public metódusok LineColorClick A ColorDialog ablak megnyitása és a vonalszín beállítása Osztály neve: TFormHead Feladatleírás: A modell fejadatának karbantartására szolgáló dialógusablak Közvetlen ős: TForm Objektumok száma: Megegyezik a létrehozott rajzasztalok számával

Adatok

Private adatok Típus Leírás EProject TEdit A project megnevezése EModel TEdit A modell megnevezése EAuthor TEdit A szerző neve EProject TEdit Verziószám EProject TEdit Dátum OKBtn TButton A beállítások nyugtázására szolgáló nyomógomb CancelBtn TButton A beállítások elvetésére szolgáló nyomógomb

Page 35: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

35

Osztály neve: TPreviewForm Feladatleírás: A modell nyomtatási képének megjelenítésére és bizonyos

nyomtatási paraméterek beállítására szolgáló dialógusablak Közvetlen ős: TForm Objektumok száma: Megegyezik a létrehozott rajzasztalok számával

Adatok

Private adatok Típus Leírás SECopies TSpinEdit A nyomtatandó példányszám CBFrame TCheckBox Keret nyomtatás beállítása CBHead TCheckBox Fejléc nyomtatása beállítása RBColor TRadioButton Színes nyomtatás beállítása RBMono TRadioButton Monokróm nyomtatás beállítása SEMargin TSpinEdit A margó távolsága a papírszélétől PrintBtn TButton A nyomtatás indítása CancelBtn TButton A nyomtatás elvetése

Page 36: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

36

Osztály neve: TOptionsForm Feladatleírás: A program alapbeállításainak karbantartására szolgáló

dialógusablak Közvetlen ős: TForm Objektumok száma: 1

Adatok Private adatok Típus Leírás ColorDilaog TColorDialog FontDialog TFontDialog SEGridSizeX TSpinEdit A rácspontok közötti vízszintes távolság SEGridSizeY TSpinEdit A rácspontok közötti függőleges távolság CBGridEnabled TCheckBox A rácsponthoz történő igazítás engedélyezése CBGridShow TCheckBox A rácspontok megjelenítése SEWidth TSpinEdit Az egyedtéglalap szélessége SEHeight TSpinEdit Az egyedtéglalap magassága FrameColor TPanel Az egyedtéglalap keretének színe FrameWidth TSpinEdit Az egyedtéglalap keretének vastagsága BGColor TPanel Az egyedtéglalap háttérszíne FontButton TButton Az egyedtéglalap szövegének font beállítására

szolgáló nyomógomb LineColor TPanel A kapcsolatot felépítő vonalrendszer színe LineWidth TSpinEdit A vonal vastagsága OKBtn TButton A beállítások nyugtázására szolgáló nyomógomb CancelBtn TButton A beállítások elvetésére szolgáló nyomógomb

Metódusok Public metódusok FontButtonClick A FontDialog ablak megnyitása és az egyedtéglalap font

tulajdonságának beállítása ContactColorClick A ColorDialog ablak megnyitása és a kapcsolatvonal

színének beállítása FrameColorClick A ColorDialog ablak megnyitása és az egyedtéglalap

keretszínének beállítása BGColorClick A ColorDialog ablak megnyitása és az egyedtéglalap

háttérszínének beállítása GridColorClick A ColorDialog ablak megnyitása és a rácspontok színének

beállítása

Page 37: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

37

Osztály neve: TFormStart Feladatleírás: A program indulása után megjelenő informális ablak Közvetlen ős: TForm Objektumok száma: 1

Adatok

Private adatok Típus Leírás OKBtn TButton A beállítások nyugtázására szolgáló nyomógomb

Page 38: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

38

2.5 Metódusleírás

2.5.1 TDrawinDesk

constructor TDrawingDesk.Create(AOwner: TComponent);

A rajzasztal objektum (DrawingDesk) létrehozása. Ez a metódus magában foglalja a következő objektumok létrehozását, is: - FCanvas, amely lehetővé teszi a panelre történő rajzolást. - ShapeList, egy TList típusú tulajdonság, amely tartalmazni fogja a rajzasztalon

elhelyezett egyedtéglalapokat (Enity-ket) - ContactList, egy TList típusú tulajdonság, amely tartalmazni fogja a rajzasztalon

elhelyezett kapcsolatvonalakat Contact-okat. - CBMemo egy TMemo típusú objektum, melynek kihasználjuk a clipboard és fájl kezelő

metódusait. Igazából csak erre használjuk ezért nem szabad, hogy a rajzasztalon vizuálisan is megjelenjen. Ennek érdekében a következő beállításokat végezzük el:

- FOptions, egy TOptions típusú objektum, amely tartalmazza a rajzasztal

alapbeállításait. Szükséges, hogy objektum típus legyen annak ellenére, hogy csak adattárolásra használjuk, mert csak így tudjuk elérni, hogy értékei tervezési időben is állíthatóak legyenek az Object Ispector-ban.

- FModelHead, egy TModelHead típusú objektum, amely a modell fejléc adatait tartalmazza, hasonlóan az előbbi objektumhoz, ez is állítható tervezési időben.

- Létre kell hozni, továbbá három dialógus ablakot (EntityProperties, ContactProperties, FormPreview), melyek sorrendben az egyedtéglalapok, kapcsolatvonalak és nyomtatási paraméterek beállítását teszi lehetővé. A FormPreview egyúttal a nyomtatási kép megjelenítését is magában foglalja.

Szükség van néhány alapérték beállítására a vizuális megjelenés érdekében: - Az FVertPages, FHozPages

tulajdonságoknak értéket adva meghatározzuk a vízszintes és a függőleges lapok számát a rajzasztalon. Az FPaper-

Height és FPaperWidth segítségével egy lap nagyságát határozzuk meg.

- Az FPercent azaz a nagyítás/kicsinyítés mértékét 15-re a rajzasztal színét pedig clTeal színűre állítjuk.

CBMemo.Visible:=False;

CBMemo.Height:=0;

1 2 3 4 5

1

2

3

PaperWidth

PaperH

eight

egy lap

HorzPages

VertPages

16. Ábra

Page 39: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

39

destructor TDrawingDesk.Destroy;

A rajzasztal objektum (DrawingDesk) megszüntetése. A rajzasztal megszüntetése természetesen magában foglalja a Create metódusban létrehozott objektumok és listák megszüntetését, az általuk foglalt memóriaterület felszabadítását. Tulajdonságokat beállító metódusok: procedure TDrawingDesk.SetPaperWidth(Value: Integer);

A papír szélességének (FPaperWidth) beállítása. A papír szélességének beállításakor aktualizálni kell a rajztábla valódi-, valamint rajzolási szélességét. A valódi szélesség (FTrueWidth) a vízszintesen elhelyezkedő lapok száma, valamint a paraméterként kapott papírszélesség szorzata. A rajzolási szélesség (Width) pedig valódi szélesség és a nagyítási százalék (FPercent) szorzata. procedure TDrawingDesk.SetPaperHeight(Value: Integer);

A papír magasságágának (FPaperHeight) beállítása. Aktualizálni kell a rajztábla valódi-, valamint rajzolási magasságát. A valódi magasság (FTrueHeight) a függőlegesen elhelyezkedő lapok száma, valamint a paraméterként kapott papírmagasság szorzata. A rajzolási magasság (Height) pedig valódi magasság és a nagyítási százalék (FPercent) szorzata. Procedure TDrawingDesk.SetHorzPages(Value:Integer); A rajzasztalon vízszintesen elhelyezkedő papírlapok számának (FHorzPage) beállítása. Aktualizálni kell a rajztábla valódi-, valamint rajzolási szélességét (Width). A valódi szélesség (FTrueWidth) a vízszintesen elhelyezkedő papírszélesség, valamint a paraméterként kapott lapszám szorzata. A rajzolási szélesség pedig a valódi szélesség és a nagyítási százalék (FPercent) szorzata. Procedure TDrawingDesk.SetVertPages(Value:Integer);

A rajzasztalon függőleges elhelyezkedő papírlapok számának (FVertPages) beállítása. Aktualizálni kell a rajztábla valódi-, valamint rajzolási magasságát (Height). A valódi magasság (FTrueHeight) a vízszintesen elhelyezkedő papírszélesség, valamint a paraméterként kapott lapszám szorzata. A rajzolási magasság pedig a valódi magasság és a nagyítási százalék (FPercent) szorzata. procedure TDrawingDesk.SetOptions(Value: TOptions);

A rajzasztal alapjellemzőinek beállítása.

Canvas.Free;

EntityList.Free;

ContactList.Free;

CBMemo.Free;

EntityProperties.Free;

ContactProperties.Free;

FormPreview.Free;

FOptions.Free;

FModelHead.Free;

procedure TDrawingDesk.SetPaperWidth(Value:

Integer);

Var R:Real;

begin

FPaperWidth:=Value;

FTrueWidth:=Value*FHorzPages;

R:=FPercent/100;

Width:=Trunc(FTrueWidth*R);

end;

procedure DrawingDesk.SetPaperHeight(Value:

Integer);

Var R:Real;

begin

FPaperHeight:=Value;

FTrueHeight:=Value*FVertPages;

R:=FPercent/100;

Height:=Trunc(FTrueHeight*R);

End;

Page 40: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

40

A TOptions egy saját előállítású objektum, melynek csak adattárolási feladata van. A record típus helyett azért kell objektum típusként deklarálni, mert csak e formában tudjuk, tervezési állapotban is szerkeszteni. procedure TDrawingDesk.SetModelHead(Value: TModelHead);

A rajzasztal fejlécadatinak beállítása. Hasonlóan a fentiekhez a TModelHead is egy saját előállítású objektum. Ebben az esetben nincs szükség a Reapint metódus meghívására, mivel ennek értékei csak a nyomtatásban jelennek meg. Procedure TDrawingDesk.SetPercent(Value: Integer);

A rajzasztal és a rajzasztalon elhelyezkedő objektumok kicsinyítés/nagyítás tulajdonságainak beállítása. A metódusban először magának a rajzasztalnak állítjuk be a Percent tulajdonságát, majd ezen érték valamint a rajzasztal valódi méreteinek (FtrueWidth, FTrueHeight) felhasználásával aktualizáljuk a megjelenítés méreteit (Width,Height). Természetesen a rajzasztal nagyítása / kicsinyítése szükségessé teszi a rajta elhelyezkedő valamennyi objektum nagyítását / kicsinyítését. Tehát végig haladva az egyedtéglalapokat, majd a kapcsolatvonalakat tartalmazó listán, egyenként állítjuk be ezek Percent értékeit. Az objektumoknál elvégzett egy-egy ilyen értékadás (TContactLine.SetPercent,

TShapeEntity.SetPercent) elvégzi az adott objektum síkbeli méreteinek aktualizálását.

Page 41: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

41

Procedure TDrawingDesk.SetContactProperties(ParamContact:TContactLine);

Kapcsolatvonalak tulajdonságainak beállítása.

A metódus, a paraméterként kapott kapcsolatvonal tulajdonságait átviszi a beállításhoz használt dialógusba (DialogContactProperties). A dialógus ablakban történt beállítás után, nem csak a paraméterben kapott kapcsolatvonal tulajdonságát aktualizálja, hanem egy ciklussal végighaladva a kapcsolatvonal listán, az összes jelölt kapcsolatvonalét is, az ApplyContactProperties metódus meghívásával. Természetesen a kapcsolatvonal neve csak a paraméterben kapott kapcsolatvonalban aktualizálódik. Procedure TDrawingDesk.ApplyContactProperties(ActualContact: TContactLine);

Egy kapcsolatvonal tulajdonságának aktualizálása. A paraméterként kapott kapcsolatvonal tulajdonságait frissítjük a dialógusablak (DialogContactProperties) értékeivel.

Kapcsolat

azonosító

A kapcsolat

jellege

A kizáró

kapcsolat

beállítása

A kapcsolat

színe

Vonal-

vastagság

A kapcsolat

megnevezése

17. Ábra

Page 42: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

42

procedure TDrawingDesk.SetEntityProperties(Sender: TObject);

A jelölt egyedtéglalapok jellemzőinek beállítása.

Először aktualizáljuk a dialógus (EntityProperties) adatait a beállítást kezdeményező egyedtéglalap (Sender) tulajdonságaival. Megnyitjuk a dialógus ablakot szerkesztésre. Ha dialógus ablakot ’OK’-val hagytuk el, akkor végighaladunk az egyedtéglalapokat tartalmazó listán és a dialógus ablak értékeivel aktualizáljuk tulajdonságaikat. Ugyanazt a dialógus ablakot használjuk egyetlen egyedtéglalap és csoportos kijelölés esetén is. A dialógus ablakon vannak olyan adatok, amelyek nem csoport jellegűk: Azonosító (ID), Szöveg (Text). Ezeket az értékeket csoportos kijelölés esetén csak az aktuális (hívó) egyedtéglalap esetében aktualizáljuk. Egyéb metódusok Procedure TDrawingDesk.SnapToGrid(Var X,Y:Integer);

A kapott koordinátát rácsponthoz igazító metódus. Az X,Y paraméterek értékét a rajzasztal grid értékéhez ’igazítja’, menyiben az engedélyezve van (Options.GridEnab-

led). Az eredeti grid-méretekből elő kell állítani a nagyítás/kicsinyítésnek megfelelő arányos méretet (RGridX, RGridY), majd X és Y értéket ezekhez kell igazítani.

Procedure TDrawingDesk.SelectAll(SValue:Boolean);

Valamennyi, rajzasztalon elhelyezkedő objektum jelöltre állítása, illetve jelöltségüknek törlése, a kapott paraméternek (SValue) megfelelően.

If Options.GridEnabled Then

Begin

R:=Percent/100;

RGridX:=Trunc(Options.GridSizeX*R);

RGridY:=Trunc(Options.GridSizeY*R);

X:= ((X+(X mod RGridX)) div RGridX)*RGridX;

Y:= ((Y+(Y mod RGridY)) div RGridY)*RGridY;

End;

Azonosító

Szélesség

Magasság

Keretszín

Keret

vastagság

Szöveg

Háttérszín

Betûtípus

18. Ábra

Page 43: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

43

Végig haladva az egyedtéglalapokat, majd a kapcsolatvonalakat tartalmazó listán, egyenként beállítjuk ezek Marked tulajdonságait. Ettől az értéktől függően jelennek meg az objektumokon a piros méretező pontok. Function TDrawingDesk.IsAnySelected():Boolean;

A függvény, arra ad választ, hogy van-e jelölt objektum a rajzasztalon. Addig haladunk végig először az egyedtéglalapokat tartalmazó listán, majd -ha itt nem találunk-, a kapcsolatvonalakat tartalmazó listán, amíg nem találunk olyat, melynek Marked tulajdonság igaz értéken áll. Procedure TDrawingDesk.SelectedDelete;

Valamennyi jelölt objektum megszüntetése. Először a kapcsolatvonalakat tartalmazó listán haladunk végig. Meg kell vizsgálni, hogy az adott kapcsolatvonal (ActualContact) jelölt-e, illetve azt is, hogy az adott kapcsolatvonal végpontján elhelyezkedő egyedtéglalapok (FromEntity, ToEntity) jelöltek-e. Mindkét esetben törölni kell a kapcsolatvonalat, mivel a későbbiekben a jelölt egyedtéglalap is törlésre kerül és egyetlen kapcsolatvonal végpontja sem ’lóghat a levegőben’. Az egyedtéglalapok esetében, egy ciklus segítségével végig haladva listán, megszüntetjük a jelölt egyedtéglalapokat. A törlés nem csak az adott objektum által lefoglalt memória felszabadítását (Free) jelenti, de gondoskodni kell az őket tartalmazó listák aktualizálásáról is, pontosabban az abból történő törléséről is. Procedure TDrawingDesk.AllEnable(EValue:Boolean);

Valamennyi, rajzasztalon elhelyezkedő objektum elérhetőségének beállítása a kapott paraméternek (SValue) megfelelően. Végig haladva az egyedtéglalapokat, majd a kapcsolatvonalakat tartalmazó listán, egyenként beállítjuk ezek Enabled értékeit. Az objektumok ettől az értéktől függően fogadják el az üzeneteket. Pl.: egérkattintás. Function TDrawingDesk.NewEntityID():Integer;

Egyedi azonosító meghatározása. Minden egyedtéglalaphoz meg kell határozni egy azonosítót, melyet ez a függvény szolgáltat. 0-tól kezdve, egyesével növelünk egy változót (ShapeId) mindaddig, amíg olyat nem találunk, amelyet még egyetlen egyedtéglalap sem tartalmaz. Function TDrawingDesk.NewContactID():Integer;

A kapcsolatvonal egyedi azonosítójának meghatározása. Hasonlóan az egyedtéglalapokhoz, minden kapcsolatvonalhoz meg kell határozni egy azonosítót, melyet ez a függvény szolgáltat. 0-tól kezdve, egyesével növelünk egy változót (ShapeId) mindaddig, amíg olyat nem találunk, amelyet még egyetlen kapcsolatvonal sem tartalmaz. Function TDrawingDesk.WhereIsOldID(ID:Integer):TShapeEntity;

A paraméterben megadott azonosító megkeresése az egyedtéglalapokat tároló listában. A keresés az OldID tulajdonságok vizsgálatával történik. A függvény találat esetén az egyedtéglalap mutatójával tér vissza, egyébként pedig Nil-el. Amikor a CBMemo-ból kiolvassuk a kapcsolatvonalakat, akkor ezzel a függvénnyel határozzuk meg a kapcsolatvonal FromEntity és ToEntity tulajdonságát.

Page 44: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

44

Procedure TDrawingDesk.MarkWithInFrame;

A csoport kijelölő keret (X1,Y1 ; X2,Y2)- koordinátái által közrefogott objektumok jelöltre állítása Egy ciklus segítségével végig haladva az egyedtéglalapokat tároló listán megvizsgáljuk, hogy az egyedtéglalapok bal-felső illetve jobb-alsó koordinátái a jelölő keret koordinátái között elyezkednek-e el. Amelyek igen, azokat jelöltre

állítjuk.

Egy újabb ciklussal végig haladunk a kapcsolatvonalakat tartalmazó listán és itt a kapcsolatvonalat felépítő valamennyi koordinátát ellenőrizzük. Amennyiben minden koordinátája a kereten belül helyezkedik el, akkor jelöltre állítjuk.

Procedure TDrawingDesk.RectOrder(Var X1,Y1,X2,Y2:Integer);

A kapott koordinátapár rendezése. Ez a metódus (X1,Y1) (X2,Y2) koordináta párokat a szerint rendezi, hogy melyik van közelebb az origóhoz. Erre az általuk közrefogott objektumok meghatározáshoz van szükség. Function TDrawingDesk.CursorOnAnyLine(x,y:Integer):Boolean;

Igaz értékkel tér vissza, ha a paraméterként kapott pont egy egyenesen helyezkedik el. Egy ciklus segítségével végighaladva a kapcsolatvonalakat tároló listán, az OnThePoint függvénnyel megvizsgáljuk, hogy az (x,y) pont a kapcsolatvonal mely töréspontján helyezkedik el. Ha nem törésponton helyezkedik el, akkor egy újabb ciklus segítségével ismét végighaladva a kapcsolatvonalakat tároló listán, az OnTheLine függvénnyel megvizsgáljuk, hogy az (x,y) pont, a kapcsolatvonal mely szakaszán helyezkedik el. Találat esetén, a találat helyének megfelelően állítjuk be aDragContact rekord adatait. Function TDrawingDesk.OnThePoint(x1,y1:Longint; x,y:Integer):Boolean;

Igaz értékkel tér vissza, ha a paraméterként kapott (x,y) pont az (x1,y1) pont 3 pixelnyi környezetében helyezkedik el. Function TDrawingDesk.OnTheLine(x1,y1,x2,y2:Longint; x,y:Integer):Boolean;

Igaz értékkel tér vissza, ha a paraméterként kapott (x,y) pont az (x1,y1; x2,y2) koordinátákkal meghatározott szakasz 3 pixelnyi környezetében van.

If (GroupMark.X1<Left) and

(GroupMark.X2>Left+Width) and

(GroupMark.Y1<Top) and

(GroupMark.Y2>Top+Height) Then

Marked:=True;

J:=1;

While (J<=4) and (GroupMark.X1<Points[J].X) and

(GroupMark.X2>Points[J].X) and

(GroupMark.Y1<Points[J].Y) and

(GroupMark.Y2>Points[J].Y) Do J:=J+1;

If J=5 Then Marked:=True;

(x1,y1)

(x2,y2)

19. Ábra

Page 45: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

45

Rajzolást végző metódusok procedure TDrawingDesk.Paint;

A rajzasztal tartalmát vizuálisan megjelenítő metódus.

Amennyiben a rajzasztal rácspontra vonatkozó paraméterei (GridEnabled, GridShow) engedélyezve vannak, kirajzoljuk a rácspontokat a megadott színnel (Color) és a megadott távolsági értékekkel (GridSizeX, GridSizeY). A rácspontok rajzolásakor ügyelni kell arra, hogy csak akkor változtassuk meg a színét a pontnak, ha az megegyezik a rajzasztal színével. Ezek után a lapok kirajzolása következik. A rajzasztal mindig a nagyítás/kicsinyítés (Percent) százalékos értékével arányos nagyságú, ezért a rajzasztalt vízszintesen annyi részre osztjuk, amennyi az előzetesen beállított vízszintesen elhelyezkedő lapok száma (HorzPages). Természetesen ez a függőleges elválasztó vonalak kirajzolását jelenti. Ugyanezt az eljárást követjük a vízszintes elválasztó vonalak kirajzolásakor is, de itt a felosztások számát a VertPages tulajdonság szolgáltatja. A kapcsolatvonalakat jelölő vonalak kirajzolása is itt történik. Végig haladva a kapcsolatvonalokat tároló listát, rendre meghívjuk azok kirajzolási metódusát (DrawContact).

y:=GridSizeY;

While y<Height Do

Begin

x:=GridSizeX;

While x<Width Do

Begin

IF Canvas.Pixels[x,y]= Color Then

Canvas.Pixels[x,y]:= ClBlack;

x:=x+GridSizeX;

End;

y:=y+GridSizeY;

End;

A rajzasztal

megjelenítése

Vízszinteslapszélek

Kapcsolatokkirajzolása

Rácspontok

rajzolásaLapszélek

Oszlop

Sor

Függõlegeslapszélek

Kapcsolatok

20. Ábra

Page 46: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

46

procedure DrawingDesk.DrawContact(ActualContact:TContactLine; LineColor:

TColor);

A paraméterként kapott kapcsolatvonal kirajzolása a megadott színnel.

Beállítjuk a kapcsolatvonalat alkotó szakaszok jellemzőit, színek, rajzmód, valamint a rajzasztal Percent értékével arányos vonalvastagságot. A vonal kirajzolása előtt a DrawPoints tömbben be kell állítani a vonal és az általa összekapcsolt egyedtéglalapok metszéspontjainak koordinátáit, melyet a RealContact metódus meghívásával érünk el. A kapcsolatvonalat felépítő vonalrendszert kétfelé osztva kell kirajzolni, mivel mindkét félnek eltérő lehet a vonal típusa (szaggatott, folytonos), ezért kiszámítjuk és az xh, yh változókban eltároljuk a vonalrendszer középpontját. Ezután már a DotBegin és a DotEnd tulajdonságok állapotának megfelelően tudjuk elvégezni a rajzolást. Az xh és yh koordináta alapján végezzük el a kapcsolatvonal nevének kiírását a DrawContactText metódus meghívásával. A kapcsolatvonal végére egy csirkeláb kerül kirajzolásra a ChickenFoot metódus meghívásával. Amennyiben a kapcsolat jellege kizáró, akkor ennek kirajzolását is elvégezzük a DrawLockOutEnd és DrawLockOutBegin metódusokkal. Procedure TDrawingDesk.DrawContactText(xh,yh:Integer; Text1:String);

Egy szöveg (kapcsolatvonal nevének) elhelyezése a rajzasztalon. A szöveg kezdő koordinátáját úgy válasszuk meg, hogy annak közepe, vízszintesen az xh koordinátára essen, függőlegesen pedig az yh felett, a szöveg pixel magasságának háromszorosával jelenjen meg.

CY:=Canvas.TextExtent(Text1).cy div 2 ;

CX:=Canvas.TextExtent(Text1).cx div 2;

Canvas.TextOut(xh-CX, yh-(CY*3), Text1);

DrawPoints[1]

Points[1]

Points[2]

Points[3] Points[4]

DrawPoints[4]

DrawPoints[3]

DrawPoints[2]

(xh,yh)

ChickenFoot

LockOutBegin

DotBegin

Name

21. Ábra

Page 47: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

47

Procedure TDrawingDesk.DrawContactMark(ActualContact:TContactLine);

Egy kapcsolatvonal jelöltségének kirajzolása. A kapcsolatvonalat felépítő szakaszok közül a középső szakasz végpontjaira egy 3x3-as piros négyzetet rajzolunk.

Procedure TDrawingDesk.ChickenFoot(ActualContact:TContactLine);

A csirkeláb kirajzolása a paraméterben megadott kapcsolatvonalhoz. A kapcsolatvonalat felépítő szakaszokból az utolsót meghatározó koordinátákat rövidebb változókba tesszük át. (x3,y3; x4,y4). Akár el is lehetne hagyni, azonban rövidebb változókkal áttekinthetőbb a metódus további része. Meghatározzuk a csirkeláb magasságát (CFHeight) és szélességét (CFWidth) a nagyítás / kicsinyítés mértékével arányosan (22. Ábra). Ha a szakasz vízszintesen helyezkedik el (y3=y4), akkor el kell dönteni, hogy a csirkeláb csúcsa merre mutasson jobbra vagy balra. Amennyiben a szakasz első vízszintes koordinátája (x3) jobbra helyezkedik el a másodikhoz (x4) képest (23. Ábra), akkor a csirkeláb balra mutat, ellenkező esetben jobbra (24. Ábra).

Jelölőlség pontok

22. Ábra

(x4,y4)

(x3,y3)

y3=y4

y3<y4

24. Ábra

(x4,y4)

(x3,y3)

y3=y4

x3>y4

23. Ábra

Page 48: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

48

Ha a szakasz függőlegesen helyezkedik el (x3=x4), akkor el kell dönteni, hogy a csirkeláb csúcsa merre mutasson fel vagy le. Amennyiben a szakasz első függőleges koordinátája (y3) a második (y4) felett helyezkedik el (25. Ábra), akkor a csirkeláb felfelé mutat, ellenkező esetben lefelé (26. Ábra).

Procedure TDrawingDesk.MarkRectDraw(x1,y1,x2,y2:Integer);

Jelölő keret rajzolása. Ez a metódus egy téglalapot rajzol a paraméterben megadott koordinátáknak megfelelően fekete színnel. Fontos, hogy a rajzolás módja pmNotXor típusú. Ezzel elérhető, hogy kétszer ugyanazt a keretet kirajzolva az elsőnél megjelenik egy piros keret, a második rajzolásnál pedig ugyanez eltűnik. Procedure TDrawingDesk.DrawLockOutEnd(ActualContact:TContactLine);

Kizáró ív rajzolása a paraméterben megadott kapcsolatvonal utolsó szakaszára. A kapcsolatvonalot felépítő szakaszokból az utolsót meghatározó koordinátákat rövidebb változókba tesszük át. (xF,yF; xT,yT). Meghatározzuk a körív magasságát (CFHeight) és szélességét (CFWidth) a nagyítás / kicsinyítés mértékével arányosan. Valójában nem egy körívet rajzolunk, hanem egy 4 szakaszból álló vonalrendszert. Az egyes szakaszok koordinátáit a CFWidth és a CFHeight értékének arányosításával határozzuk meg.

(x4,y4)

(x3,y3)

x3=x4

y3<y4

25. Ábra

(x4,y4)

(x3,y3)

x3=x4

y3>y4

26. Ábra

CFWidth x 2

CFWidth

CFWidth/4

CFWidth x 3/4

CFHeight

CFHeight/2

27. Ábra

Page 49: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

49

Ha a szakasz vízszintesen helyezkedik el (yF=yT), akkor el kell dönteni, hogy a körív

domború oldala merre mutasson jobbra vagy balra. Amennyiben a szakasz első vízszintes koordinátája (xF) jobbra helyezkedik el a másodikhoz képest (xF<xT), akkor a körív balra mutat (28.Ábra), ellenkező esetben jobbra. Az előbbiekhez hasonlóan kell eldönteni a függőlegesen elhelyezkedő szakaszra rajzolt körív orientációját (xF=yF). Amennyiben a szakasz első függőleges koordinátája a második fölött helyezkedik el (yF<yT), akkor a körív felfelé mutat, ellenkező esetben lefelé. Az elv megegyezik a ChickenFoot rajzolásánál ismertetekkel.

Procedure TDrawingDesk.DrawLockOutBegin(ActualContact:TContactLine);

Kizáró ív rajzolása a paraméterben megadott kapcsolatvonal első szakaszára. Meghatározzuk a körív magasságát (CFHeight) és szélességét (CFWidth) a nagyítás / kicsinyítés mértékével arányosan. Ha a szakasz vízszintesen helyezkedik el (yF=yT), akkor el kell dönteni, hogy a körív domború oldala merre mutasson jobbra vagy balra. Amennyiben a szakasz első vízszintes koordinátája jobbra helyezkedik (xT<xF) el a másodikhoz képest, akkor a körív balra mutat (29. Ábra), ellenkező esetben jobbra. Az előbbiekhez hasonlóan kell eldönteni a függőlegesen elhelyezkedő szakaszra rajzolt körív orientációját (xF=xT). Amennyiben a szakasz első függőleges koordinátája a második fölött helyezkedik el (yF<yT), akkor a körív felfelé mutat, ellenkező

esetben lefelé.

(xF,yF)

(xT,yT)

yF=yT

xF<xT

28. Ábra

(xF,yF)

(xT,yT)

yF=yT

xF>xT

29. Ábra

Page 50: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

50

Koordináta beállító, transzformáló metódusok Procedure TDrawingDesk.RealContact(ActualContact:TContactLine; Var DrawPoints:

TPoints);

Meghatározza a paraméterben megadott kapcsolatvonal és az általa összekötött egyedtéglalapok metszéspontját.

A kapcsolatvonal két végpontja az egyedtéglalap területén helyezkedik el. Azonban kirajzolásukkor csak az egyedtéglalapon kívül eső részét szabad megjeleníteni. A kapcsolatvonalat felépítő szakaszok koordinátáit rövidebb változókba tesszük át (x1,y1;

x2,y2; x3,y3; x4,y4). Először a kiinduló egyedtéglalap (FromEntiy) kapcsolódó pontját határozzuk meg. Ha az első szakasz vízszintesen helyezkedik el (y1=y2), akkor el kell dönteni, hogy a szakasz az egyedtéglalap jobb vagy baloldalára csatlakozik. Amennyiben szakasz első vízszintes koordinátája (x1) jobbra helyezkedik el a második (x2) koordinátájától, akkor a szakasz érintőpontja az egyedtéglalap vízszintes koordinátája + az egyedtéglalap szélessége (Left+Width), ellenkező esetben az egyedtéglalap vízszintes koordinátája (Left). Az előbbiekhez hasonlóan kell eldönteni a függőlegesen elhelyezkedő szakasz kapcsolódási pontját. Amennyiben a szakasz első függőleges koordinátája (y1) a második (y2) fölött helyezkedik el, akkor a szakasz érintőpontja az egyedtéglalap függőleges koordinátája + az egyedtéglalap magassága (Top+Height), ellenkező esetben az egyedtéglalap függőleges koordinátája (Top). Ugyanezen az elven határozzuk meg a kapcsolatvonal végére illeszkedő egyedtéglalap (ToEntity) és az utolsó szakasz metszéspontját. Az eredményt a DrawPoints tömb fogja tartalmazni.

(x1,y1)

(x2,y2)

(x3,y3)

(x4,y4)Width

Height

(Left,Top)

FromEntity

ToEntity

Metszéspont

Metszéspont

30. Ábra

Page 51: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

51

Procedure TDrawingDesk.CalcContactPoint(ShFrom,ShTo:TShapeEntity; Var

ActualContact:TContactLine);

Kiszámítja a koordinátáit egy újonnan létrehozott kapcsolatnak. A kapcsolatvonal jellegének döntési menete:

31. Ábra

Page 52: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

52

A kapcsolatvonal végpontjai az általa összekötött egyedtéglalapok középpontjába

helyezzük (32.Ábra). Ezeket jelölik az (ffx,ffy) koordináták a kezdő egyedtéglalap és (ttx,tty) koordináták a vég-egyedtéglalap esetében. Ezek után meg kell állapítani, hogy vízszintesen vagy pedig függőleges irányban nagyobb-e a távolság a két egyedtéglalap között. Amennyiben vízszintesen, akkor megvizsgáljuk, hogy van-e közös része a függőleges távolságnak és vég-egyedtéglalap magasságának. Ha van, akkor egy cikk-cakk vonalat generálunk, figyelembe véve, hogy a kezdő-egyedtéglalap a vég-egyedtéglalap felett, vagy pedig alatt helyezkedik el. Ha, nincs közös része a függőleges távolságnak és vég-egyedtéglalap magasságának, akkor egy derékszögű kapcsolatvonal adatait generáljuk le, melynek első szakasza az egyedtéglalap jobb- illetve bal oldalán helyezkedik el.

Amennyiben a két egyedtéglalap közötti távolság függőleges irányba nagyobb, akkor meg vizsgáljuk, hogy van-e közös része a vízszintes távolságnak és az ég-egyedtéglalap szélességének. Amennyiben van, akkor egy cikk-cakk vonalat generálunk, attól függően, hogy a kezdő-egyedtéglalap a vég-egyedtéglalap jobb-t, vagy pedig baloldalán helyezkedik el. (33. Ábra) Ha, nincs közös része a vízszintes távolságnak és vég-egyedtéglalap szélességének, akkor egy derékszögű kapcsolatvonal adatait generáljuk le, melynek első szakasza az egyedtéglalap felső illetve alsó oldalán helyezkedik el.

(fx1,fy1)

(fx2,fy2)

(tx1,ty1)

(tx2,ty2)

(ffx,ffy)

(ttx,tty)

Kezdõ-egyed

(FromEntity)

Vég-egyed

(ToEntity)

(l2x,l2y)=(l3x,l3y)

32. Ábra

Végegyed

Kezdõegyed

Közösrész

33. Ábra

Page 53: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

53

Procedure TDrawingDesk.ReCalcContactPoint(Var ActualContact:TContactLine);

A kapcsolatot felépítő vonalrendszer újraszámítása.

A 34. ábrán két egyedtéglalapot és az őket összekötő kapcsolatvonal egy lehetséges elhelyezkedése látható, feltüntetve a meghatározó koordinátákat. A kezdő-egyedtéglalapot az (fx1,fy1) és az (fx2,fy2) koordináta pár által közrezárt téglalap határozza meg. Az (ffx,ffy) koordináta az egyedtéglalap középpontját jelöli. A vég-egyedtéglalapot az (tx1,ty1) és az (tx2,ty2) koordináta pár által közrezárt téglalap határozza meg. Az (ttx,tty) koordináta az egyedtéglalap középpontját jelöli. A kapcsolat felépítő vonalrendszer egy 4 elemet tartalmazó tömbbel határozzuk meg, amely a kezdő-, vég-, és töréspontok koordinátáit tartalmazza.(l1x,l1y),..,(l4x,l4y). Amikor egy egyedtéglalapot, kapcsolatvonalat elmozdítunk, illetve megváltoztatjuk a rajzasztal nagyítás/kicsinyítés tulajdonságát, szükségessé válik a kapcsolatot felépítő szakaszok koordinátáinak aktualizálása.

(fx1,fy1)

(fx2,fy2)

(tx1,ty1)

(tx2,ty2)

(ffx,ffy)

(ttx,tty)

(l1x,l1y)(l2x,l2y)

(l3x,l3y)

(l4x,l4y)

Kezdõ-egyed

(FromEntity)

Vég-egyed

(ToEntity)

34. Ábra

Page 54: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

54

Az aktualizálás menetét az alábbi Jackson ábrák szemléltetik (35-39. Ábra):

Kapcsolat

rajzolás

Egyszrű

fel-le kapcsolat

Függőleges

vonal

Egyetlen

függõleges

vonal

rajzolása

Egyszrű

jobbra-balra

kapcsolat

Vízszintes

vonal

Egyetlen

vízszintes

vonal

rajzolása

A két egyed

egymáshoz

való viszonya

Egy egyenssel

összekapcsolhatóA két egyed

egymáshoz

való viszonya

Egy egyenssel

nem kapcsolható

össze

Törésponttal

rendelkezõ

kapcsolat

vizsgálat

35. Ábra

Vég-egyed

helyzete

jobbra-fel

Törésponttal

rendelkezõ

kapcsolat vizsgálat

Vég-egyed

helyzete

jobbra-leVég-egyed

helyzete

balra-felVég-egyed

helyzete

balra-le

A kapcsolat

vonalrendszerének

vizsgálata

A kapcsolat

vonalrendszerének

vizsgálata

A kapcsolat

vonalrendszerének

vizsgálata

A kapcsolat

vonalrendszerének

vizsgálata

36. Ábra

Page 55: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

55

A fenti Jackson ábra sorozatban a több törésponttal rendelkező kapcsolatvonalak közül, csupán a jobbra-fent egyedtéglalap elhelyezkedés esetét részletezi. Ez elegendő mivel a többi 3 elhelyezkedés esetén is ugyanez a kapcsolatvonal-vizsgálat menete.

37. Ábra

Page 56: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

56

A Jakson ábra szerint az első, amit el kell dönteni, hogy a két egyedtéglalap összekapcsolható-e egyetlen egyenessel, vagyis nincs szükség töréspontra a kapcsolatvonal ábrázolásához. Ennek megállapításához szükség van két függvényre. Az első (SimpleUporDown) akkor ad igaz értéket, ha a kapcsolatvonal egyetlen függőleges vonallal megalkotható. Ehhez meg kell vizsgálni, hogy az l1x a tx1 és tx2 közé esik-e, az ábrának megfelelően.

A második (SimpleLeftorRight) akkor ad igaz értéket, ha a kapcsolatvonal egyetlen vízszintes vonallal megalkotható. Ehhez meg kell vizsgálni, hogy az l1y a ty1 és ty2 közé esik-e (38. Ábra). Természetesen mindkét függvény be is állítja a két egyedtéglalapot összekötő kapcsolatvonal koordinátáit.

Ha nem alkotható meg egyetlen vonallal a kapcsolatvonal, akkor tovább vizsgáljuk a két egyedtéglalap egymáshoz viszonyított helyzetét. Megvizsgáljuk, hogy a vég-egyedtéglalap a kezdő-egyedtéglalaphoz képest, jobbra-fent, jobbra-lent, balra-fent vagy balra-lent helyezkedik-e el (39. Ábra).

If (ffx<ttx) and (ffy>tty) Then {Jobbra-Fent}

If (ffx<ttx) and (ffy<tty) Then {Jobbra-Lent}

If (ffx>ttx) and (ffy<tty) Then {Balra-Fent}

If (ffx>ttx) and (ffy>tty) Then {Balra-Lent}

If ((l1x>=tx1) and (l1x<=tx2))

Then

If ((l1y>=ty1) and (l1y<=ty2)) Then

(fx1,fy1)

(fx2,fy2)

(ffx,ffy)

(l1x,l1y)

(tx1,ty1)

(tx2,ty2)

(ttx,tty)

38. Ábra

(fx1,fy1)

(fx2,fy2)

(tx1,ty1)

(tx2,ty2)

(ffx,ffy)

(ttx,tty)(l1x,l1y)

39. Ábra

Page 57: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

57

A Jackson ábra szerint a jobbra-fent helyzetet részletezzük tovább. Megvizsgáljuk, hogy a két egyedtéglalap összekötését egy törésponttal rendelkező (derékszög-jellegű) kapcsolatvonallal, vagy pedig két törésponttal rendelkező (cikk-cakk jellegű) kapcsolatvonallal kell-e megoldani. A cikk-cakk jellegű összekötés csak a kapcsolatvonal, vonszolásával érhető el, az egyedtéglalap áthelyezésével nem. Amennyiben a kapcsolatvonal egy törésponttal rendelkezik és ez a pont a két egyedtéglalap egymáshoz legközelebb eső sarkai által közrezárt téglalap területén helyezkedik el, akkor cikk-cakk lesz az eredmény vonal jellege (41. Ábra).

(fx1,fy1)

(fx2,fy2)

(ffx,ffy)

Kezdõ-egyed

(FromEntity)

(tx1,ty1)

(tx2,ty2)

(ttx,tty)

(tx1,ty1)

(ttx,tty)

(tx2,ty2)

Vég-egyed

(ToEntity)

(tx1,ty1)

(tx2,ty2)

(ttx,tty)

(tx1,ty1)

(tx2,ty2)

(ttx,tty)

40. Ábra

(fx1,fy1)

(fx2,fy2)

(tx1,ty1)

(tx2,ty2)

(ffx,ffy)

(ttx,tty)

Kezdõ-egyed

(FromEntity)

Vég-egyed

(ToEntity)

A vizsgált

téglalap

mozgatá

s

(l2tx,l2y)=(l3x,l3y)

41. Ábra

Page 58: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

58

Az eredmény ebben az esetben így néz ki:

Ha kapcsolatvonal középső pontja négyzeten kívül esik, akkor derékszög jellegű kapcsolatvonallal fogjuk összekötni a két egyedtéglalapot. A Jackson ábrát követve azonban el kell dönteni, hogy a kapcsolatvonal jobbra-fel, vagy fel-jobbra jellegű lesz-e. Ennek eldöntéséhez megvizsgáljuk, hogy a kezdő-egyedtéglalap és a vég-egyedtéglalap középpontján áthaladó egyenes melyik oldalára esik a második töréspont (l2x,l2y) és ettől függően állítjuk be a vonal jellegét: jobbra-fel, vagy fel-jobbra (43. Ábra).

If (l2x=l3x) and (l2y=l3y) Then

Begin

If (l2x<fx1) and (l2x>tx2) and (l2y>fy2) and (l2y<ty1) Then

(fx1,fy1)

(fx2,fy2)

(tx1,ty1)

(tx2,ty2)

(ffx,ffy)

(ttx,tty)

Kezdõ-egyed

(FromEntity)

Vég-egyed

(ToEntity)

(l2tx,l2y)

(l3x,l3y)

Cikk-cakk

jellegû

kapcsolat

42. Ábra

(fx1,fy1)

(fx2,fy2)

(tx1,ty1)

(tx2,ty2)

(ffx,ffy)

(ttx,tty)

Kezdõ-egyed

(FromEntity)

Vég-egyed

(ToEntity)

(l2x,l2y)=(l3x,l3y)

mozgatás

43. Ábra

Page 59: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

59

Ennek megállapításához szükségünk van az (l2x,l2y) pontból az e egyenesre bocsátott merőleges és az e egyenes metszéspontjára (SP2.x,SP2.y) (44. Ábra). Amennyiben az l2x kisebb, mint az SP2.x és l2y kisebb, mint az SP2.y akkor az e egyenes fölött, egyébként pedig alatt helyezkedik el.

A mozgatás eredménye:

If (l2x<SP2.X) And (l2y<SP2.Y) Then

{Left-Down}

Else

{Down-Left}

(fx1,fy1)

(fx2,fy2)

(tx1,ty1)

(tx2,ty2)

(ffx,ffy)

(ttx,tty)

Kezdõ-egyed

(FromEntity)

Vég-egyed

(ToEntity)

(l2x,l2y)=(l3x,l3y)

e

(SP2.x,SP2.y)

44. Ábra

(fx1,fy1)

(fx2,fy2)

(tx1,ty1)

(tx2,ty2)

(ffx,ffy)

(ttx,tty)

Kezdõ-egyed

(FromEntity)

Vég-egyed

(ToEntity)

(l2x,l2y)=(l3x,l3y)

45. Ábra

Page 60: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

60

A Jackson ábra másik főága, amikor a vonalrendszer két törésponttal rendelkezik, vagyis cikk-cakk jellegű.

Amennyiben a kapcsolatvonal két középső töréspontja (l2x,l2y; l3x,l3y) a két egyedtéglalap középpontját összekötő egyenes felett van akkor fel-jobbra (46. Ábra), ha alatta, akkor jobbra-fel jellegű lesz a kapcsolatvonal. Ha a két pont az egyenes ellenkező oldalán helyezkedik el, akkor megmarad a cikk-cakk jelleg.

A mozgatás eredménye:

A törésponttal rendelkező kapcsolatvonalak további három ágának vizsgálata a fentiekkel azonos szerkezetben történik.

If (l2x>SP2.X) And (l2y>SP2.Y) And (l3x>SP3.X) And (l3y>SP3.Y) Then

{Right-Up}

Else

If (l2x<SP2.X) And (l2y<SP2.Y) And (l3x<SP3.X) And (l3y<SP3.Y) Then

{Up-Right}

Else

{Zig-Zag}

(fx1,fy1)

(tx1,ty1)

(ffx,ffy)

(ttx,tty)

Kezdõ-egyed

(FromEntity)

Vég-egyed

(ToEntity)

A vizsgált

téglalap

mozgatás

(l2x,l2y)

(l3x,l3y)

46. Ábra

(fx1,fy1)

(fx2,fy2)

(tx1,ty1)

(tx2,ty2)

(ffx,ffy)

(ttx,tty)

Kezdõ-egyed

(FromEntity)

Vég-egyed

(ToEntity)

(l2x,l2y)=(l3x,l3y)

47. Ábra

Page 61: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

61

Function TDrawingDesk.StuckPoint(x1,y1,x2,y2:Longint; x,y:Integer):TPoint;

A paraméterként kapott pontból (x,y), a szintén paraméterként kapott egyenesre (x1,y1;

x2,y2) bocsátott merőleges és az egyenes metszéspontja. A koordináta megállapításának képlete:

ahol, (x1,y1)(x2,y2) az egyenest meghatározó koordináták, (x0,y0) a vizsgált pont. Természetesen a programban figyelembe kell venni, hogy a nevezőben nem lehet nulla. Function TDrawingDesk.PointOnEntity(ActualShape:TShapeEntity;

x,y:Integer) :Boolean;

Igaz értékkel tér vissza, ha a paraméterként kapott pont az ugyancsak paraméterként kapott egyedtéglalapra esik. Ennek a függvénynek segítségével tartjuk a vonszolt kapcsolatvonal végpontjait az egyedtéglalapon.

12

12012012

2

12

2

21

2

120

2

21210112

)()()(

)()(

)()())()((

yy

xxyyyxxxy

xxyy

xxxyyyyyyxxx

−−−+−

=

−+−

−+−+−−−

=

(x1,y1)

(x2,y2)(x0,y0)

(x,y

48. Ábra

Page 62: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

62

Vágólap- és fájlkezelő metódusok Biztosítani kell az asztalon elhelyezkedő objektumok vágólapra történő kihelyezését és az onnan történő beillesztését. Ennek megoldása egy apró trükkel igen egyszerűen megoldható. Szükség van egy algoritmusra, amely képes az objektumok jellemző adatokat szöveges információvá alakítani valamint egy olyanra, amely ebből a szöveges adathalmazból képes reprodukálni a modellt. Nos ezt a szöveg halmazt egy Memo objektum Line tulajdonságába helyezve kihasználhatjuk a TMemo osztály Clipboard és File metódusait. A rajzasztal tartalmaz egy CBMemo objektumot, amely természetesen rejtve marad a felhasználó elöl. Procedure TDrawingDesk.CopyToClipboard;

A rajzasztalon kijelölt objektumok másolása a vágólapra. Először kiürítjük a vágólapot, valamint a rajzasztal Memo objektumát. Egy ciklussal végighaladva az egyedtéglalapokat tartalmazó listán minden jelölt egyedtéglalap leírását átmásoljuk az AddEntityCBorad metódus meghívásával a CBMemo-ba, majd ugyanezt elvégezzük egy külön ciklus segítségével, a kapcsolatvonalak esetében is, az AddContactCBoard metódus meghívásával. Végül átmásoljuk a CBMemo szövegtartalmát a vágólapra és töröljük CBMemo tartalmát. Procedure TDrawingDesk.AddEntityCBoard(ActualShape: TShapeEntity);

Egy egyedtéglalap szöveges adatként történő hozzáadása a CBMemo szövegtároló listájához. A szövegtároló több egyedtéglalap illetve kapcsolatvonal adatait tartalmazza, melynek visszaolvasáskor minden soráról el kell tudnunk dönteni, hogy éppen milyen típusú információt tartalmaz. Ennek megoldására egy kapcsos zárójelek közé foglalt betűt használunk. [S] S-el jelöljük, hogy az ezután következő sorok egy egyedtéglalap leírását

tartalmazzák: – azonosító – háttérszín – keretszín – keretvastagság – a valódi pozíciója és mérete

[F] F-el jelöljük, hogy az ezután következő sorok az egyedtéglalap Font tulajdonságait tartalmazzák: – színe – neve – mérete – stílusa

[T] T-vel jelöljük, hogy az ezután következő sorok az egyedtéglalap szöveg tulajdonságát tartalmazzák.

Procedure TDrawingDesk.AddContactCBoard(ActualContact: TContactLine);

Egy kapcsolatvonal szöveges adatként történő hozzáadása a CBMemo szövegtároló listájához. [C] C-vel jelöljük, hogy az ezután következő sorok egy kapcsolatvonal leírását

tartalmazzák: – kezdő-egyed azonosítója

Page 63: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

63

– vég-egyed azonosítója – kapcsolatvonal azonosítója – színe – vastagsága – kapcsolatvonal neve – vonal eleje pontozott – vonal vége pontozott – kizáró körív a vonal elején – kizáró körív a vonal végén – vonalrendszer koordinátái

[L] L-el jelöljük, hogy az ezután következő sorok az egyedtéglalapot felépítő szakaszok koordinátáit tartalmazzák:

Procedure TDrawingDesk.AddTitleCBoard;

A modell fejadatainak hozzáadása a CBMemo szövegtároló listájához. [H] H-val jelöljük, hogy az ezután következő sorok a fejadat leírását tartalmazzák:

– egy fix szöveg mely utal arra, hogy egy LDM adatait tartalmazza a szövegtároló (SSADM Logical Data Model 1.0) – project neve – modell neve – szerző – verzió – dátum

procedure TDrawingDesk.CutToClipboard;

Az rajzasztalon kijelölt objektumok másolása a vágólapra. Elsőször kiürítjük a vágólapot, valamint a rajzasztal Memo objektumát. Egy ciklussal végighaladva az egyedtéglalapokat tartalmazó listán, minden jelölt egyedtéglalap leírását áthelyezzük a CBMemo-ba az AddEntityCBorad metódus meghívásával, majd ugyanezt elvégezzük egy külön ciklus segítségével a kapcsolatvonalak esetében is, az AddContactCBoard metódus meghívásával. Áthelyezzük a CBMemo szövegtartalmát a vágólapra és töröljük a CBMemo tartalmát. Mivel a 'kivágás vágólapra' művelet magával vonja a másolt objektumok megszüntetését, ezért meghívjuk SelectedDelete metódust, mely törli a jelöltre állított objektumokat. procedure TDrawingDesk.PasteFromClipboard;

A vágólapon szereplő objektumok átmásolása a rajzasztalra. Feltöltjük a CBMemo-t a vágólap tartalmával, majd meghívjuk a ReadCBoard metódust, amely a vezérlő karakterek és az objektumok adatai alapján létrehozza és elhelyezi az egyedtéglalapokat és kapcsolatvonalakat a rajzasztalon. Ezek után el kell végeznünk az azonosítók aktualizálását. A kapcsolatvonalak rendelkeznek egy kezdő-egyedtéglalap (FromEntity) és egy vég-egyedtéglalap (ToEntity) tulajdonsággal. A vágólap használatakor ezeknek az objektumoknak az azonosítóit tároljuk. Amikor a vágólapról a rajzasztalra másoljuk az egyedtéglalapokat, előfordulhat, hogy azok azonosítói már léteznek, így a kapcsolatvonalak más egyedtéglalapokat fognak összekötni. Ennek elkerülése végett egy ideiglenes OldID tulajdonsággal ruházzuk fel az egyedtéglalapokat. Ezekben helyezzük el az azonosítókat és ezekre hivatkozunk a

Page 64: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

64

kapcsolatvonal kirajzolásakor. Tehát az OldID-knek megfelelő egyedtéglalapok címeit helyezzük be a kapcsolatvonalak FromEntity és ToEntity tulajdonságaiba. Természetesen az objektumok rajzasztalon történt létrehozása és elhelyezése után, aktualizáljuk az azonosítókat. Végig haladunk egy ciklus segítségével az egyedtéglalapokon, majd a kapcsolatvonalakon és a NewEntityID illetve NewContactID függvényekkel új egyedi azonosítót osztunk ki ezen objektumoknak, mindeközben az OldID tulajdonságokat nullázzuk. Itt már nincs jelentősége az azonosítóknak abból a szempontból, hogy egy kapcsolatvonal mely két egyedtéglalapot köti össze, mivel magát az egyedtéglalapok címet tároljuk a kapcsolatvonal kezdő-, és vég-egyedtéglalap tulajdonságában. Procedure TDrawingDesk.ReadCBoard(IsFromFile:Boolean);

Egyedtéglalapok és kapcsolatvonalak létrehozása, elhelyezése a rajzasztalon, a rajzasztal részét képező CBMemo objektum tárolt adatai alapján. A paraméterként kapott IsFromFile értéke dönti el, hogy egy fájlból történt beolvasás eredményén, vagy pedig a vágólap tartalma alapján kell elvégezni a reprodukciót, ugyanis a fejlécet csak fájl esetén kell aktualizálni. Megvizsgáljuk, hogy a Memo első sora megegyezik-e következő szöveggel: ’ SSADM Logical Data Model 1.0’. Amennyiben nem, akkor nem LDM típusú a tárolt adathalmaz. Egy ciklus alkalmazásával végig haladunk a Memo sorain, és eközben meghatározzuk a vezérlő karaktereket, melyek kapcsos zárójel között helyezkednek el. A karakterek különböző értéke vezérli a reprodukció folyamatát: [H] H-val jelöljük, hogy az ezután következő sorok a fejadat leírását tartalmazzák.

Természetesen ezt csak akkor aktualizáljuk, ha fájlbeolvasás történt. [S] S-el jelöljük, hogy az ezután következő sorok egy egyedtéglalap leírását tartalmazzák:

Ennek hatására létrehozzuk az új egyedtéglalapot és a további tárolt sorok alapján beállítjuk tulajdonságait. Az azonosítót az OldID tulajdonságába helyezzük.

[F] F-el jelöljük, hogy az ezután következő sorok az előbb létrehozott egyedtéglalap Font tulajdonságait tartalmazza. Mivel itt a sorok száma változó lehet a font stílusok miatt, ezért egy belső ciklust iktatunk be, amely a következő ’[’ karakterig ’él’. A cikluson belül beállítjuk a font Bold, Italic, Underline, StrikeOut tulajdonságait, amennyiben ezekre utaló sort találunk.

[T] T-vel jelöljük, hogy az ezután következő sorok az egyedtéglalap szöveg tulajdonságait tartalmazza. A font beállításához hasonlóan itt is egy belső ciklussal olvassuk ki az egyedtéglalap szöveg tulajdonsását.

[C] C-vel jelöljük, hogy az ezután következő sorok egy kapcsolatvonal leírását tartalmazzák. Először kiolvassuk az általa összekötött kezdő- és vég-egyedtéglalap azonosítóját, majd megkeressük ezeket az egyedtéglalapokat az OldID tulajdonságaiknak vizsgálatával (WhereIsOldID). Találat esetén ezek címeire állítjuk a kapcsolatvonal FromEntity és ToEntity tulajdonságát. Tovább haladva a Memo sorain aktualizáljuk a kapcsolatvonal többi tulajdonságát. Ismételten egy belső ciklust kell használnunk pontozott és a kizáró körív létezésének beállításához. És végül, a kapcsolatvonalat felépítő szakaszok koordinátáit kell aktualizálni egy 1-től 4-ig tartó ciklus alkalmazásával.

Procedure TDrawingDesk.SaveToFile(FileName:String);

A modell fájlba mentése.

Page 65: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

65

Először meghívjuk a CBMemoUpLoad metódust, amely feltölti a rajzasztal CBMemo-ját a modell objektumainak szövegtranszformáltjával. Meghívjuk a CBMemo.SaveToFile metódusát a paraméterként kapott fájlnévvel, amely egy text állományba helyezi CBMemo taralmát. Procedure TDrawingDesk.LoadFromFile(FileName:String);

Egy új modell betöltése. Kiürítjük a CMemo-t, majd meghívjuk a CBMemo.Lines.LoadFromFile metódust a paraméterként kapott fájlnévvel. A Memo feltöltése után a ReadCBoard metódussal reprodukáljuk az abban szövegesen tárolt objektumokat. Mivel ez magában foglalja az OldID már ismertetett használatát, ezeket egy ciklus segítségével kinullázzuk és töröljük valamennyi objektum jelöltségét.

Procedure TDrawingDesk.CBMemoUpLoad;

A rajzasztal valamennyi objektumának áttöltése a CBMemo-ba. Először az AddTitleCBoard metódus meghívásával átmásoljuk a modell fejléc-adatait a CBMemo-ba. Ezek után két ciklus segítségével végighaladva az egyedtéglalapokat és kapcsolatvonalakat tároló listán, azok tartalmát az AddEntityCBoard és AddContactCBorad meghívásával hozzátoldjuk a CBMemo szövegtárolójához. Eseménykezelő metódusok Function TDrawingDesk.NewContactLine(ShFrom,ShTo:TShapeEntity):

TContactLine;

Egy új kapcsolatvonalat hoz létre a paraméterben megadott két egyedtéglalap között, melynek mente: - Létrehozzuk a kapcsolatvonal egy új példányát - Beállítjuk az összekötött egyedtéglalapokat tároló tulajdonságait (FromEntity,

ToEntity) - Jelöltségét hamisra állítjuk (Marked) - Beállítjuk a nagyítás/kicsinyítés tulajdonságát (Percent), mely azonos a rajzasztal

aktuális Percent értékével. - A rajzasztal alapbeállításának megfelelően beállítjuk a kapcsolatvonal színét

(LineColor) és vastagságát (LineWidth) - Kiszámítjuk a kapcsolatvonalat felépítő szakaszok koordinátáit (CalcContactPoint). - Kiszámítjuk a kapcsolatvonalat felépítő szakaszok valódi, azaz rajzolási koordinátáit

(ActualContact.SetTruePoint). - Felvesszük a kapcsolatvonalat, a kapcsolatvonalat tároló listába A függvény visszatérő értéke maga a létrehozott egyedtéglalap, pontosabban annak címe. Function TDrawingDesk.NewEntityCreate(X1,Y1:Integer):TShapeEntity;

Egy új egyedtéglalapot létrehozó függvény Az egyedtéglalap létrehozásának menete a következő: - Meghatározunk egy új egyedtéglalap azonosítót (EntityNumber), melyet később

beállítunk az egyedtéglalap ID tulajdonságában. - Létrehozzuk az egyedtéglalapot, és beállítjuk az azonosítóját. - A paraméterként kapott X1,Y1 rajzolási koordinátákat a rácsponthoz igazítjuk a

SnapToGrid eljárás meghívásával

Page 66: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

66

- Beállítjuk a nagyítás/kicsinyítés tulajdonságát, mely a rajzasztal aktuális Percent értéke.

- Meghatározzuk az aktuális nagyítás/kicsinyítés százalékával arányos valódi pozíciókat (TrueLeft,TrueTop).

- Az egyedtéglalap további adatait a rajzasztal alapbeállítási értékei (Options) szolgáltatják: szélesség (TrueWidth) magasság (TrueHeight) háttérszín (Brush.Color) keretszín (Pen.Color) keretvastagság(Pen.Width) betűtípus (Font)

- Átirányítjuk az eseményeit a saját eljárásainkra: OnEndDrag (Vonszolás befejezése) OnMouseDown (Egérgomb lenyomása) OnStartDrag (Vonszolás elkezdése)

- Az egyedtéglalap szöveg tulajdonságának (Text) beállítása. Alapértelmezésben az ’Entity’ szó és az azonosító

- Végül felvesszük új egyedtéglalapunkat az őket tartalmazó listába (EntityList). A függvény visszatérő értéke maga a létrehozott egyedtéglalap, pontosabban annak címe. procedure TDrawingDesk.ShapeEntityMouseDown(Sender: TObject; Button:

TMouseButton; Shift: TShiftState; X, Y: Integer);

Az egyedtéglalapon történt egérgomb lenyomás, mint esemény lekezelése.

Új kapcsolat...

Egérgomlenyomás az

egyeden

Bal egérgomb

Rajzeszköz:dtContact

KlikkelésShift-tel

Jelöltség:Not Marked

Az egyed nemjelölt

Egyed-vonszolás

elõkészítése

Jelöltségvizsgálata

Minden jelölésmegszün-

tetése

Egyed jelöltreállítása

Egyed-tulajdonságbeállítása

49. Ábra

Page 67: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

67

Megvizsgáljuk, hogy bal vagy jobb egérgomb került lenyomásra. Amennyiben a jobboldali, és a rajzolóeszköz tulajdonság (DrawingTool) ’kapcsolatvonal’ (dtContact) módban van, akkor egy új kapcsolatvonal létrehozását kell elindítani. Tehát beállítjuk a kapcsolatvonalat jelölő vonal kezdő koordinátáit (NewLineEndPoint.X,

NewLineEndPoint.Y), valamint az előző vonal törléséhez szükséges segédváltozókat (NewLineEndPoint.oX, NewLineEndPoint.oY). Elindítjuk a vonszolást (BeginDrag), és átállítjuk az egérkurzort crContact formára.

Ha a rajzolóeszköz nem kapcsolatvonal (dtContact), akkor megvizsgáljuk a shift billentyű állapotát. Amennyiben nyomva volt a kattintás időpontjában, akkor ellenkezőjére változtatjuk az egyedtéglalap jelöltségét, egyébként pedig az összes objektum jelöltségének törlése után, jelöltre állítjuk az egyedtéglalapot. Ezt követően előkészítjük, majd elindítjuk az egyedtéglalap vonszolását. Amennyiben az egér mutatója az egyedtéglalap nem valamelyik méretező pontján áll, akkor az egérkurzort EntiyDrag formára váltjuk. Továbbá a rajzoló eszközt ’csoportvonszolás’ (dmEntGroup) állapotúra állítjuk. Természetesen a vonszolás, csak akkor fog érvényesülni, ha az egérgomb a mozgatás alatt is nyomva marad. A jobb egérgomb lenyomása esetén meghívjuk az egyedtéglalap tulajdonságait beállító metódust. procedure TDrawingDesk.ShapeEntityStartDrag(Sender: TObject; Var DragObject:

TDragObject);

Az egyedtéglalap vonszolása előtt elvégzendő beállítások. Le kell tiltani az összes objektumot, mivel ezek fölött a vonszolás érvénytelen lenne. Továbbá igazra állítjuk az eseményt kiváltó egyedtéglalap vonszolt (Dragged) változóját. procedure TDrawingDesk.ShapeEntityEndDrag(Sender, Target: TObject; X, Y:

Integer);

Az egyedtéglalap vonszolása után elvégzendő beállítások. Engedélyezni kell a vonszolás előtt letiltott objektumokat, majd hamisra állítjuk az eseményt kiváltó egyedtéglalap Dragged változóját. Ha rajzolóeszköz ’kapcsolatvonal’ (dtContact) volt, akkor ezt alaphelyzetbe hozzuk.

(NewLineEndPoint.X,

NewLineEndPoint.Y)

Kezdõpont

(x,y)

mozgás

(NewLineEndPoint.oX,

NewLineEndPoint.oY)

50. Ábra

Page 68: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

68

A vonszolás (DragCursor) egérkurzor formáját visszaállítjuk az alapértelmezettre. Végül frissítjük a rajzasztalt. procedure TDrawingDesk.MouseDown(Button: TMouseButton; Shift: TShiftState; X,

Y: Integer);

Az egérgomb lenyomása, mint esemény kezelése. Az egérgomb lenyomásának hatását a rajzasztal rajzeszköz (DrawingTool) tulajdonságának értéke határozza meg. dtEntity: Új egyed létrehozása (NewEntityCreate) dtArrow: További vizsgálat (DeskDowndtArrow) dmMove: A vonszolás adatait tartalmazó rekord (DeskMoveRec) inicializálása. Az

egér kurzor koordinátáinak tárolása és a vonszolás engedélyezése.

Procedure TDrawingDesk.DeskDowndtArrow(Button: TMouseButton; Shift:

TShiftState; X, Y: Integer);

Az egérgomb lenyomás eseményének metódusa, ha a rajzeszköz 'szerkesztés' (dtArrow) állapotban van.

Ha kattintás pillanatában a kurzor egy kapcsolatvonalon állt, akkor megvizsgáljuk, hogy a bal, vagy a jobb egérgomb került-e lenyomásra. Amennyiben a jobboldali, akkor a kapcsolatvonal jellemzőinek beállítását kell elindítani. A bal gomb lenyomásakor megvizsgáljuk, a Shift gomb állapotát. A mennyiben nyomva volt a kattintás időpontjában, akkor ellenkezőjére változtatjuk a kapcsolatvonal jelöltségét, egyébként pedig az összes objektum jelöltségének törlése után, jelöltre állítjuk a

Egérgomb

lenyomás a

rajzasztalon

Jobb

egérgomb

Klikkelés

Shift-tel

Jelöltség:

Not Marked

A kapcsolat

nem jelölt

Jelöltség

vizsgálata

Minden jelölés

megszün-

tetése

Kapcsolat

jelöltre állítása

Kapcsolat-

tulajdonság

beállítása

Kattintás

kapcsolaton

Kattintás a

rajzasztalon

Rajzeszköz:

dmContact

(vonszolás)

Minden jelölés

megszün-

tetése

Csoportos

kijelölés

elõkészítésa

51. Ábra

Page 69: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

69

kapcsolatvonalat. Ezt követően előkészítjük a kapcsolatvonal vonszolását, a rajzeszközt dmContact állapotúra állítjuk. A változások érvényesítése érdekében újrarajzoljuk a rajzasztalt. Ha a kattintás pillanatában a kurzor a rajzasztalon állt, akkor az összes objektum jelöltségének törlése után, beállítjuk a csoport választó piros keret alapadatait és a rajzeszközt ’csoportos jelölés’ állapotra állítjuk (dmEntGroup). procedure TDrawingDesk.MouseUp(Button: TMouseButton; Shift: TShiftState; X,Y:

Integer);

Az egérgomb felengedés eseményének metódusa. Az egérgomb felengedésének hatását a rajzasztal rajzeszköz (DrawingTool) tulajdonságának értéke határozza meg. dmEntGroup: A csoportos kijelölés műveletének befejezése.

Töröljük a csoport választó piros keretet és rendezzük a bal-felső és jobb-alsó koordinátákat. Ezek után jelöltre állítjuk a kereten belül elhelyezkedő objektumokat és a rajzeszközt alaphelyzetbe hozzuk (dtArrow).

dmContact: További beállítások végzünk a ContactEndDrag metódus meghívásával, majd alaphelyzetbe hozzuk a kurzort.

dmMove: A vonszolás letiltása. procedure TDrawingDesk.MouseMove(Shift: TShiftState; X,Y: Integer);

Az egér mozgatás eseményének metódusa. Az egér mozgatásának hatását a rajzasztal rajzeszköz (DrawingTool) tulajdonságának értéke határozza meg. dtArrow: Ha a jobb egérgomb le van nyomva és az egérkurzor legalább 5 pixelnyi

elmozdulást produkált, akkor rajzeszközt csoportos kijelölés állapotúra állítjuk.

dmEntGroup: A GroupMove metódus meghívása, amely a csoportos kijelölés keretének mozgatását végzi.

dmContact: Ha az egér gombja lenyomott állapotban van, akkor egy újabba feltétellel megvizsgáljuk, hogy a kapcsolatvonal-vonszolás jelző be van-e állítva. Amennyiben igen, akkor a ContactDragMove eljárást, ellenkező esetben a ContactBeginDrag eljárást hívjuk meg. A ContactDragMove eljárás a kapcsolatvonal további vonszolását teszi lehetővé, míg a ContactBeginDrag egy új kapcsolatvonal-vonszolás alapadatait állítja be.

dmMove: Az asztal csúsztatása, amennyiben az asztal felületének csúsztatása engedélyezett és a bal egérgomb is le van nyomva.

procedure TDrawingDesk.DragDrop(Source: TObject; X, Y: Integer)

A vonszolt objektum elengedés eseményének a kezelése. A vonszolt objektum elengedésének hatását a rajzasztal rajzeszköz (DrawingTool) tulajdonságának értéke határozza meg. dtContact: A NewContactDrop metódus meghívása, amely lezárja az új

kapcsolatvonal szerkesztési folyamatát és létrehozza az új kapcsolatvonalat.

dmEntGroupt: A SelectedGroupDragDrop metódus meghívása, amely véglegesíti a vonszolt, illetve átméretezett egyedtéglalapokat.

Page 70: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

70

Procedure TDrawingDesk.ContactBeginDrag(x,y:Integer);

Egy kapcsolatvonal vonszolásának elindítása. A vonszolt kapcsolatvonal adatait a rajzasztal DragContact rekordtípusú tulajdonsága tárolja, mely kezdő értékét a CursorOnAnyLine metódus meghívásakor kapja. A CursorOnAnyLine a következő adatokat állítja be: Moving: A mozgatás engedélyezése és tiltása. ActualContact: A kapcsolatvonal, amelyen ez egérgomb lenyomásra került. ActualPoint: A kapcsolatvonalat felépítő vonalrendszer azon töréspontjának a

sorszáma, amelyen az egérgomb lenyomásra került. ActualLine: A kapcsolatvonalat felépítő vonalrendszer azon szakaszának a sorszáma,

amelyen az egérgomb lenyomásra került. A vonszolás elkezdése előtt, töröljük a kapcsolatvonal rajzát az asztalról, majd ismét kirajzoljuk, de már a vonszolást jelölő piros vonallal. A ContactBeginDrag a következő adatokat állítja be: CursorStartX: A paraméterként kapott kurzorpozíció x koordinátája. CursorStartY: A paraméterként kapott kurzorpozíció y koordinátája. StartX1, StartY1: A kapcsolatot felépítő vonalrendszer vonszolt szakaszának kezdő

koordinátája StartX2, StartY2: A kapcsolatot felépítő vonalrendszer vonszolt szakaszának vég

koordinátája LineBreak: A töréspontok száma OPoints: A kapcsolatvonal előző koordinátái. Moving: A mozgatás engedélyezése

Procedure TDrawingDesk.ContactDragMove(x,y:Integer);

A vonszolt kapcsolatvonal mozgatása a rajzasztalon. A mozgatott kapcsolatvonal előző helyének törlése után, attól függően, hogy a vonszolt egység egy vonal, vagy töréspont hívjuk meg a LineDragMove, illetve a PointDragMove eljárást. Mindkét eljárás a vonszolt kapcsolatvonal új koordináta-adatait állítja be az egérkurzor helyzetének megfelelően.

(CursorStartX,CursorStartY)

(StartX1,StartY1)

(StartX2,StartY2)

(x,y)

52. Ábra

Page 71: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

71

Ezek után kirajzoljuk a vonszolt kapcsolatvonalat és elmentjük az aktuális koordináta adatokat. Procedure TDrawingDesk.LineDragMove(x,y:Integer);

A vonszolt kapcsolatvonalat alkotó vonal mozgatása. Attól függően, hogy a kapcsolatvonal mely szakaszát vonszoljuk, különböző tevékenységeket kell elvégeznünk.

1. szakasz vonszolása A szakasz kezdőkoordinátájának beállítása csak abban az esetben végezzük el, ha az elmozdítás következtében az nem hagyja el a kezdő-egyedtéglalap területét. A következő lépésben aktualizáljuk a szakasz vég-koordinátáit, mivel ez ’szabadon’ van.

1. szakasz

3. szakasz

2. szakasz

Points[1]

Points[2]

Points[3]

Points[4]

53. Ábra

mozgás

(CursorStartX,CursorStartY)

(StartX1,StartY1)

(StartX2,StartY2)

(x,y)

54. Ábra

Page 72: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

72

Az új koordináta beállítása a következő képlettel történik:

Points[..] a töréspontokat tartalmazó tömb j a töréspont sorszáma StartX1,StartY1: a vonszolt szakasz kezdő-koordinátája StartX2,StartY2: a vonszolt szakasz vég-koordinátája CursorStartX: a szakasz ’megfogásának’ x koordinátája CursorStartY: a szakasz ’megfogásának’ y koordinátája X,Y: az egérkurzor aktuális koordinátája

A CursorStartX és CursorStartY értékét minden egyes mozdulás lekezelése után az éppen aktuálisra kell állítani.

Ha a kapcsolatvonal egyetlen törésponttal rendelkezik, a második és harmadik töréspontnak azonosnak kell lenni.

3. szakasz vonszolása A szakasz végkoordinátájának beállítását csak abban az esetben végezzük el, ha az elmozdítás következtében, az nem hagyja el a vég-egyedtéglalap területét. A következő lépésben aktualizáljuk a szakasz kezdő koordinátáit, mivel ez ’szabadon’ van. Az változók aktualizálása az 1. szakasz vonszolásával azonos módon történik, természetesen a megfelelő pont-indexek használatával.

2. szakasz vonszolása Abban az esetben, ha 3 töréspont található a kapcsolatvonalban és a középső szakasz kerül vonszolásra, akkor azt az eredeti szakasszal párhuzamosan kell elmozdítani.

Points[j].X:=StartX1+(X-CursorStartX);

Points[j].Y:=StartY1+(Y-CursorStartY);

Points[j+1].X:=StartX2+(X-CursorStartX);

Points[j+1].Y:=StartY2+(Y-CursorStartY);

Points[j+2].X:=Points[j+1].X;

Points[j+2].Y:=Points[j+1].Y;

Points[j+1].X:=StartX2+(X-CursorStartX);

Points[j+1].Y:=StartY2+(Y-CursorStartY);

Points[j].X:=StartX1+(X-CursorStartX);

Points[j].Y:=StartY1+(Y-CursorStartY);

CursorStartX:=X;CursorStartY:=Y

;

mozgás

(CursorStartX,CursorStartY)

(StartX1,StartY1)

(StartX2,StartY2)

(x,y)

55. Ábra

Page 73: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

73

Procedure TDrawingDesk.PointDragMove(x,y:Integer);

A vonszolt kapcsolatvonal töréspontjának mozgatása. A töréspontok mozgatásakor egyszerűen csak az egérkurzor pozíciójába kell áthelyezni a vonszolandó pont koordinátáját.

Ha a kapcsolatvonal egyetlen törésponttal rendelkezik, a második és harmadik töréspontnak azonosnak kell lenni.

Procedure TDrawingDesk. NewContactDrop (Source: TObject; X, Y: Integer);

Az új kapcsolatvonal jelölő folyamat befejezése és a kapcsolatvonal létrehozása. Először töröljük a kapcsolatvonal kijelölésére használt piros segéd egyenest. A kapcsolatvonal kezdő-egyedtéglalapja a paraméterben kapott Source lesz, a második egyedtéglalap pedig az, amelynek a területén az egérgomb felengedésre került. Természetesen figyelni kell, hogy a kezdő-egyedtéglalap nem lehet azonos a vég-egyedtéglalappal. Ennek vizsgálatához egy ciklus segítségével végig haladunk az egyedtéglalapokat tároló listán és amelyiknek a koordináta-párja közre fogja az egér koordinátáját, az lesz a vég-egyedtéglalap. Ezek után meghívjuk a NewContactLine metódust a két egyedtéglalap paraméter átadásával, amely létrehozza az új kapcsolatvonalat. Procedure TDrawingDesk.ContactEndDrag;

A kapcsolatvonal vonszolásának befejezése. Töröljük a vonszolás jelölésére használt piros vonalat, majd újra kalkuláljuk a vonszolás eredményeként kapott kapcsolatvonal koordinátáit. Kirajzoljuk a végleges kapcsolatvonalat és a DragContact rekord adatainak beállításával jelöljük a vonszolás befejezését. procedure TDrawingDesk.SelectedGroupDragDrop(Source: TObject; X, Y: Integer);

A vonszolt illetve átméretezett egyedtéglalapok elengedése, véglegesítése. Egy ciklus segítségével végighaladunk az egyedtéglalapokat tároló listán és beállítjuk az új pozíciójukat, illetve méretüket az EntityMovePos értékeinek megfelelően. Minden egyedtéglalap rendelkezik az EntityMovePos tulajdonsággal, amely a következő adatokat tárolja: X1,Y1: Az egyedtéglalap piros körvonalának bal-felső koordinátája X2,Y2: Az egyedtéglalap piros körvonalának jobb-alsó koordinátája oX1,oY1: Az egyedtéglalap piros körvonalának előző bal-felső koordinátája oX2,oY2: Az egyedtéglalap piros körvonalának előző jobb-alsó koordinátája MouseX, MouseY: Az egyedtéglalapon annak a pontnak a koordinátája, ahol az egérgomb

lenyomásra került

Points[2].X:=StartX1+(X-CursorStartX);

Points[2].Y:=StartY1+(Y-CursorStartY);

Points[3].X:=StartX2+(X-CursorStartX);

Points[3].Y:=StartY2+(Y-CursorStartY);

Points[j].X:=X ;

Points[j].Y:=Y ;

Points[3].X:=Points[2].X;

Points[3].Y:=Points[2].Y;

Page 74: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

74

DragX, DragY: A rajzasztalon annak pontnak a koordinátája, ahol az egérgomb lenyomásra került.

Az egyedtéglalapok valódi koordinátáját állítjuk be, melynek kiszámítása a következő képlettel történik.

Természetesen az elmozdított, átméretezett egyedtéglalapokhoz tartozó kapcsolatvonalak koordinátáit aktualizálni kell. Egy ciklus segítségével végig haladva a kapcsolatvonalakat tároló listán, megvizsgáljuk, hogy az egyes kapcsolatvonalak kezdő- illetve vég-egyedtéglalapja jelöltre van-e állítva. Ha a kezdő egyedtéglalap jelölt, akkor kapcsolatvonal kezdő pontját, ha a vég-egyedtéglalap jelölt, akkor kapcsolatvonal vég-pontját módosítjuk az elmozdulás nagyságával. Az elmozdulás aktualizálása a következő képlettel történik:

Ahol az (x,y) az egér pozíciója a gomb felengedésének pillanatában. Mindkét esetben megvizsgáljuk hogy az átméretezés következtében nem csúsznak-e ki a kapcsolatvonal végpontjai az egyedtéglalap felületéről a PointOnEntity függvénnyel. Amennyiben kicsúszott, az egyedtéglalap középpontjába helyezzük a kapcsolatvonal kezdő-, illetve végpontját a CalcContactPoint metódussal, ellenkező esetben meghívjuk a ReCalcContactPoint metódust a kapcsolatvonal vonalainak pontos beállítása végett. procedure TDrawingDesk.DragOver(Source: TObject; X, Y: Integer; State: TDragState;

var Accept: Boolean);

A rajzasztalon történő vonszolás, mint eseménynek kezelése. Az rajzasztalon történő vonszolás hatását a rajzasztal rajzeszköz (DrawingTool) tulajdonságának értéke határozza meg.

R:=Percent/100;

TrueTop:=Trunc(EntityMovePos.Y1*(1/R)+0.5);

TrueLeft:=Trunc(EntityMovePos.X1*(1/R)+0.5);

TrueWidth:=Trunc((EntityMovePos.X2-EntityMovePos.X1)*(1/R)+0.5);

TrueHeight:=Trunc((EntityMovePos.Y2-EntityMovePos.Y1)*(1/R)+0.5);

Points[1].x:=Points[1].x +(x-DragX);

Points[1].y:=Points[1].y +(y-DragY);

Points[4].x:=Points[4].x +(x-DragX);

Points[4].y:=Points[4].y +(y-DragY);

Page 75: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

75

dtContact: Két egyedtéglalap összekötése egy új kapcsolatvonallal. Egy piros szakaszt

húzunk a kapcsolatvonal kezdő koordinátájától (NewLineEndPoint.X,

NewLineEndPoint.Y) az egérkurzor aktuális koordinátájáig (X,Y). Az egérkurzor minden egyes elmozdulása után tároljuk annak koordinátáját (NewLineEndPoint.oX, NewLineEndPoint.oY). Ezen adat alapján végezzük az egér újabb mozgását megelőző vonaltörlést.

dmContact: További beállításokat végzünk a ShapesDragOver metódus meghívásával. Procedure TDrawingDesk.ShapesDragOver(Source: TObject; X, Y: Integer; State:

TDragState; var Accept: Boolean);

Az egyedtéglalap vonszolásának és átméretezésének, mint eseménynek a lekezelése. Az egyedtéglalapok vonszolási, átméretezési mehanizmusa során nem teszünk különbséget, abból a szempontból, hogy egyetlen, vagy több egyedtéglalapot mozgatunk. Továbbá az egyedtéglalapok mozgatásán túl az átméretezést is a Drag&Drop technika felhasználásával oldjuk meg. A mozgatás lekezelése előtt meg kell határoznunk az elmozdulás mértékét, az alap koordinátához képest. Ezt a koordinátát az egérkurzor lenyomásának pillanatában táruljuk el és az egyedtéglalapon belüli koordinátát jelenti (MouseX, MouseY).

Ezek után egy ciklus segítségével végig haladva az egyedtéglalapokat tároló listán, a jelölteken elvégezzük ez egérmozgás hatását lekezelő beállításokat. Először megvizsgáljuk, hogy átméretezést kell-e végezni, melyről az egyes egyedtéglalapok SizingPoint tulajdonsága ad információt.

MoveX:=X-(Left + EntityMovePos.MouseX);

MoveY:=Y-(Top + EntityMovePos.MouseY);

(NewLineEndPoint.X,

NewLineEndPoint.Y)

(x,y)

mozgás

(NewLineEndPoint.oX,

NewLineEndPoint.oY)

56. Ábra

Page 76: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

76

A SizingPoint 0-8 értékeket vehet fel, ahol 0 érték jelenti, hogy az egyedtéglalap mozgatásáról van szó. A többi 1-8 értékek az egyedtéglalapon lévő méretező pontok sorszámára utal. Tehát rajzasztalon történő átméretezés hatását az egyedtéglalap SizingPoint tulajdonságának értéke határozza meg.

Az (XX1,XX2) a vonszolást jelölő piros keret bal-felső, az (YY1,YY2) pedig a jobb-alsó koordinátája. Az 1-es méretező pont mozgatásának hatására az XX1 és YY1 értékét kell növelni, illetve csökkenteni az elmozdulás mértékével: MoveX, MoveY. Az XX2, YY2 koordináták ebben az esetben nem változnak.

Ehhez hasonlóan változtatjuk a megfelelő koordinátákat a többi méretező pont mozgatásának esetében is. A SizingPoint 0 értéke esetén az egyedtéglalap mozgatását kell elvégezni, amely azt jelenti, hogy mindkét koordinátapárt növelni, illetve csökkenteni fogjuk.

Az így meghatározott (XX1,XX2 ; YY1,YY2) koordinátákkal meghívjuk a SnapToGrid metódust, amely beállítástól függően a rajzasztal rácspontjához igazítja a koordinátákat. Előfordulhat olyan mozgatás is, hogy a jobb-alsó koordináta közelebb kerül az origóhoz. Ennek rendezéséhez meghívjuk a RectOrder metódust. Végül töröljük az előző és kirajzoljuk az új koordinátáknak megfelelő jelölő keretet.

Az előző keret valamint az új keret koordinátáinak tárolására az EntityMovePos mezőit használjuk, ahol oX1,oY1,oX2,oY2 a előző (old) keret koordinátái X1,Y1,X2,Y2 az új keret koordinátái.

XX1:=(Left+MoveX);

YY1:=(Top+MoveY) ;

XX2:=Left+ Width;

YY2:=Height+Top

XX1:=(Left+MoveX) ;

YY1:=(Top+MoveY) ;

XX2:=XX1 + Width ;

YY2:=YY1 + Height;

oX1:=X1; oY1:=Y1; oX2:=X2; oY2:=Y2;

MarkRectDraw(oX1,oY1,oX2,oY2);

MarkRectDraw(XX1,YY1,XX2,YY2);

X1:=XX1; Y1:=YY1; X2:=XX2; Y2:=YY2;

(XX1,YY1)

(XX2,YY2)

58. Ábra

1 2 3

4

567

8

57. Ábra

Page 77: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

77

Procedure TDrawingDesk.GroupMove(x,y:Integer);

A csoportos kijelölés keretének mozgatása A csoportos kijelöléshez használt tulajdonság a rekord típusú GroupMark, amely a következő mezőket tartalmazza: X1,Y1 a keret fix koordinátái, mely az egérgomb rajzasztalon történő lenyomásakor

kap értéket X2,Y2 a keret mozgó koordinátája, mely az egér mozgását követi oX2,oY2 az egérkurzor előző koordinátája Első lépésben tehát frissítjük a GroupMark mozgó koordinátáját a paraméterként kapott egérkurzor koordinátáival. Ezután töröljük a régi keretet és kirajzoljuk az újat a MarkRectDraw metódus meghívásával. Végül elmentjük az aktuális ’új’ koordinátákat.

Nyomtatást végző metódusok Procedure TDrawingDesk.Preview;

A rajzasztal nyomtatási képének megjelenítése, és a nyomtatási paraméterek beállítása.

Meghívjuk a PreviewShow metódust, amely előkészíti a FormPreview dialógus ablakot, majd átadjuk neki a vezérlést. Amennyiben az ablakot ’OK’-val hagytuk el, akkor beállítjuk a PrintingParam rekord mezőit és meghívjuk a Printing metódust, vagyis elindítjuk a nyomtatást.

X2:=X;Y2:=Y;

MarkRectDraw(X1,Y1,oX2,oY2);

MarkRectDraw(X1,Y1,X2,Y2);

oX2:=X; oY2:=Y;

Másolatok

száma

Fejléc

nyomtatás

Keret

nyomtatás

Színes

nyomtatás

Monokróm

nyomtatás

Margó

távolsága a

laspszéleitõl

A nyomtatandó

lapok

59. Ábra

Page 78: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

78

procedure TDrawingDesk.PreviewPrepare;

A preview dialógus ablak előkészítése. Amennyiben a SetMinMax függvény igaz értékkel tér vissza, akkor van legalább egy egyedtéglalap a rajzasztalon. Ennek a függvénynek nem csak ez a feladata, hanem beállítja PageX1, PageY1 és PageX2, PageY2 változókat. Ezek a változók mutatnak, -mintegy mátrix index- a rajzasztalt alkotó lapok két szélső elemére. Tehát a PageX1,PageY1 azt a bal-felső lapot jelöli, amelyen már van egyedtéglalap, a PageX2,PageY2 jelöli azt a jobb-alsó lapot, amin még van egyedtéglalap.

Létrehozunk egy listát, amelyek elemei egy-egy TImage típusú képre mutat. Ezekben a képekben fogjuk ábrázolni a rajzasztalt felépítő és a (PageX1, PageY1 ; PageX2, PageY2) keret által közrefogott lapok egy-egy egyedtéglalapját. A megjelenítendő képek mérete arányos az ábrázolandó lapok számával, mivel a megjelenítésre szánt terület fix. Meghatározzuk az ábrázolandó terület hosszabbik oldalát, melyet a DrawLonger változóban tárolunk el.

Két egymásba ágyazott ciklus (sor,oszlop) segítségével létrehozzuk a szükséges mennyiségű képet, melyek tulajdonosa a dialógus ablak lesz.

For Row:=PageY1 To PageY2 Do

For Col:=PageX1 To PageX2 do

Begin

PageImage:=TImage.Create(Self);

Try

PageImage.Parent:=FormPreview;

DrawHeight:=(PageY2-PageY1+1)*2+((PageY2-PageY1+1)*PaperHeight);

Drawidth:=(PageX2-PageX1+1)*2+((PageX2-PageX1+1)*PaperWidth);

DrawLonger:=Drawidth;

If DrawHeight>Drawidth Then DrawLonger:=DrawHeight;

R:=200/DrawLonger;

3 4 5 6 72

4

5

6

7PaperWidth

PaperH

eight

(PageX1,PageY1)

(6,5)

(PageX1,PageY1)

(6,5)

60. Ábra

Page 79: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

79

Az egyes oldalak kicsinyített képét egy 200x200-as méretű panelen helyezzük el, ezért ehhez kell arányosítani a lapokat megjelenítendő kép magasságát és szélességét (R:=200/DrawLonger).

Ezek után rárajzoljuk az éppen megalkotott kép felületére, az eredeti oldalon szereplő egyedtéglalapokat, természetesen ez is a kicsinyítés arányában.

Végül az így elkészült képet hozzáadjuk tárolásukra létrehozott listához.

PageImage.Width:= Trunc(PaperWidth * R);

PageImage.Height:=Trunc(PaperHeight * R);

PageImage.Left:=FormPreview.DrawFrame.Left+ 2 +

(Col-PageX1)*2+((Col-PageX1)* PageImage. Width);

PageImage.Top:=FormPreview.DrawFrame.Top+ 2 +

(Row-PageY1)*2+((Row-PageY1)*PageImage.Height);

For I:=0 To EntityList.Count-1 Do

Begin

ActualShape:=EntityList[I];

With ActualShape Do

PageImage.Canvas.Rectangle(

Trunc((TrueLeft-(Col*PaperWidth)) *R),

Trunc((TrueTop- (Row*PaperHeight))*R),

Trunc(((TrueLeft+TrueWidth)-(Col*PaperWidth)) *R),

Trunc(((TrueTop+TrueHeight)-(Row*PaperHeight))*R));

End;

Page 80: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

80

procedure TDrawingDesk.Printing;

A rajzasztal tartalmának laponként történő nyomtatása. A nyomtatás során, lényegében újrarajzoljuk a rajzasztalon elhelyezett objektumokat a nyomtató rajzfelületén (Printer.Canvas). Hasonlóan a PreviewPrepare metódushoz, itt is a SetMinMax függvény értékétől tesszük függővé, hogy egyáltalán nyomtatunk-e. Két egymásba ágyazott ciklus (sor,oszlop) segítségével végig haladunk a (PageX1,PageY1 ; PageX2, PageY2) indexpárral meghatározott lapokon és kiküldjük őket a nyomtatóra.

Procedure TDrawingDesk.PrintShapes(Col,Row:Integer);

A paraméterben meghatározott lapon elhelyezett egyedtéglalapok nyomtatása. Valójában a rajzasztal minden objektumát ráhelyezzük a nyomtató rajzfelületére (Canvas), de mivel a Canvas méreteit a nyomtató felbontása határozza meg, ezért a nyomtatón csak Canvas-on szereplő rajz jelenik meg. Azok az objektumok melyek a canvas koordinátahatárain túllógnak, természetesen nem. Az egyedtéglalapok pozícióját és kiterjedését meghatározó értékek a rajzasztal bal-felső sarkában lévő (0,0) pozícióhoz van viszonyítva. Az egyes lapok nyomtatásakor az objektumok koordinátáit úgy kell meghatározni, mintha az origót a nyomtatás alatt lévő lap bal-felső sarkába helyeznénk. Egy ciklus segítségével végighaladunk az egyedtéglalapokat tartalmazó listán, és minden egyedtéglalap koordinátáján elvégezzük ezt a transzformációt. Az így kapott értékek képezik a Canvas-ra rajzolandó téglalapok koordinátáit. A Col,Row paraméterek tartalmazzák a nyomtatott lap indexét, az (x1,y1; x2,y2) koordinátapár pedig az egyedtéglalap keretét.

x1:=(TrueLeft-(Col*PaperWidth)) ;

y1:=(TrueTop- (Row*PaperHeight)) ;

x2:=((TrueLeft+TrueWidth)-(Col*PaperWidth)) ;

y2:=((TrueTop+TrueHeight)-(Row*PaperHeight));

A rajzasztal

nyomtatása

Példány

Lapok oszlopa

Lapok sora

Keret

nyomtatás

Egyedek

nyomtatása

Kapcsolatok

nyomtatása

Csirkeláb

nyomtatása

Kapcsolatok

Kizáró körívek

nyomtatása

Kapcsolat

nyomtatása

Egyedek

Egyed

nyomtatása

61. Ábra

Page 81: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

81

Be kell még állítani a keret vastagságát, színét, a háttérszínét. Ezek után történik a rajzolás RoundRect(x1,y1,x2,y2,50,50) metódussal. További számítások elvégzését igényli a szöveg tartalom kinyomtatása, mely a következő módon történik:

CY tartalmazza a szöveg nyomtatásának kezdő függőleges koordinátáját figyelembe véve a szöveg fonttípusát jellemző pixelmagasságot valamint a középre helyezés igényét. Ezt elég egyszer meghatározni, mivel ez állandó vonatkozási pont lesz. CX tartalmazza a szöveg nyomtatásának vízszintes koordinátáját, itt is figyelembe véve a szöveg fonttípusát jellemző pixelmagasságot valamint a középre helyezés igényét. Ezt az érétket minden sorban meg kell határozni, hiszen a sorok szélessége eltérő lehet. Procedure TDrawingDesk.PChickenFoot(ActualContact:TContactLine);

A csirkeláb kirajzolása a paraméterben megadott kapcsolatvonalhoz. A kapcsolatvonalat felépítő szakaszokból az utolsót meghatározó koordinátákat rövidebb változókba tesszük át. (x3,y3; x4,y4). Akár el is lehetne hagyni, azonban rövidebb változókkal áttekinthetőbb a metódus további része. Meghatározzuk a csirkeláb magasságát (CFHeight) és szélességét (CFWidth) a nagyítás / kicsinyítés mértékével arányosan. Ha a szakasz vízszintesen helyezkedik el (y3=y4), akkor el kell dönteni, hogy a csirkeláb csúcsa merre mutasson jobbra vagy balra. Amennyiben a szakasz első vízszintes koordinátája jobbra helyezkedik el a másodikhoz képest (y3<y4), akkor a csirkeláb balra mutat (63. Ábra), ellenkező esetben jobbra (64. Ábra).

CY:=(TextExtent(Text.Strings[0]).cy *Text.Count) div 2;

For J:=0 To Text.Count-1 do

Begin

CX:=TextExtent(Text.Strings[J]).cx div 2;

TextOut(X1+((X2-X1) div 2) - CX,

Y1+((Y2-Y1) div 2) - CY + (TextExtent(Text.Strings[J]).cy * J),

Text.Strings[J]);

End;

A szöveg

második sora

harmadik sora

CY

CX

CX

A szöveg

második sora

harmadik sora

CY

CX

CX

62. Ábra

(x4,y4)

(x3,y3)

y3=y4

y3<y4

63. Ábra

(x4,y4)

(x3,y3)

y3=y4

x3>y4

64. Ábra

Page 82: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

82

Ha a szakasz függőlegesen helyezkedik el (x3=x4), akkor el kell dönteni, hogy a csirkeláb csúcsa merre mutasson fel vagy le. Amennyiben a szakasz első függőleges koordinátája a második felett helyezkedik el (y3<y4), akkor a csirkeláb felfelé mutat (65. Ábra), ellenkező esetben lefelé (66. Ábra).

Procedure TDrawingDesk.PDrawLockOutBegin(DrawPoints:TPoints);

Kizáró ív rajzolása a paraméterben megadott kapcsolatvonal első szakaszára. A kapcsolatvonalat felépítő szakaszokból az utolsót meghatározó koordinátákat rövidebb változókba tesszük át. (xF,yF; xT,yT). Meghatározzuk a körív magasságát (CFHeight) és szélességét (CFWidth) a nagyítás / kicsinyítés mértékével arányosan. Ha a szakasz vízszintesen helyezkedik el (yF=yT), akkor el kell dönteni, hogy a körív domború oldala merre mutasson jobbra, vagy balra. Amennyiben a szakasz első vízszintes

koordinátája jobbra helyezkedik el a másodikhoz képest (xF>XT), akkor a körív balra mutat (68. Ábra), ellenkező esetben jobbra. Az előbbiekhez hasonlóan kell eldönteni a függőlegesen elhelyezkedő szakaszra rajzolt körív orientációját (xF=yF). Amennyiben a szakasz első függőleges koordinátája a második fölött helyezkedik el (yF<yT), akkor a körív lefelé mutat, ellenkező esetben felfelé.

(x4,y4)

(x3,y3)

x3=x4

y3<y4

66. Ábra

(x4,y4)

(x3,y3)

x3=x4

y3>y4

65. Ábra

CFHeight

CFWidth

67. Ábra

(xF,yF)

(xT,yT)

yF=yT

xF>xT

68. Ábra

Page 83: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

83

Procedure TDrawingDesk.PDrawLockOutEnd(DrawPoints:TPoints);

Kizáró ív rajzolása a paraméterben megadott kapcsolatvonal utolsó szakaszára. A kapcsolatvonalat felépítő szakaszokból az elsőt meghatározó koordinátákat rövidebb változókba tesszük át. (xF,yF; xT,yT). Akár el is lehetne hagyni, azonban rövidebb változókkal áttekinthetőbb a metódus további része. Meghatározzuk a körív magasságát (CFHeight) és szélességét (CFWidth) a nagyítás / kicsinyítés mértékével arányosan. Ha a szakasz vízszintesen helyezkedik el (yF=yT), akkor el kell dönteni, hogy a körív domború oldala merre mutasson jobbra vagy balra. Amennyiben a szakasz első vízszintes koordinátája balra helyezkedik el a másodikhoz képest (xF<xT), akkor a körív balra mutat (69. Ábra), ellenkező esetben jobbra. Az

előbbiekhez hasonlóan kell eldönteni a függőlegesen elhelyezkedő szakaszra rajzolt körív orientációját. Amennyiben a szakasz első függőleges koordinátája (yF) a második (yT) fölött helyezkedik el (yF<yT), akkor a körív felfelé mutat, ellenkező esetben lefelé. Procedure TDrawingDesk.PrintHead;

A modell fejadatának nyomtatása.

(xF,yF)

(xT,yT)

yF=yT

xF<xT

69. Ábra

Page 84: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

84

2.5.2 A TShapeEntity osztály

Metódusok A TShapeEnity tervezési időben is beállítható, published jellemzői: A TShapeEntiy pozícióját a TrueLeft és a TrueTop, méretét a TruWidth és TrueHeight tulajdonságok valamint a PozPercent és SizePercent tulajdonságok értékei határozzák meg. A két Percent jellegű tulajdonság beállításával a SHapeEntity nagyítását illetve kicsinyítését valósíthatjuk meg.

A nagyítás/kicsinyítés bázisa tehát ’True’ kezdetű tulajdonságok, melyek meghatározzák az ős-osztályból örökölt rajzolási pozíciót és méretet (Left,Top,Height,Width). A tökéletes működés

érdekében nem szabadna állítani az eredeti Left,Top,Height és Width tulajdonságokat, azonban ennek letiltása nem lehetséges. A Brush tulajdonsággal a SHapeEntity háttér jellemzőit a Pen tulajdonsággal pedig a keret jellemzőit állíthatjuk be. A Text tulajdonság tartalmazza a ShapeEntity-ben megjelenő szöveget, míg a Font tulajdonsággal e szöveg jellemzőit tudjuk beállítani. A Marked tulajdonság értékével állíthatjuk be a ShapeEntity jelöltségét, melynek igazra állítása a 8 méretező pont megjelenését idézi elő. constructor TShapeEntity.Create(AOwner: TComponent);

A ShapeEntity objektum létrehozása. A létrehozás magában foglalja az FPen, FBrush és FText objektumok létrehozását, továbbá az FPen, FBrush és Font tulajdonságok OnChange eseményeinek beállítását. destructor TShapeEntity.Destroy;

A ShapeEntity objektum megszüntetése. A megszüntetés magában foglalja az FPen, FBrush és FText objektumok által foglalt memóriaterület felszabadítását.

R:=FSizePercent/100;

Height:=Trunc(FTrueHeight*R+0.5);

Width:=Trunc(FTrueWidth*R+0.5);

Top:=Trunc(FTrueTop*R+0.5);

Left:=Trunc(FTrueLeft*R+0.5);

PenBrush

Több

soros

szöveg

Text

(TrueLeft,TrueTop)

TrueHeight

TrueWidth

70. Ábra

Page 85: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

85

procedure TShapeEntity.Paint;

A ShapeEntity objektum kirajzolása. E metódus alapját a Delphi komponenseinek forráskódjából, a TShape.Paint metódusa képezi. (\DELPHI\SOURCE\VCL\EXTCTRLS.PAS) Néhány dologgal bővíteni kellett ezt a metódust. Az első a keret vastagságának meghatározása a nagyítás/kicsinyítés mértékétől függően. A szöveg elhelyezéséhez a ShapeEntity közepén, figyelembe kell venni a Font

tulajdonságokat, valamint a nagyítás/kicsinyítés mértékét. A CY értékét elég egyszer, viszont a CX értékét a szöveg minden egyes sorának kirajzolása előtt meg kell határozni. A W és H a ShapeEntity azt a valódi szélességét illetve magasságát tárolják, amely már nem tartalmazza a keretvonal által elfoglalt területet.

Amennyiben az FMarked tulajdonság igaz értékén áll, azaz a ShapeEntity jelölt, akkor ki kell rajzolni a méretező pontokat. Ezt a MarkOn metódus meghívásával érjük el. Procedure TShapeEntity.MarkOn; A méretező pontok kirajzolása a ShapeEntity keretén. Meghívjuk a SizerBoxCalc metódust, amely beállítja a SizerBox tömb elemeit. E tömb 8 eleme a 8 méretező négyzet kirajzolásához szükséges koordinátapárokat tartalmazza. Ezek után egy ciklus segítségével végighaladunk a tömb elemein és a tárolt koordinátáknak megfelelően kirajzoljuk a négyzeteket.

R:=FSizePercent/100;

NewWidth:=Trunc(FPen.Width*R+0.5);

If NewWidth<1 Then NewWidth:=1;

Pen.Width:=NewWidth;

CY:=(TextExtent(Text.Strings[0]).cy *Text.Count) div 2;

For I:=0 To Text.Count-1 do

Begin

CX:=TextExtent(Text.Strings[I]).cx div 2;

TextOut(X+(W div 2) - CX,

Y+(H div 2) - CY + (TextExtent(Text.Strings[I]).cy * I),

Text.Strings[I]);

End;

A szöveg

második sora

harmadik sora

CY

W

CX

H

71. Ábra

Page 86: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

86

procedure TShapeEntity.SizerBoxCalc;

A méretező pontok koordinátáinak meghatározása. A SizerBox tömb első elemét meghatározó koordináták kiszámítása:

Az M egy konstans 5 érték, amely a méretező négyzet oldalának hossza. A második elem koordinátája:

A további elemek meghatározása a forrásprogramba megtekinthető.

Procedure TShapeEntity.MouseMove(Shift: TShiftState; X, Y: Integer);

Az egér kurzorformájának beállítása a helyzetétől függően. Amennyiben az egér valamely méretező pont felett van, akkor a kurzorformáját át kell állítani, mégpedig a méretező pontnak megfelelő módon. A kurzorok formáját tároló tömb egy konstans CrMouseCursor. Az egér mozgatása során meg kell vizsgálni, hogy a kurzor hányas számú méretező pont felett tartózkodik. Ezt jelöljük N-el. A kurzor beállítása ezek után:

A kurzorforma beállításán túl a SizingPoint tulajdonság beállításárát is el kell végeznünk, amely külső objektumok számára is elérhető. A DragCursor tulajdonság beállításával az esetleges vonszoláskor megjelenő kurzorformát határozzuk meg.

With SizerBox[1] Do

Begin

X1:=0; Y1:=0; X2:=M; Y2:=M;

End;

With SizerBox[2] Do

Begin

X1:=(Width div 2)-(M div 2); Y1:=0;

X2:=(Width div 2)-(M div 2)+M; Y2:=M;

End;

If N>0 Then

Begin

If N>4 Then Cursor:=crMouseCursor[N-4]

Else Cursor:=crMouseCursor[N];

SizingPoint:=N;

DragCursor:=Cursor;

End

Else

Begin

Cursor:=crDefault;

DragCursor:=crDrag;

SizingPoint:=0;

End;

1 2 3

4

567

8

(x1,y1)

(x2,y2)

A SizerBox egy

eleme

M

72. Ábra

1 2 3 4

73. Ábra

Page 87: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

87

2.5.3 A ContactLine osztály

Metódusok A TContactLine published jellemzői:

A kapcsolatvonalat felépítő vonalrendszert egy 4 elemet tartalmazó tömbbel határozzuk meg, amely a kezdő-, a vég-, és a töréspontok koordinátáit tartalmazza. A TruePoints tömb tartalmazza a bázis koordinátákat, amely alapja a nagyítás/kicsinyítés értékeinek, a Points tömb pedig a valódi rajzolási koordinátákat tartalmazza.

A Percent tulajdonság beállításával a ContactLine nagyítását illetve kicsinyítését valósíthatjuk meg. Ez nem jelent mást, mint a kapcsolatvonalat felépítő szakaszok rajzolási koordinátáinak aktualizálását.

A DotBegin, illetve DotEnd tulajdonság beállításával meghatározhatjuk a kapcsolatvonal első- illetve második felének pontozott vonalként történő ábrázolását. A LockOutBegin, illetve LockOutEnd tulajdonság beállításával érhetjük el, a kapcsolatvonal első-, illetve második felén történő félkörív megrajzolását. A LineWidth és LineColor tulajdonságokkal a kapcsolatvonal vastagságát illetve színét állíthatjuk be. Az Enabled tulajdonsággal szabályozhatjuk a kapcsolatvonal elérhetőségét.

R:=FPercent/100;

For I:=1 To 4 Do

Begin

Points[I].X:=Trunc(TruePoints[I].X * R);

Points[I].Y:=Trunc(TruePoints[I].Y * R); End;

Points[1]

Points[2]

Points[3] Points[4]

LockOutBegin

DotBegin

LockOutEnd

DotEbd

74. Ábra

Page 88: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

88

A Marked tulajdonság értékével állíthatjuk be a ShapeEntity jelöltségét, melynek igazra állítása a ’méretező’ pont (pontok) megjelenését idézi elő.

Procedure TContactLine.SetTruePoint;

A valódi koordináták (TruePoints) meghatározása a rajzolási koordinátákból (Points). A Contact rajzasztalon történő elhelyezése, mozgatása a rajzolási koordináták beállításában nyilvánul meg, viszont a nagyítás bázisa mindig a valódi koordináta ezért szükséges ez a ’visszatranszformáló’ metódus.

Jelölőlség pontok

75. Ábra

Page 89: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

89

2.5.4 A TWorkPad osztály

A WorkPad form esetében szükségünk van két tulajdonságra, az egyik a fájlnevét tároló FileName tulajdonság, a másik a rajztáblát megtestesítő TDrawingDesk típusú Desk elnevezésű objektum. procedure TWorkPad.FormCreate(Sender: TObject);

A Form létrehozása után végrehajtandó metódus. Meghívjuk a NewDesk metódust, mely létrehozza a rajzasztalt (Desk) és beállítja annak tulajdonságait. procedure TWorkPad.FormClose(Sender: TObject; var Action: TCloseAction);

A form bezárása előtt végrehajtandó metódus. Egy dialógus ablakon keresztül rákérdezünk a menés szükségességére. Az ablak elhagyásának módja alapján 3 eset lehetséges. - Fájlmentés

Meghívjuk a FileSaveItemClick metódust, mely elvégzi a mentést. Amennyiben ez volt az utolsó gyermek-ablak, akkor letiltjuk a MainForm szerkesztő panelján elhelyezett gombokat, majd folytatjuk az ablak bezárását végző mechanizmust.

- Nincs mentés Amennyiben ez volt az utolsó gyermek-ablak, akkor letiltjuk a MainForm szerkesztő panelján elhelyezett gombokat, majd folytatjuk az ablak bezárását végző mechanizmust.

- Kilépés megszakítása Megszakítjuk az ablak bezárását végző mechanizmust.

procedure TWorkPad.SetCentreScrollBar(Sender: TObject);

Pozícionálás az ablak közepére. A függőleges és vízszintes gördítősáv pozicionálása a rajzasztal közepére, figyelembe véve a függőleges gördítősáv szélességét valamint a ToolBar és vízszintes gördítősáv magasságát.

procedure TWorkPad.SBNewEntity(Sender: TObject);

A MainForm ’New Entity’ üzenetének hatására végrehajtandó metódus. Letiltjuk a rajzasztalon elhelyezkedő valamennyi objektumot az AllEnable(False) metódussal, a rajzeszközt és az egérkurzort ’új egyedtéglalap’ állapotra állítjuk. procedure TWorkPad.SBNewContact(Sender: TObject);

A MainForm ’New Contact’ üzenetének hatására végrehajtandó metódus. Elérhetővé tesszük a rajzasztalon elhelyezkedő valamennyi objektumot az AllEnable(True) metódussal, a rajzeszközt és az egérkurzort ’új kapcsolatvonal’ állapotra állítjuk.

HorzScrollBar.Position:=(Desk.Width div 2)-((Width-12) div 2);

VertScrollBar.Position:=(Desk.Height div 2) -((Height-12-32) div 2);

Desk.AllEnable(False);

Desk.DrawingTool:= dtEntity;

Desk.Cursor:= crNewEntity;

Desk.AllEnable(True);

Desk.DrawingTool:= dtContact; Desk.Cursor:= crContact;

Page 90: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

90

procedure TWorkPad.SBArrow(Sender: TObject);

A MainForm ’szerkesztés’ üzenetének hatására végrehajtandó metódus. Elérhetővé tesszük a rajzasztalon elhelyezkedő valamennyi objektumot az AllEnable(True) metódussal, a rajzeszközt és az egérkurzort ’szerkesztés’ állapotra állítjuk. procedure TWorkPad.DeskMove(Sender: TObject);

A MainForm ’Desk Moving’ üzenetének hatására végrehajtandó metódus. Elérhetővé tesszük a rajzasztalon elhelyezkedő valamennyi objektumot az AllEnable(True) metódussal, a rajzeszközt és az egérkurzort ’csúsztató kéz’ állapotra állítjuk. procedure TWorkPad.NewDesk(Sender: TObject);

A MainForm ’New ’ üzenetének illetve az ’New’ menüpont hatására végrehajtandó metódus. Létrehozzuk a Desk objektum egy példányát a TDrawingDesk osztályból. Beállítjuk - a vízszintesen és függőlegesen elhelyezkedő lapok számát (7,5), - a rajzasztal pozícióját az ablakban (0,0) - a rajzasztal háttérszínét (clTeal) - a nagyítás/kicsinyítés mértékét (15) - a rajzeszközt (dtArrow) Az egérmozgás eseményét átirányítjuk a DeskMouseMove metódusunkra és végül beállítjuk a lapok méretét a nyomtató paramétereinek megfelelően. procedure TWorkPad.SetPageSize(PageWidth, PageHeight:Integer);

A paraméterként kapott lapmagasság és szélesség értékének átmásolása a rajzasztal megfelelő tulajdonságaiba. procedure TWorkPad.IncDecPercent(IPerc:Integer);

A MainForm ’Zoom In ’, ’Zoom Out’ üzenetének hatására végrehajtandó metódus. Meghívjuk a SetPercent metódust a rajzasztal aktuális Percent érékének és az IPerc éték összegével. procedure TWorkPad.SetPercent(NewPercent:Integer);

A rajzasztal nagyítás/kicsinyítés értékeinek beállítása. Megvizsgáljuk, hogy megfelelő-e a paraméterként kapott NewPercent értéke: - nagyobb-egyenlő mint 5, és - a nagyítás hatására kisseb lesz-e a rajzasztal magassága, mint 32769 - a nagyítás hatására kisseb lesz-e a rajzasztal szélessége, mint 32769 (Mivel a rajzasztal nem más, mint egy panel, melynek szélessége és magassága Integer típusú és a legnagyobb ábrázolható szám: 32769) Amennyiben megfelel a feltételeknek a NewPercent értéke, akkor beállítjuk a rajzasztal Precent értékét, valamint a MainForm ToolBar-ján megjelenő nagyítási értéket. További lényeges dolog az, hogy a rajzasztal ablakban látható részének közepe a művelet után is középen helyezkedjen el amennyiben ez lehetséges. Ezt úgy érjük el, hogy a rajzasztal

Desk.AllEnable(True);

Desk.DrawingTool:= dtArrow; Desk.Cursor:= crDefault;

Desk.AllEnable(False);

Desk.DrawingTool:= dmMove; Desk.Cursor:= crHand;

Page 91: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

91

nagyítása után a gördítősávok pozícióit a rajzasztal méretváltozásának arányában változtatjuk meg.

procedure TWorkPad.SetFont;

A MainForm ’Font’ üzenetének hatására végrehajtandó metódus. Átadjuk a vezérlést a Windows saját Font beállító dialógus ablakának. Amennyiben ’OK’-val hagytuk el, akkor egy ciklus segítségével végighaladunk a rajzasztal egyedtéglalapokat tároló listáján és beállítjuk a jelöltre állított egyedtéglalapok font tulajdonságát. procedure TWorkPad.SetProperties;

A MainForm ’Properties’ üzenetének hatására végrehajtandó metódus. Egy ciklus segítségével megvizsgáljuk, hogy van-e jelölt egyedtéglalap, ha van, akkor meghívjuk az egyedtéglalap tulajdonságát beállító metódust (SetEntityProperties). Ha nincs egyetlen jelölt egyedtéglalap sem, akkor egy másik ciklus segítségével megvizsgáljuk, hogy van-e jelölt kapcsolatvonal, ha van, meghívjuk a kapcsolatvonal tulajdonságát beállító metódust (SetContactProperties). Ha egyetlen objektum sincs jelölve, akkor meghívjuk a rajzasztal tulajdonságát beállító metódust (MainForm.ViewOptionsForm). procedure TWorkPad.EditDelItemClick(Sender: TObject);

A ’Delete’ menüpont választása illetve a ’Del’ billentyű leütése esetén végrehajtandó metódus. Amennyiben a rajzasztal tartalmaz jelölt objektumot, akkor megjelenítünk egy ’Biztosan töröl ?’ dialógus ablakot. Ha ezt ’OK’-val hagytuk el, akkor meghívjuk a rajzasztal SelectedDelete metódusát, mely törli a jelölt objektumokat. procedure TWorkPad.SelectAllClick(Sender: TObject);

A SelectAll menüpont választása esetén végrehajtandó metódus. Meghívjuk a rajzasztal SelectAll metódusát, amely a rajzasztal valamennyi objektumát jelöltre állítja. procedure TWorkPad.FilePrintSetupItemClick(Sender: TObject);

A PrinterSetup menüpont választása esetén végrehajtandó metódus. Átadjuk a vezérlést a Windows saját nyomtató beállító dialógus ablakának. Amennyiben ’OK’-val hagytuk el, akkor meghívjuk a SetPageSize metódust a Printer aktuális paramétereivel. procedure TWorkPad.PrintPreview(Sender: TObject);

A MainForm ’Print’ üzenetének illetve a ’Print’ menüpont választása esetén végrehajtandó metódus. Meghívjuk a rajzasztal Preview metódusát, amely megjeleníti a nyomtatási képet, lehetőséget ad bizonyos nyomtatási paraméterek beállítására és a nyomtatás elindítására.

HP:=HorzScrollBar.Position+((Width-12) div 2);

VP:=VertScrollBar.Position+((Height-12-32) div 2);

DW:=Desk.Width; DH:=Desk.Height;

Desk.Percent:=NewPercent;

HorzScrollBar.Position:=Trunc(HP * Desk.Width/DW) - ((Width-12) div 2) ;

VertScrollBar.Position:=Trunc(VP * Desk.Height/DH) -((Height-12-32) div 2);

Page 92: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

92

procedure TWorkPad.FormActivate(Sender: TObject);

A form aktívvá válásakor végrehajtandó metódus. Beállítjuk a nagyítás/kicsinyítés számértékét a ToolBar-ban. procedure TWorkPad.EditCopyItemClick(Sender: TObject);

A ’Copy’ menüpont választása, illetve a ’Ctrl+C’ lenyomása esetén végrehajtandó metódus. Meghívjuk a rajzasztal CopyToClipboard metódusát, amely vágólapra másolja a jelölt objektumokat. procedure TWorkPad.EditCutItemClick(Sender: TObject);

A ’Cut’ menüpont választása, illtve a ’Ctrl+X’ lenyomása esetén végrehajtandó metódus. Meghívjuk a rajzasztal CutToClipboard metódusát, amely vágólapra viszi át a jelölt objektumokat. procedure TWorkPad.EditPasteItemClick(Sender: TObject);

A ’Paste’ menüpont választása, illetve a ’Ctrl+V’ lenyomása esetén végrehajtandó metódus. Meghívjuk a rajzasztal PasteFromClipboard metódusát, amely a rajzasztalra másolja vágólap tartalmát. procedure TWorkPad.EditMenuClick(Sender: TObject);

A menüválasztáskor végrehajtandó metódus. A ’Cut’, ’Copy’, ’Delete’ menüpontok engedélyezése illetve tiltása annak függvényében, hogy van-e jelölt objektum a rajzasztalon. A ’Paste’ menüpont engedélyezése illetve tiltása annak függvényében, hogy van-e Text formátumú tartalma a vágólapnak. procedure TWorkPad.FileNewItemClick(Sender: TObject);

A ’New’ menüpont választása esetén végrehajtandó metódus. Meghívjuk a MainForm FileNewItemClick metódusát, mely egy új gyermek-ablakot generál. procedure TWorkPad.FileSaveAsItemClick(Sender: TObject);

A ’SaveAs’ menüpont választása esetén végrehajtandó metódus. Átadjuk a vezérlést a Windows saját mentés dialógus ablakának. Amennyiben ’OK’-val hagytuk el, átállítjuk a gyermek-ablak címét az új fájlnévre és meghívjuk a rajzasztal SaveToFile metódusát a fájlnév paraméterrel. procedure TWorkPad.FileSaveItemClick(Sender: TObject);

A MainForm ’Save’ üzenetének illetve a ’Save’ menüpont választása esetén végrehajtandó metódus. Amennyiben az ablak FileName tulajdonsága üres, akkor meghívjuk a FileSaveItemClick metódust. Ellenkező esetben a rajzasztal SaveToFile metódusát hívjuk meg a FileName tulajdonság paraméterként történő átadásával.

Page 93: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

93

procedure TWorkPad.WindowTileItemClick(Sender: TObject);

A ’Title’ menüpont választása esetén végrehajtandó metódus. Meghívjuk a MainForm.Tile metódust, amely a gyermek-ablakokat úgy rendezi át, hogy azok befedjék a főablakot.

procedure TWorkPad.WindowCascadetemClick(Sender: TObject);

A ’Cascade’ menüpont választása esetén végrehajtandó metódus. Meghívjuk a MainForm.Cascade metódust, amely a gyermek-ablakokat lépcsőzetesen helyezi el a főablakba. procedure TWorkPad.FileOpenItemClick(Sender: TObject);

A MainForm ’Open’ üzenetének illetve a ’Open’ menüpont választása esetén végrehajtandó metódus. Meghívjuk a MainForm FileOpenItemClick metódusát. procedure TWorkPad.LoadFromFile(FileName:String);

Egy modell betöltése. Meghívjuk a rajzasztal LoadFromFile metódusát a paraméterként kapott fájlnévvel. Majd megjelenítjük a modell nevét a StatusLine második cellájában. procedure TWorkPad.DeskMouseMove(Sender: TObject; Shift: TShiftState;

X,Y:Integer);

A rajzasztalon történő egérmozgást, mint eseményt lekezelő metódus. Amennyiben engedélyezett a rajzasztal csúsztatása, akkor beállítjuk a gördítősávokat a rajzasztal DeskMoveRec.MovedX és DeskMoveRec.MovedX tulajdonsága alapján. A két tulajdonság tartalmazza az egér elmozdulását vízszintes és függőleges irányba.

Megjelenítjük az ablak státusz sorában az egér koordinátáját (X,Y). Procedure TWorkPad.NewMenuItem(MI:String);

Új menüpont hozzáadása az ablak menüszerkezetéhez. Létrehozzuk az új menüpont objektumot, majd ezt hozzáadjuk a WindowMenu legördülő soraihoz. Az MI paramétert átmásoljuk a menü megjelenő szövegrészébe, majd az OnClick eseményét a WindowItemClick-re irányítjuk. procedure TWorkPad.WindowMenuClick(Sender: TObject); Az ablak menürendszerének ’Window’ menüpontjára történő kattintás eseményét lekezelő metódus. Egy ciklus segítségével töröljük a menüpontokat a harmadik sortól, melyek a gyermek-ablakok hivatkozásait tartalmazzák. Ezek után ismét felépítjük a menütételeket a gyermek-ablakok alapján. Ezzel aktualizáljuk a gyermek-ablakok életében bekövetkezett változásokat.

If Desk.DeskMoveRec.Enable Then

Begin

HorzScrollBar.Position:= HorzScrollBar.Position + Desk.DeskMoveRec.MovedX;

VertScrollBar.Position:= VertScrollBar.Position + Desk.DeskMoveRec.MovedY;

End;

76. Ábra

Page 94: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

94

Procedure TWorkPad.WindowItemClick(Sender:TObject);

A Window menü dinamikus elemire történt kattintás, mint esemény lekezelése. Meghívjuk a Show metódusát a kattintott menüpont indexe alapján megállapított gyermek-ablaknak.

Procedure TWorkPad.SetUpOptions(Opt:TOptions);

A rajzasztal Options tulajdonságainak aktualizálása. Az ablak Options tulajdonságával aktualizáljuk a rajzasztal saját Options tulajdonságát. procedure TWorkPad.GeneralClick(Sender: TObject);

A ’General’ menüpont választása esetén végrehajtandó metódus. Meghívjuk a MainForm.ViewOptionsForm metódusát, mely a modell alap tulajdonságait állítja be. procedure TWorkPad.HeadClick(Sender: TObject);

A ’Model Head’ menüpont választása esetén végrehajtandó metódus. Átmásoljuk a modell fejadatát a beállításához használt dialógusablakba. Megjelenítjük a FormHead dialógus ablakot és amennyiben ’OK’-val hagytuk el, frissítjük a gyermek-ablak fejadatait. Megjelenítjük az ablak státusz sorában a modell címét.

Page 95: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

95

2.5.5 A TMainForm osztály

A programban az un. MDI (Multi Document Interface) technikát alkalmazzuk, mely lehetővé teszi több modell egyszerre történő kezelését. Szükségünk van egy, un. szülő (Parent) ablakra, mely több gyerek (Child) ablakot tartalmazhat. A Parent ablak (MainForm) Szükség van egy TOptions típusú tulajdonságra, amelyben a gyermek ablakokban lévő rajzasztal alaptulajdonságait határozzuk meg (Options). procedure TMainForm.FormCreate(Sender: TObject);

A Form létrehozásakor végrehajtandó metódus. Mielőtt megjelenne az alapképernyő, létrehozzuk, megjelenítjük , majd megszüntetjük a program címét tartalmazó egyszerű dialógus ablakot. Ezután létrehozzuk a fent említett objektumot: Options.

procedure TMainForm.FormClose(Sender: TObject);

A Form bezárása előtt végrehajtandó metódus. Megszüntetjük a két létrehozott objektumot. procedure TMainForm.FilePrintSetup(Sender: TObject);

A ’PrinterSetup’ menüpont kiválasztása esetén végrehajtandó metódus. Átadjuk a vezérlést a Windows saját nyomtató beállító dialógus ablakának. Amennyiben OK-val lépünk ki akkor a SetPageSize(Printer.PageWidth,

Printer.PageHeight) üzenet küldjük az éppen aktuális gyerek-ablaknak, ha létezik. A PageWidth és PageHeight a beállított papír szélességét és magasságát tartalmazza pixelben. procedure TMainForm.FileExit(Sender: TObject);

A FileExit menüpont kiválasztása esetén végrehajtandó metódus. Lezárjuk az ablakot. procedure TMainForm.SBNewEntityClick(Sender: TObject);

Az ’New Entity’ gomb lenyomása esetén végrehajtandó metódus. SBNewEntity üzenet küldése az éppen aktuális gyerek-ablaknak, ha létezik. procedure TMainForm.SBArrowClick(Sender: TObject);

A ’Edit’ (nyíl) gomb lenyomása esetén végrehajtandó metódus. SBArrows üzenet küldése az éppen aktuális gyerek-ablaknak, ha létezik. procedure TMainForm.SBZoomInClick(Sender: TObject);

A ’Zoom In’ gomb lenyomása esetén végrehajtandó metódus. IncDecPercent(5) üzenet küldése az éppen aktuális gyerek-ablaknak, ha létezik. procedure TMainForm.SBZoomOutClick(Sender: TObject);

A ’Zoom Out’ gomb lenyomása esetén végrehajtandó metódus. IncDecPercent(-5) üzenet küldése az éppen aktuális gyerek-ablaknak, ha létezik.

Page 96: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

96

procedure TMainForm.SBNewContactClick(Sender: TObject);

Az ’New Contact’ gomb lenyomása esetén végrehajtandó metódus. SBNewContact üzenet küldése az éppen aktuális gyerek-ablaknak, ha létezik. procedure TMainForm.PrintSetupDialogClose(Sender: TObject);

Az ’New Entity’ gomb lenyomása esetén végrehajtandó metódus. SBNewContact üzenet küldése az éppen aktuális gyerek-ablaknak, ha létezik. procedure TMainForm.SBMoveClick(Sender: TObject);

A ’Desk Moving’ gomb lenyomása esetén végrehajtandó metódus. DeskMove üzenet küldése az éppen aktuális gyerek-ablaknak, ha létezik. procedure TMainForm.SBFontClick(Sender: TObject);

A ’Font’ gomb lenyomása esetén végrehajtandó metódus. SetFont üzenet küldése az éppen aktuális gyerek-ablaknak, ha létezik. procedure TMainForm.FileNewItemClick(Sender: TObject);

A ’New’ gomb lenyomása és a ’New’ menüpont választása esetén végrehajtandó metódus. Létrehozunk egy új ablakot, azaz a TworkPad osztály egy példányát. Beállítjuk az ablak cím tulajdonságát, amely az ’LDM’ szöveg és a gyerek ablak sorszáma. A gyerek ablak közepére pozícionálunk a saját SetCentreScrollBar metódusának meghívásával. Beállítjuk az ablak jellemzőit az ablak szintén saját SetUpOptions metódusának meghívásával. Megjelenítjük az új ablakunkat és engedélyezzük a szerkesztő panelen elhelyezett ikonok elérhetőségét. procedure TMainForm.FileOpenItemClick(Sender: TObject);

A ’Open’ gomb illetve az ’Open’ menüpont választása esetén végrehajtandó metódus. Átadjuk a vezérlést a Windows saját fájlkezelő dialógus ablakának. Az ablakból történt ’OK’ kilépés esetén meghívjuk a FileNewItemClick metódust, amely létrehoz egy új ablakot. Beállítjuk az ablak cím és fájlnév tulajdonságát, majd meghívjuk az ablak saját LoadFromFile metódusát, amely betölti a paraméterében megadott fájlt. Végül engedélyezzük a szerkesztő panelen elhelyezett ikonok elérhetőségét. procedure TMainForm.SBFileSaveClick(Sender: TObject); A ’Save’ gomb illetve a ’Save’ menüpont választása esetén végrehajtandó metódus. FileSaveItemClick üzenet küldése az éppen aktuális gyerek-ablaknak, ha létezik. procedure TMainForm.SBPrintClick (Sender: TObject); A ’Print’ gomb illetve a ’Print’ menüpont választása esetén végrehajtandó metódus. PrintPreview üzenet küldése az éppen aktuális gyerek-ablaknak, ha létezik.

Page 97: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

97

procedure TMainForm.EditPanelEnable(Value:Boolean)

A szerkesztő gombok engedélyezése/tiltása. Egy ciklus segítségével végig haladunk a szerkesztő panel (EditPanel) komponensein és azok elérhetőség (Enabled) jellemzőit a paraméterként kapott Value értékkel tesszük egyenlővé.

Procedure TMainForm.ViewOptionsForm;

Az ’opciók’ menüpont választása esetén végrehajtandó metódus.

Ez egy speciális eset abból a szempontból, hogy e metódus hívása csak a gyermek-ablak menüpontjából érhető el. Átadjuk a vezérlést az OptionsForm ablakának. Az ablakból történt ’OK’ kilépés esetén meghívjuk az OptionsRead metódust, amely átmásolja az OptionsForm ablak beállított adatait a MainForm Options tulajdonságába. Ezután meghívjuk a SetUpOptions-t mely végighaladva a gyermek-ablakokon, aktualizálja azok saját Options tulajdonságát.

Szerkesztő panel

Új

Nyomtatás

Nagyítás Kicsinyítés

Font

Jellemzõk

Szerkesztés

Új egyed

Új kapcsolat

Asztalcsúsztatás

Mentés

Betöltés

77. Ábra

A rajzasztal

beállításai

Az egyed

alapbeállításai

A kapcsolat

alapbeállítása

78. Ábra

Page 98: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

98

Procedure TMainForm.OptionsRead;

Az OptionsForm ablak adatainak átmásolása a MainForm Options tulajdonságába. Procedure TMainForm.SetUpOptions;

A gyerek-ablak Options tulajdonságainak aktualizálása. Egy ciklus segítségével végighaladva a gyermek-ablakokon a MainForm Options tulajdonságával aktualizálja az ablakok saját Options tulajdonságát. procedure TMainForm.FormActivate(Sender: TObject);

A Form aktiválásakor végrehajtandó metódus. Meghívjuk az OptionsRead metódust, amely átmásolja az OptionsForm ablak adatait a MainForm Options tulajdonságába. procedure TMainForm.SBPropertiesClick(Sender: TObject);

A ’Properties’ gomb lenyomása esetén végrehajtandó metódus. SetProperties üzenet küldése az éppen aktuális gyerek-ablaknak, ha létezik.

Page 99: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

99

3 Mellékletek

3.1 Felhasználói kézikönyv

Bevezető

A kézikönyv a Logical Data Model Designer tervező program telepítéséhez és használatához ad útmutatás. A dokumentáció és a program használata, kezelői szintű Windows ismeretet feltételez a felhasználó részéről. A felhasználói felület és a kezelési mechanizmus tervezésekor, kivitelezésekor törekedtem a mai vizuális rajzoló, dokumentumkezelő, modellező alkalmazásokban használt -jól bevált- megoldások alkalmazására, mivel így gyorsabban elsajátítható a program kezelése. Bár a menüben szerepel, az ’on-line help’ egyelőre nem érhető el. A szoftver hardverigénye minimum 486-DX/100 processzor, 16 MByte memória, SVGA monitor. A szoftver fut minden ma ismert 32-bites Windows operációs rendszer alatt: Windows’95, Windows’98, Windows NT. Telepítés

A mellékelt CD gyökérkönyvtárának tartalmát a merevlemez egy teszőleges könyvtárába kell másolni, majd az LDM.EXE-t kell futtatni. A program indítása

A program elindítása után megjelenő képernyőn a Start gomb megnyomásával tudunk túljutni.

Ekkor következő ablak jelenik meg:

Page 100: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

100

A file menüpont alatt található menüpontok jelentése: New: Új modell létrehozása Open: Egy létező modell betöltése valamely háttértárról Print Setup: Az aktuális nyomtató kiválasztása, beállítása Exit: Kilépés a programból Az új modell elérését és a model-fájl megnyitását a két első gyors-gomb megnyomásával is elérhetjük. A rajzfelületet egymásmellé helyezett szabványos papírlapok alkotják, így a modell készítése nem korlátozik az A4-es lapok fizikai kereti közé. A modell rajzasztala zöld színben jelenik meg, a lapok széleit jelző kék vonalakkal. Az ablak tetején látható menürendszer kibővül, az eddig szürke gyors-gombok elérhetővé válnak. A gyors gombok jelentése:

Új: Új modell létrehozása Betöltés: Egy létező modell betöltése valamely háttértárról Mentés: A modell mentése valamely háttértárolóra Nyomtatás: A nyomtatási kép megjelenítése, nyomtatás Nagyítás: A rajzasztal nagyítása 5%-kal Kicsinyítés: A rajzasztal kicsinyítése 5%-kal Font: Amennyiben van kijelölt egyed a rajzasztalon, e gomb megnyomásával

beállíthatjuk font tulajdonságát. Jellemzők: Megnyomásakor három eset lehetséges:

- ha van jelölt egyed az asztalon, akkor annak jellemzőit állíthatjuk be - ha van jelölt kapcsolat az asztalon, akkor annak jellemzőit állíthatjuk

be - ha nincs jelölt objektum, akkor a rajzasztal alapbeállításait

Új Betöltés

Szerkesztő panel

Új

Nyomtatás

Nagyítás Kicsinyítés

Font

Jellemzõk

Szerkesztés

Új egyed

Új kapcsolat

Asztalcsúsztatás

Mentés

Betöltés

Page 101: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

101

határozhatjuk meg Szerkesztés: A rajzeszközt ’szerkesztés’ állapotúra állítja Új egyed: A rajzeszközt ’új egyed’ állapotúra állítja Új kapcsolat: A rajzeszközt ’új kapcsolat’ állapotúra állítja Asztal csúsztatás A rajzeszközt ’csúsztatás’ állapotúra állítja Exit: Kilépés a programból Egyedek létrehozása, beállítása, törlése

Új egyed létrehozásához először a rajzeszközt ’új egyed’ állapotúra kell állítani a megfelelő gyors-gomb megnyomásával. Ezután, a megváltozott alakú egérkurzort arra a pontra kell mozgatnunk a rajzasztalon, ahová az új egyedet helyezni akarjuk. A bal egérgomb minden egyes megnyomásakor egy új egyed jelenik meg. A már létező egyedek tulajdonságainak kezeléséhez először át kell váltanunk ’szerkesztés’ rajzolásmódra, majd ki kell jelölnünk a módosítandó egyedet. A jelölés történhet egyedileg és csoportosan. Egy egyed kijelöléséhez csak rá kell kattintanunk a jelölésre szánt egyed felületére. Ha több egyedet akarunk kijelölni, akkor ezt megtehetjük egy jelölő kerettel, illetve a Shift billentyű nyomva tartása mellett történő kattintással. A jelölő keret használathoz vigyük az egérkurzort a kijelölésre szánt terület bal-felső sarkába, majd az egérgombot lenyomva –és folyamatosan nyomva tartva- vigyük a kijelölésre szánt terület bal-alsó sarkába. Itt felengedve az egérgombot a kereten belül elhelyezkedő valamennyi objektum (egyed, kapcsolat) jelöltté válik. A jelöltséget kis piros méretező négyzetek jelölik. Bármely egyed, egyedcsoportot át tudunk helyezni, illetve méretezni a nyolc fő irányba. Az gyedek áthelyezéséhez, nyomjuk le az egérgombot a jelölt egyed felett –és

folyamatosan nyomva tartva vigyük az egeret a kívánt irányba. Az elengedés után az egyedek az új pozíciókban jelennek meg. Az egyedek átméretezéséhez a piros méretező pontok valamelyike felett kell lenyomnunk az egérgombot. Az átméretezést és mozgatást az egyedek között lévő kapcsolat automatikusan követik. Az egyed, egyedek tulajdonságainak beállításhoz kattintsunk a jobb egérgombbal valamely egyed felett, vagy kattintsunk a ’jellemzők’ gyors-gombra.

Page 102: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

102

Az egyed tulajdonságait beállító dialógusablak:

Csoportos tulajdonság beállítás esetén a szövegek nem változnak meg, hiszen az általában minden egyednél különböző. A jelölt egyedet, egyedeket a ’Del’ billentyű leütésével, illetve az ’Edit’ menüpont ’Delete’ almenüpontjának választásával tudjuk törölni. Törléskor az egyed valamennyi kapcsolata megszűnik. Megjegyzés: - Az ’Edit’ menüpont ’Select All’ almenüpontjának választásával az aktuális rajzasztal

valamennyi objektuma jelöltté válik. - Törléskor valamennyi jelöltobjektum törlésre kerül. Kapcsolatok létrehozása, beállítása törlése.

Új kapcsolat létrehozásához először a rajzeszközt ’új kapcsolat’ llapotúra kell állítani a megfelelő gyors-gomb megnyomásával. Ezután, a megváltozott alakú egérkurzort arra az egyedre kell vinnünk, amelyhez hozzá akarunk kapcsolni egy másikat. Majd az egérgombot lenyomva –és folyamatosan nyomva tartva- vigyük az egérkurzort a kapcsolni kívánt egyed fölé. Az egérgomb elengedése után egy új kapcsolat jelenik meg. A már létező kapcsolatok tulajdonságainak kezeléséhez először át kell váltanunk ’szerkesztés’

rajzolás módra, majd ki kell jelölnünk a módosítandó kapcsolatot. A jelölés történhet egyedileg és csoportosan. Egy kapcsolat kijelöléséhez csak rá kell kattintanunk a jelölésre szánt kapcsolatra. Ha több kapcsolatot akarunk kijelölni, akkor ezt megtehetjük egy jelölő kerettel, illetve a Shift billentyű nyomva tartása mellett történő kattintással. A jelölő keret használathoz vigyük az egérkurzort a kijelölésre szánt terület bal-felső sarkába, majd az

Azonosító

Szélesség

Magasság

Keretszín

Keret

vastagság

Szöveg

Háttérszín

Betûtípus

Page 103: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

103

egérgombot lenyomva –és folyamatosan nyomva tartva- vigyük a kijelölésre szánt terület bal-alsó sarkába. Itt felengedve az egérgombot a kereten belül elhelyezkedő valamennyi objektum (egyed, kapcsolat) jelöltté válik. A jelöltséget kis piros méretező négyzetek jelölik. A csoportosan kijelölt kapcsolatoknak csak a tulajdonságait tudjuk beállítani, együtt mozgatásuk nem lehetséges. A kapcsolatok mozgatása egyrészt lehetséges valamely egyed átmozgatásával, másrészt lehetséges a kapcsolatot jelölő vonal, illetve a töréspontok közvetlen ’megragadásával’. A ’megragadáshoz’ nyomjuk le az egérgombot a vonszolni kívánt kapcsolat felett –és folyamatosan nyomva tartva- vigyük az egérkurzort tetszőleges irányba. Elengedés után a kapcsolat felveszi az új pozícióhoz legjobban illeszkedő formát. A kapcsolatok kezdő és végpontja nem hagyhatja el az egyedek területét, ezt a program nem is engedi. A cikk-cakk jellegű összekötés csak a kapcsolat, vonszolásával érhető el, az egyed áthelyezésével nem. Amennyiben a kapcsolat egy törésponttal rendelkezik és ez a pont a két egyed egymáshoz legközelebb eső sarkai által közrezárt téglalap területén helyezkedik el, akkor cikk-cakk lesz az eredmény vonal jellege. Az kapcsolat, kapcsolatok tulajdonságainak beállításhoz kattintsunk a jobb egérgombbal valamely kapcsolat felett, vagy kattintsunk a ’jellemzők’ gyors-gombra. Az kapcsolat tulajdonságait beállító dialógusablak:

Csoportos tulajdonság beállítás esetén a szövegek nem változnak meg, hiszen az általában minden kapcsolatnál különböző. A jelölt kapcsolat, kapcsolatokat a Del billentyű leütésével, illetve az ’Edit’ menüpont ’Delete’ almenüpontjának választásával tudjuk törölni. Megjegyzés: - Az ’Edit’ menüpont ’Select All’ almenüpontjának választásával az aktuális rajzasztal

valamennyi objektuma jelöltté válik. - Törléskor valamennyi jelölt objektum törlésre kerül.

Kapcsolat

azonosító

A kapcsolat

jellege

A kizáró

kapcsolat

beállítása

A kapcsolat

színe

Vonal-

vastagság

A kapcsolat

megnevezése

Page 104: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

104

A program alapbeállításának megadása

Az ’Options’ menüpont ’General’ almenüpontját kiválasztva megjelenik a program alapbeállításait kezelő dialógus ablak.

A beállítások valamennyi modellre érvényesek lesznek, nem csak az aktuálisra. A model fejadatának beállítása:

Az ’Options’ menüpont ’General’ almenüpontját kiválasztva megjelenik a program alapbeállításait kezelő dialógus ablak.

A megadott értékek csak nyomtatáskor jelennek meg a lap bal-alsó sarkában.

A rajzasztal

beállításai

Az egyed

alapbeállításai

A kapcsolat

alapbeállítása

A rácspontok

egymáshoz

viszonyított

távolsága

vízszintes

irányba

A rácspontok

egymáshoz

viszonyított

távolsága

függõleges

irányba

A rácsponthoz

történõ igazítás

engedélyezése

és tiltása

A rácspont

megjelenítésének

engedélyezése

és tiltása

A rácspont színe

A projekt neve

A model neve

Szerzõ neve

Verziószám

Page 105: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

105

A model nyomtatása

Az ’File’ menüpont ’Print’ almenüpontját kiválasztva, illetve a ’Nyomtatás’ gyors-gombra kattintva, megjelenik a nyomtatási paraméterek beállítására és a nyomtatási kép megtekintésére szolgáló dialógus ablak.

A nyomtatás elindítása a ’Print’ gomb lenyomásával érhető el. Az aktuális nyomtató kiválasztása, beállítása az ’File’ menüpont ’Print Setup’ almenüpontjának kiválasztásával lehetséges, melynek hatására megjelenik a Windows szabványos nyomtató kezelő dialógus ablaka. A model mentése, betöltése háttértárolóról.

Az ’File’ menüpont ’Save’ almenüpontját kiválasztva, illetve a ’Mentés’ gyors-gombra kattintva, a modell azonnal mentésre kerül. Természetesen, ha a modell először kerül mentésre, akkor megjelenik a Windows szabványos fájlmentés dialógus ablaka, ahol beállíthatjuk –többek között- a fájl nevét. Az ’File’ menüpont ’Save As’ almenüpontját kiválasztva lehetőségünk van fájlnevének felülbírálására, szintén a Windows szabványos fájlmentés dialógus ablakán keresztül. A vágólap használata

Először ki kell jelölnünk a vágólapra helyezendő objektumokat, majd az ’Edit’ menüpont almenüpontjai közül kell kiválasztani a megfelelőt:

Cut Ctrl+X A jelölt objektumokat áthelyezi a vágólapra Copy Ctrl+C A jelölt objektumokat átmásolja a vágólapra

Természetesen a kapcsolatok csak akkor kerülnek vágólapra, ha az általuk összekötött egyedek is jelöltek voltak.

Másolatok

száma

Fejléc

nyomtatás

Keret

nyomtatás

Színes

nyomtatás

Monokróm

nyomtatás

Margó

távolsága a

laspszéleitõl

A nyomtatandó

lapok

Page 106: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

106

A vágólapra helyezett objektumok beillesztése a ’Paste’ menüpont választásával, illetve a Ctrl+V billentyű kombináció lenyomásával lehetséges. Az ’Edit’ menüpont ’Select All’ almenüpontjának választásával az aktuális rajzasztal valamennyi objektuma jelöltté válik.

Page 107: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

107

3.2 Nyomtatási képek

Page 108: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

108

Page 109: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

109

3.3 CD

Page 110: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

110

4 Tapasztalatok, továbbfejlesztési lehetőségek

Ahhoz, hogy ez a szoftver komoly rendszerfejlesztések hatékony segédeszközévé

váljon, még nagyon sok munkát kellene belefektetni és egy ember által talán meg is oldhatatlan. Elkészítésével nem is ez volt a célom. Sokkal inkább arra szerettem volna rávilágítani, hogy az általunk más szoftverekben is használt, egyszerűnek és magától érthetődőnek tűnő szolgáltatások (pl. nagyítás/kicsinyítés) megvalósítása nem is olyan egyszerű feladat. Ami ebben a dolgozatban (szoftverben) szerintem érték, és mások számára is hasznosítható az felmerült problémákra talált megoldási módok, algoritmusok Néhány ezek közül: - az egér használatával történő kapcsolatvonal-kezelés - a kapcsolatot felépítő szakaszok számát és elhelyezését meghatározó algoritmus - a csoportos áthelyezés, átméretezés - kicsinyítés és nagyítás - nyomtatási képet generáló és megjelenítő algoritmus - a vágólap- és fájlkezelés megoldása a TMemo osztály felhasználásával

Mint a dolgozat elején említettem a szoftver külső megjelenését és működési mechanizmusát erősen befolyásolták a kereskedelmi forgalomban is kapható professzionális szoftverek. Azonban ezek belső működése rejtve maradtak előttem, ezért biztos vagyok benne, hogy léteznek sokkal hatékonyabb és egyszerűbb megoldások.

Az alkalmazás magában foglalja a továbbfejlesztés lehetőségét. Az egyik fontos elem, amit a felhasználó hiányolhat, az az on-line help, melynek elkészítése inkább idő és akarat kérdése.

Az általam származtatott és létrehozott osztályok esetében törekedtem a komponensként történő deklarálásukra, azonban ez nem teljesen sikerült. Ennek tökéletesebb eléréséhez alkalmazásfüggetlenebb szemlélet és precízebb tesztelés szükséges, de a lehetőség benne van az osztályokban.

Tovább kellene tökéletesíteni a kapcsolatok kezelését is, különösen az egyeden elhelyezkedő végpontok megragadását, valamint az 1 pixelnél vastagabb szaggatott vonalat tartalmazó kapcsolatok megjelenítését illetően. (Ez utóbbi sajnos nem működik a Delphi által nyújtott rajzolási metódusok felhasználásával)

Igen fontos lenne, hogy a program általános alkalmazások számára is értelmezhető állományt tudjon előállítani. Ezzel megoldanánk a modell rajzának beillesztését, pl. egy Word dokumentumba.

Ebben az alkalmazásban az egyedeket és kapcsolatokat illetően a nevükön kívül, más attributomok nem adhatók meg. Bár ennek pótlása további komoly tervezési és fejlesztési munkát jelentene, azonban az alkalmazás sokkal teljesebbé válna és újabb szolgáltatások beépítést irányozná elő. Összességében úgy érzem, a feladatspecifikácóban előírtaknak a szoftver megfelel és ötletforrásává válhat a vizuális tervező alkalmazások fejlesztése iránt érdeklődőknek.

Page 111: DIPLOMAMUNKA -  · PDF file1 UML: Unified Modeling Language, Egyesített Modellező Nyelv) 2 Jackson ábra: Programalgoritmusokat modellező ábra. 6 1.3 Feladatspecifikáció

111

5 Külső forrásanyagok

5.1 Irodalomjegyzék

1. Angster Erzsébet: Az objektumorientált tervezés és programozás alapjai, 4KÖR Bt.

1999. 2. Bana István: Az SSADM redszerszervezési módszertan, LSI Oktatóközpont 3. Dr. Kovácsné Cohner Judit, Takács Tibor: Ismerkedés az SSADM-mel, Budapest,

ComputerBooks, 1997 4. Dr. Szelezsán János: Adatbázisok, LSI Oktatóközpont 5. Baga Edit: Delphi másképp, 1998 6. JAVA 1.1 utikalauz programozóknak, Budapest, ELTE TTK Hallgatói Alapítvány 7. Xavier Pacheco, Steve Teixeira: Delphi 2 Developer’s Guide, Indianapolis, SAMS

Publishing 1996.

5.2 Tanulmányozott alkalmazások

1. Visio Corporation: Visio 4.0c for Microsoft Windows, 1991-1995 2. Sybase, Inc: S-Designor AppModeler Desktop for PowerBuilder, Version 5.0.3 32-bit 3. Pacestar Software: EDGE DiagrammerVersion 2.01b, 1997 4. CSA Research Ltd.: Silverrun-RDM 2.4.4. 1996