Šiame įraše apžvelgsime, kaip sukurti pasirinktinį BricsCAD dialogo langai su DCL (dialogo valdymo kalba). DCL leidžia programuotojams kurti pasirinktinius dialogo langelius LISP kasdienybei. DCL buvo pridėtas prie BricsCAD V8, kad būtų suderinamas su „AutoCAD“.

DCL yra struktūrinė kalba, naudojama apibūdinti elementus (vadinamus „plytelėmis“), kurie sudaro dialogo langus. Plyteles sudaro redagavimo laukai, sąrašų langeliai, radijo mygtukai, vaizdų plytelės ir pavadinimų juostos. Kiekvienas iš jų turi vieną ar kelis požymius, tokius kaip jo padėtis, fono spalva ir jo atliekamas veiksmas.


Šiame įraše aptariamos šios temos:


Greita DCL ISTORIJA

Autodesk pirmą kartą pridėjo DCL kaip dokumentais nepateiktą funkciją į „AutoCAD“ „Windows“ 11 leidimas. Jis buvo skirtas sukurti nuo platformos nepriklausomus dialogo langus. Tuo metu „Autodesk“ pagamintos „AutoCAD“ versijos „kiekvienai perspektyviajai inžinerijos platformai“, apimančiai „DOS“, „Windows“, „Unix“, „Macintosh“ ir „OS / 2“, ir DCL buvo projekto kodo pavadinimu „Proteus“, kurio tikslas buvo sukurti „AutoCAD“, dalis. dirbti ir atrodyti vienodai kiekvienoje operacinėje sistemoje.

Kaip matyti iš žemiau pateiktų skaičių, projektas buvo sėkmingas. Pirma, čia yra „AutoCAD“ Išleiskite 11 dialogo langą Piešimo priemonės, veikiantį DOS:

programavimo dialogo langai bricscad

Čia yra tas pats dialogo langas „Windows“ „AutoCAD“ versijoje 11 leidimas:

autocad dcl kodavimas

Atkreipkite dėmesį, kaip panašūs yra DOS ir Windows dialogo langai. (Dialogo langas Piešimo priemonės dabar žinomas kaip dialogo langas Parinktys.)

Tačiau išleidus 14, „Proteus“ tapo beprasmis, nes „Autodesk“ pasirinko palaikyti tik „Windows“ operacinę sistemą. Bet DCL ir toliau slepiasi kaip vienintelis būdas sukurti dialogo langus su LISP, o Bricsys DCL naudojasi savo palaikymu. „Linux“, „macOS“ir „Windows“.


Programos, parašytos LISP, SDS ir DRx, gali naudoti DCL dialogo langams. Meniu ir įrankių juostos makrokomandos taip pat gali būti susietos su LISP kasdienybe, iškviečiančia DCL kodą. (VBA nenaudoja DCL, nes turi savo dialogo sudarymo aplinką.)

„Bricsys“ nepateikia jokios programavimo aplinkos, kuri padėtų jums sukurti DCL failus - visa tai yra rankinė
kelias. Tai reiškia, kad teksto rengyklė, tokia kaip „NotePad“ sistemoje „Windows“ ir Teksto redagavimas „Linux“ ar „Mac“ bus
būti jūsų DCL programavimo aplinka. Kai kurie trečiųjų šalių kūrėjai sukūrė DCL kūrimo įrankius.

Jei norite, kad LISP rutinoje būtų rodomas dialogo langas, turite parašyti du kodo vienetus:

  • Kodas .dcl faile, kuris apibūdina dialogo langą ir jo plytelių funkcijas.
  • Kodas .lsp faile įkelia .dcl failą ir suaktyvina plyteles.

Darbas su dialogo langais visada apima failų, .dcl ir .lsp, porą, o LISP kodas kontroliuoja dialogo lango kodą.

DCL trūkumas yra tas, kad jis negali sukurti savaime modifikuojančių dialogo langų, tokių kaip tie, kurie prideda arba pašalina mygtukus. Tačiau tai gali dinamiškai pakeisti sąrašų turinį ir tokį.

kuriant pasirinktinius dialogo langelius
Dialogo lango elementai

Iš ko pagamintos dialogo dėžutės

Dialogo langelius gali sudaryti iš daugelio elementų, tokių kaip radijo mygtukai, skaidrės, vaizdai, skirtukai ir žymės langeliai. Šie elementai vadinami „plytelėmis“. DCL leidžia sukurti daugybę skirtingų tipų elementų, tačiau jame nėra kiekvieno elemento, esančio šiandieniniuose dialogo languose, plytelių. Taip yra todėl, kad DCL nebuvo atnaujintas nuo tada, kai jis buvo pristatytas prieš maždaug 20 metų. (Tie elementai, kurių neįmanoma naudoti naudojant DCL, gali būti sukurti per VBA.)

