330 likes | 449 Views
Grafikus tervezőrendszerek programozása. 10. előadás. DCL bevezetés. DCL = Dialog Control Language Párbeszédablakok programozási nyelve AutoCAD ablakai is DCL-ben vannak írva Például az acad.dcl file Hierarchikus felépítésű nyelv. DCL példa. DCL alapok.
E N D
Grafikus tervezőrendszerek programozása 10. előadás
DCL bevezetés • DCL = Dialog Control Language • Párbeszédablakok programozási nyelve • AutoCAD ablakai is DCL-ben vannak írva • Például az acad.dcl file • Hierarchikus felépítésű nyelv
DCL alapok • A programozható párbeszédpanelek téglalap alakú részekre (zónákra, tile) tagolódnak. • A zónák önállóan programozhatók, és mozaikszerűen összeépíthetők. • Vannak passzív zónák, melyek csak megjelenítésre szolgálnak, és vannak aktív zónák is, melyek interaktív adatbevitelre szolgálnak
Jelkészlet • A DCL nyelv jelkészlete • Az abécé betűi és a számjegyek • Speciális jelek: { } = _ . : ; " / * • Sztringen belül bármilyen jel előfordulhat • Megjegyzések (C típusúak): • // - egy sornyi megjegyzés • /* */ - jelek közötti megjegyzés
Szintakszis 1. • Fejléc dcl_settings : default_dcl_settings { audit = n; } • Ellenőrzi a DCL file szemantikáját • n értéke: • 0 : Nincs ellenőrzés • 1 : Hibákat ellenőrzi • 2 : Figyelmeztetéseket ad • 3 : Javaslatokat ad
Szintakszis 2. • Zóna definíciója name : item1 [ : item2 : item3 ... ] { attribute1 = value1; attribute2 = value2; ... } • Ahol item már elözőleg definiált zóna • A name zóna örökli az összes item zóna attribútumát (balról – jobbra) • A {} zárójelek közötti rész az attribútumokat írhatja felül
Szintakszis 3. • Egy zóna neve csak betűket, számokat és az aláhúzás jelet tartalmazhatja • Például egy gomb definíciója: button : tile { fixed_height = true; is_tab_stop = true; }
Szintakszis 4. • Például az alapesetben kiválasztott gomb definíciója: default_button : button { is_default = true; } • Örökli az előző gomb definícióját és kiegészíti egy új attribútummal
Szintakszis 5. • Egy definiált zónára hivatkozni is lehet name; ill. : name { attribute = value; }
Szintakszis 6. • Attribútumok definiálása attribute = value; • Ahol: • attribute – egy érvényes kulcsszó • value – egy érték ami szöveg vagy kulcsszó • A sort a pontosvessző (;) zárja!
Egyszerű példa, DCL hello : dialog { label = ”Hello World Példa”; : text { label = ”Hello World!”; } : button { key = ”accept”; label = ”Rendben”; is_default = true; } }
Egyszerű példa, AutoLisp (defun hello ( / dcl_id ) (setq dcl_id (load_dialog”hello.dcl”)) (if (not (new_dialog”hello” dcl_id)) (exit) ) (action_tile”accept””(done_dialog)”) (start_dialog) (unload_dialog dcl_id) )
Általános LISP program DCL-el • DCL file betöltése: load_dialog • A dialógus definíciójának betöltése: new_dialog • A dialógus zónáinak beállítása ill. a zónák call-back függvények definíciója: Pl. action_tile • A dialógus ablak megjelenítése: start_dialog • A dialógus ablak kitöltése
Név és kor lekérdezése DCL dialógus ablak Érvénytelen kor megadása Végső dilógus ablak
DCL ablak szerkezete 1. nev_dcl : dialog { label = "Személyes adatok"; : edit_box { label = "Mi a neved: "; mnemonic = "N"; key = "nev"; alignment = centered; edit_limit = 30; edit_width = 30; }
DCL ablak szerkezete 2. : edit_box { label = "Hány éves vagy: "; mnemonic = "H"; key = "kor"; alignment = centered; edit_limit = 3; edit_width = 3; value = ""; }
DCL ablak szerkezete 3. : button { key = "accept"; label = "Rendben"; is_default = true; fixed_width = true; alignment = centered; } : errtile { width = 34; } }
Név és kor lekérdezése (AutoLisp) (defun c:nev ( / dcl_id name age ) ; ellenörző függvények ide jönnek (setq dcl_id (load_dialog "name.dcl")) (if (not (new_dialog "nev_dcl" dcl_id)) (exit)) (set_tile "nev" "Ird ide a neved") (action_tile "nev" "(setq name $value)") (action_tile "kor" "(setq age $value)") (action_tile "accept" "(nev_ell)") (start_dialog) (unload_dialog dcl_id) (alert (strcat "Az Ön neve " name "\nés kora " age)) )
Név ellenőrző függvény (defun nev_ell () (if(or(= (get_tile”nev”) ”Ird ide a neved”) (= (get_tile ”nev”) ””) ) (set_tile”error” ”Nem adtad meg a neved!”) (kor_ell) ) )
Kor ellenőrző függvény (defun kor_ell () (if (< (atoi (get_tile "kor")) 1) (set_tile "error" "Nem érvényeskor!") (done_dialog) ) )