Žemiau pateiktas paveikslas iliustruoja daugelį dialogo lango elementų, kurie galimi naudojant DCL, kartu su kai kuriais konkrečių DCL plytelių pavadinimais.

Daugelis plytelių yra matomos, bet kai kurios yra nematomos, pavyzdžiui, eilutės ir stulpelio plytelės, paryškintos aukščiau esančiame paveikslėlyje su mėlynu stačiakampiu:

KAIP VEIKIA DCL

Du dialogo langų veikimui reikalingi kodo vienetai yra šie:

  • DCL kodas, kuris nurodo plytelių išdėstymą ir jų atributus dialogo lange.
  • LISP kodas, kuris suaktyvina ir kontroliuoja dialogo langą.

Nereikia nurodyti bendro dialogo lango dydžio; „BricsCAD“ tuo pasirūpina automatiškai nustatant dydį. Numatyta, kad plytelės sukraunamos į stulpelius; jums reikia tik nurodyti, kada plytelės turėtų būti išlygintos iš eilės.

Kai kurie pirmyn ir atgal leidžiami važiuojant DCL ir LISP; tai vadinama „atšaukimais“. Atšaukimai naudojami failų dialogo languose pateikiant vardus, tam tikrus mygtukus pilkinti, pakeisti iššokančiųjų sąrašų (sąrašų) turinį ir pan.

Šis įrašas parodo, kaip rašyti DCL naudojant LISP kodą. Vėliau pateikiame išsamią nuorodą į visas DCL plyteles, jų atributus ir susijusias LISP funkcijas.

Jūsų pirmasis DCL failas

Prieš rašydami bet kurį dialogo lango kodą, naudinga suplanuoti plyteles. Kur dialogo lange bus mygtukai, sąrašai ir teksto įvesties laukai? Gera idėja gauti savo pieštuką ir tada nubraižyti savo idėjas ant popieriaus.

Šiam mokymui sukursite dialogo langą, kuriame bus rodomos šiuose sistemos kintamuosiuose saugomos vertės:

LastPoint - išsaugo paskutinio taško, įvesto brėžinyje, koordinates.
„LastAngle“ - išsaugo kampą, kurį apibūdina du paskutiniai įvesti taškai.
„LastPrompt“ - išsaugo paskutinį komandų eilutėje įvestą tekstą.

Skirkite šiek tiek laiko pagalvoti apie dialogo lango dizainą. Jis turėtų pavadinimą, paaiškinantį dialogo lango paskirtį. Tikriausiai jame turėtų būti trys teksto eilutės, nurodančios kiekvieno sistemos kintamojo pavadinimą ir vertę, ir jis turėtų būti OK mygtuką, norėdami išeiti iš dialogo lango.

Tai gali atrodyti taip:

kaip veikia dialogo langas

DCL PROGRAMAVIMO STRUKTŪRA

Šio dialogo lango programavimo struktūra atrodo taip:

Pradėti dialogo lango apibrėžimą:

  • Nurodykite dialogo lango pavadinimą
  • Nurodykite stulpelį:

Sistemos kintamasis LastPoint ir jo 3D koordinatės
Sistemos kintamasis LastAngle ir jo kampas
Sistemos kintamasis „LastPrompt“ ir jo tekstas

  • Raskite mygtuką Gerai

Užbaikite dialogo lango apibrėžimą.

Šiame pirmame vadove parašysite pakankamai kodo, kad būtų rodomas dialogo langas ir jo mygtukas Gerai. Į vadovėlį, kuris ateina vėliau, pridedate varpelius ir švilpukus.

Pradėti dialogo lango apibrėžimą

Kiekvieno turinys.dcl failas prasideda vardu atributas. Tai vardas, kuriuo dialogo kodas vėliau iškviečiamas susiejant LISP rutiną. Pavadinimo funkcija atrodo taip:

vardas: dialogo langas {

Kaip ir LISP, atvirai petnešai reikia užsegimo, kad būtų parodytas dialogo lango apibrėžimo pabaiga:

}

Tarp dviejų petnešų rašote visą kodą, kuris apibūdina dialogo lango išvaizdą.

Šiai mokymo programai pavadinkite dialogo langą „lastInput“ taip:

paskutinė įvestis: dialogo langas {}

DCL vardai yra mažosios ir mažosios raidės, todėl „lastInput“ nėra tas pats, kas „LastINPUT“ arba „lastinput“.

Dialogo lango pavadinimas

Dialogo lango pavadinimo juostos tekstą nurodo etiketė nuosavybė, tokia:

vardas: dialogo langas {

etiketė = „Dialogo lango pavadinimas“;

}

Pažymėkite šį dialogo langą „Paskutinis įvestis“ taip:

paskutinis įvestis: dialogo langas {

etiketė = “Paskutinė įvestis“;

}=

Pavadinimo tekstą reikia rašyti kabutėse (“). Etiketės ypatybė turi būti baigta kabliataškiu (;). Ir naudinga įterpti kodą, kad jis būtų skaitomas.

Gerai mygtukas

Kiekviename dialogo lange reikia išėjimo mygtuko arba bent jau „Gerai“. („Windows“ nustato numatytąją reikšmę X kiekvieno dialogo lango viršutiniame dešiniajame kampe esantis mygtukas, kuris taip pat veikia, jei norite išeiti iš dialogo langų, pagamintų naudojant DCL!)

Mygtukai yra apibrėžti su mygtuką savybė, po kurios yra petnešomis uždaryto mygtuko savybės:

: mygtukas { }

Kadangi dialogo languose gali būti keli mygtukai, kiekvienas mygtukas turi būti identifikuojamas pagal savybę, vadinamą „raktu“. pagrindinio yra tai, kaip LISP pateikia instrukcijas mygtukams. Naudoti pagrindinio atributas identifikuoti šį mygtuką „OKButton“ kaip „okButton“:

klavišas = „okButton“;

Mygtukas turi rodyti etiketę, kurią vartotojai galėtų skaityti. Tai yra mygtukas Gerai, todėl etiketės atributu pažymėkite jį taip:

etiketė = „Gerai“;

Sudėkime juos visus kartu. „OK“ mygtukui pridėtas kodas čia rodomas spalvotai, kartu su raktu, etikete ir „atributais pagal nutylėjimą“. (Žr. Žemiau apie informaciją apie numatytąjį atributą.) Turime mygtuką, pažymėtą kaip „okButton“, pažymintį etiketę „Gerai“, ir jis yra nustatytas kaip numatytoji plytelė.

paskutinis įvestis: dialogo langas {

etiketė = „Paskutinė įvestis“;

: mygtukas {

klavišas = „okButton“;

etiketė = „Gerai“;

is_default = true;

}

}

PATARIMAS DCL kodas OK mygtukas yra tarsi paprogramė. Tą patį kodą galima naudoti dar kartą, kai reikia dialogo lango OK mygtuką, kurio beveik visą laiką nėra. Vėliau pamatysite, kaip sukurti paprogrames su DCL kodu.

Greita DCL METACHARAKTERIŲ SANTRAUKA

DCL Metasimbolis Reikšmė
// (pasvirasis brūkšnys) Nurodo komentaro eilutę
/* (pasvirasis žvaigždutė) Pradeda komentarų skyrių
*/ (žvaigždutė pasvirta Baigė komentarų skyrių
: (dvitaškis) Pradeda plytelių apibrėžimą. Iš anksto nustatytose plytelėse, kaip ir tarpiklyje, dvitaškis nenaudojamas
{ (petnešos) Paleidžiamas dialogo langas ir plytelių atributai
(tarpas) Atskiria simbolius
= lygus) Apibrėžia atributo reikšmes
“” (tiesi citata) Prideda teksto atributus
; (kabliataškis) Baigia atributo apibrėžimą. Kiekvienas požymis turi baigtis kabliataškiu
} (petnešos) Baigta plytelių ir dialogo atributai

LISP KODAS ĮKRAUTI IR VEIKTI DIALOGO DĖŽUTES

Šis LISP kodas yra tas, kurį naudojate įkeldami, paleisdami ir išeidami iš dialogo lango „lastInput.dcl“ apibrėžimo failo:

(netaikoma C: xx ()

(„setq dlg-id“ (load_dialog „c: \\ lastInput“))

(new_dialog „lastInput“ dlg-id)

(veiksmo_tile „priimti“ „(padaryta_dialog)“)

(pradžios_dialogas)

(„unload_dialog dlg-id“)

)

Pažiūrėkime, ką reiškia LISP kodas.

Funkcija apibrėžiama kaip „xx“ su LISP neveikimo funkcija. Programavimas = derinimas, todėl man patinka naudoti lengvai įvedamą LISP programos pavadinimą, pvz., „Xx“.

(netaikoma C: xx ()

„LastInput.dcl“ failas įkeltas su „load_dialog“ funkcija. Nereikia nurodyti „.dcl“ plėtinio, nes tai yra vienintelis šios funkcijos tikslas: įkelti DCL failus.

  • „Windows“ sistemoje nurodykite disko pavadinimą, C: \\. Atminkite, kad LISP reikalauja, kad atskirtų katalogų pavadinimus naudotumėte \\, o ne \.

    („setq dlg-id“ (load_dialog „c: \\ lastInput“))

  • „Linux“ nepalikite disko pavadinimo:

    („setq dlg-id“ (load_dialog „lastInput“))

DCL failuose gali būti daugiau nei vienas dialogo lango apibrėžimas, todėl kitas žingsnis yra naudoti funkciją new_dialog ir pasakyti BricsCAD, kurį norite pasiekti. Šiuo atveju yra tik vienas, „lastInput“.

(new_dialog „lastInput“ dlg-id)

Dialogo lange yra mygtukas pavadinimu „okButton“, o jo paskirtį nustato LISP, o ne DCL! Čia naudojate „action_tile“ funkciją, kad priskirtumėte veiksmą „okButton“ plytelėms. Mygtuko paskirtis gyvenime yra vykdyti funkciją done_dialog, kuri išeina iš dialogo lango. Trumpai tariant, spustelėkite Gerai, jei norite išeiti iš dialogo lango. Tai galite perskaityti taip: „plytelės, pavadintos okButton, veiksmas yra…“.

(„action_tile“ okButton “„ (done_dialog) “)

Atlikus visus šiuos parengiamuosius darbus, ateina didysis momentas. „Start_dialog“ funkcija paleidžia dialogo langą ir laukia, kol paspausite jo mygtuką.

(pradžios_dialogas)

Kaip tvarkingi programuotojai, mes iškrauname dialogo langą iš atminties su „unload_dialog“ funkcija.

(„unload_dialog dlg-id“)

Ir paskutinis skliaustas baigiasi xx funkcija.

)


Tikrinti DCL kodą

Turite pakankamai DCL kodo, kad galėtumėte jį išbandyti dabar - tai leidžia pamatyti, kaip vystosi dialogo langas. Norėdami patikrinti kodą, atlikite šiuos veiksmus:

  1. Atidaryti užrašų knygelę, Teksto redagavimas, ar kitą ASCII teksto rengyklę.
  2. Įveskite DCL kodą, kurį sukūrėme anksčiau:dcl kodasSvarbu: Įsitikinkite, kad šis DCL ir LSP failas naudoja tiesias kabutes, kurios atrodo taip: „. Jei juose yra kabučių („arba“), rutinos nepavyks. LISP skųsis: „klaida: blogo argumento tipas; laukiama “, o DCL įdės dialogo langą, kuriame bus skundžiamasi, sintaksės klaida: netikėta„ “.
  3. Įrašykite failą kaip lastinput.dcl. Kad LISP xx.lsp rutina galėtų lengvai ją rasti, išsaugokite failą aukščiausio lygio aplanke:
    • „Windows“ sistemoje išsaugokite DCL failą C: \ diske.
    • „Linux“ ir „Mac“ įrenginiuose išsaugokite DCL failą savo namų aplanke. Pavyzdžiui, aš prisijungiu prie „Linux“ naudodamas vartotojo vardą „ralphg“, todėl failą išsaugojau aplanke „ralphg“.
  4. Dabar atidarykite naują failą ir įveskite LISP kodą, aprašytą „LISP kodas, skirtas įkelti ir paleisti dialogo langus skyrius." kodavimas CAD
  5. Įrašykite failą kaip xx.lsp, taip pat tame pačiame aplanke kaip ir DCL failas.
  6. Perjunkite į BricsCAD ir atidarykite xx.lsp failą BricsCAD:
    • „Windows“ sistemoje naudokite „Explorer“, norėdami vilkti xx.lsp failą į BricsCAD piešimo langą. (Vilkite failą daug greičiau nei įvesdami „AppLoad“ komandą arba naudodamiesi LISP apkrova funkcija!)
    • „Linux“ sistemoje turite naudoti apkrova funkcijos, nes failų negalima vilkti į „BricsCAD“ „Linux“ versiją. Raginime „:“ įveskite:

      : (įkelti „xx“)

  7. Tipas xx vykdyti rutiną, kuri įkelia dialogo langą:

    : xx

    Atminkite, kad pasirodys dialogo langas! Na, taip turėtų būti, jei nepadarėte jokių kodavimo klaidų.

Kas toliau?

Kitame įraše panagrinėsime, kaip į savo dialogo langą įtraukti visus varpelius ir švilpukus.