V I S U A L B A S I C (2004) PRATARMĖ Mokysimės naudodami Microsoft Visual Basic 5.0 versiją. Visual Basic (VB) nėra dar viena nauja, madinga programavimo kalba. Tai ko gero lengviausiai įsisavinamas, našus ir vaizdus (Visual - matomas, vaizdingas) instrumentas taikomosioms programoms kurti. Antrasis pavadinimo žodis rodo, kad naudojama populiari Basic programavimo kalba. Skaitydami susidursite su objektais, jų savybėmis, metodais. Ši pažintis bus naudinga ir ateityje, įsisavinant objektiškai orientuotas sistemas, nes objektinė orientacija būdinga naujesnei programinei įrangai. Tiek Windows terpėje, tiek populiariausiose taikomosiose programose (Excel, Word ir kt.) naudojamos vaizdžios grafinės sąveikos priemonės. Darbas vyksta su kompiuteriu bendraujant ne komandomis, bet pele. Tuo tarpu kuriant programinius produktus šios galimybės iki šiol buvo ribotai naudojamos. VB sistema leidžia vaizdžiai ir patogiai kurti priemones, kuriomis vartotojas bendrauja su programa. Žinoma, visiškai išvengti programavimo neįmanoma - teks naudotis tegul ir paprasta Basic (Beginners' Allpurpose Symbolic Instruction Code) programavimo kalba. Reikėtų nepainioti VB su VBA (Visual Basic for Aplications). Pastaroji naudojama, kaip standartizuota programavimo kalba Word, Excel ir kitose Microsooft programiniuose produktuose. Manau, pajusite pasitenkinimą, galėdami per trumpą praktinio darbo laiką sukurti sudėtingesnius, turinčius profesionalų vaizdą programinius produktus, dirbančius Windows terpėje. Užduotys, išskyrus kelias, neilgos. Jos realizuojamos per vieną - kitą akademinę valandą. Tačiau trumpų užduočių įvairove stengtasi apimti daugumą charakteringų situacijų. Kai kurios užduotys - iš pirmo žvilgsnio “nerimtos”, taikytos būsimųjų mokytojų specifikai. Literatūra a) Microsoft Visual Basic. Programer's Guide, 1993. b) Ross Nelson. Running Visual Basic 3.0 for Windows, Russkaja Redakcija, 1995. (Rusų kl.) c) V.Šaltenis. VB pradžiamokslis. . OBJEKTAI. VALDYMAS ĮVYKIAIS VB naudojasi gausia ir lanksčia tipinių objektų biblioteka. Objektinis programavimas naudoja naują duomenų tipą - objektą. Jis gaunamas jungiant duomenis su tuos duomenis apdorojančiomis procedūromis. Objektas tampa savarankišku, uždaru, nesurištu su kitomis programos dalimis, nes turi savyje visa, kas būtina. Duomenys nusako objektą. Pavyzdžiui, grafiniuose objektuose duomenys nusako dydį, padėtį, spalvas, užrašus, ar objektas matomas ir pan. Kai kurie objekto duomenys gali būti pieinami vartotojui, keičiami. Jų keitimui naudojamos savybės - properties). Objektų procedūros vadinamos metodais, kurie gali atlikti su objektu, jo savybėmis susijusios informacijos apdorojimą. Pavyzdžiui, lango objektas turi metodus, leidžiančius jį judinti, keisti dydį, nupiešti langą ir pan. Daugelis VB objektų atitinka Windows terpės grafiniams objektams: langams, mygtukams ir t.t. Naujų objektų nekursime, tik galėsime pritaikyti tipinius objektus savo reikmėms, keisdami jų savybes. Jas keisime tiek ruošdami, projektuodami programą, tiek ją vykdydami. Todėl mūsų objektai vykdymo metu galės keisti spalvas, išnykti, judėti ir t.t. VB grafiniai objektai - tai formos ir reguliatoriai (controls). Formos - tai langai, kuriuose talpinami reguliatoriai: etiketės, mygtukai, meniu ir pan Kaip matysime būna ir nematomų reguliatorių. Programa gali turėti daug formų, kurių dalis darbo metu gali būti nematomos. Objektų naudojimo sintaksė analogiška Paskalio kalbos įrašų sintaksei. Objekto ir savybės vardą skiria taškas. Pavyzdžiui, jei objekto “Langas” savybei “Plotis” norime priskirti konkrečią reikšmę, tai rašome: Langas. Plotis = 100. Objekto vardą nuo jo metodo taip pat skiria taškas - norėdami parodyti ekrane formą Langas rašome Langas.Show, tuo kreipdamiesi į metodą Show. Valdymas įvykiais. VB remiasi valdymu įvykiais (event). Tai priešingybė tradicinių programų valdymui, kurių vykdymas pradedamas pirma eilute, po to seka įvairiausi ciklai, išsišakojimai, spausdinami rezultatai ir programos darbas baigiamas. Programuotojas šiuo atveju pilnai prognozuoja sistemos darbą, jaučiasi padėties šeimininku. Valdant įvykiais, programų vykdymas priklauso nuo vartotojo veiksmų bei pačios programos būklės. Pavyzdžiui, dirbant su teksto redaktoriumi, vartotojo veiksmų seka, o tuo pačiu programos darbas gali būti labai įvairūs, sunkiai prognozuojami. Įvykis, tai veiksmas, kurį atpažįsta ir į jį gali reaguoti programos objektai. Įvykį sukelia tiek vartotojas (pavyzdžiui, bakstelėdamas pelės mygtuką ar paspausdamas klaviatūros klavišą), tiek pati programa (pavyzdžiui, įvykus klaidai, gavus programos chronometro signalą). Objektai (formos bei reguliatoriai), reaguodami į įvykį, vykdo programos dalis - įvykių procedūras. Jas rašome mes, o įvykių atpažinimas vyksta automatiškai, nes tuo pasirūpina VB sistema. Pavyzdžiui, paspaudus pelės mygtuką, kai jos žymeklis nutaikytas į mygtuką su užrašu “Baigti programą”, įvyksta mygtuko paspaudimo (click) įvykis. Tokio įvykio procedūra turėtų vieną eilutę End ir užbaigtų programos vykdymą. Valdymo įvykiais schema. Valdant įvykiais, objektai tampa lyg savarankiškais veikėjais, kuriems nusakyta tiktai kaip reaguoti į tą ar kitą įvykį. Tuo tarpu visas veikimo scenarijus lieka sunkiai prognozuojamu. Esant daugeliui objektų, daugeliui įvykių rūšių bei didžiulei vartotojo veiksmų įvairovei, tradicinis programų kūrimas taptų pernelyg painiu. Tuo tarpu naudojant valdymą įvykiais, sudėtingo programinio produkto kūrimas paprastesnis - jis suskyla į atskirų įvykių procedūrų kūrimą. Jei įvykių, į kuriuos objektai moka reaguoti, nėra, programa laukia sekančio įvykio. PIRMOJI PROGRAMA Darbo su VB pradžia Pradžioje VB pasirodo dialogas, klausiantis, kas bus kuriama. Mes pasirenkame pirmąją alternatyvą – standartinės programos (Standard EXE) kūrimą. VB integruotos programinės aplinkos bendras vaizdas panašus į daugelio Windows programų: viršuje - meniu ir horizontali įrankių juosta, viduryje -keli langai, kairėje – įrankinė. . Panagrinėkime smulkiau šios programinės aplinkos dalis. VB programinės aplinkos bendras vaizdas. Formų projektavimo langas Ekrano centre į akis krinta langas, vardu Form1. Tai formų projektavimo langas – form designer (kol kas tuščias), kuriame projektuodami išdėstysime reguliatorius. Tokį langą vadina forma. Formų projektavimo langas Projektavimo langas - tai jūsų veiklos laukas projektuojant: čia lyg ant padėklo galėsite išdėstyti savo mygtukus ir užrašus, piešinius ir dar daug ką. Kuriant sudėtingesnę programą nebūtina apsiriboti vienintele forma. Forma - vienas iš tipinių, iš anksto paruoštų VB objektų. Mygtukai, slenkamosios juostos, piešiniai, kuriuos išdėstysime formoje - taip pat tipiniai. Taigi, viskas - iš tipinių objektų. Ar netaps programos, kuriamos VB instrumentais, monotoniškomis, kaip blokinių namų kvartalai? Taip atsitiktų, jei neturėtume plačių galimybių objektus keisti. Mūsų objektai toki lankstūs todėl, kad turi keičiamas savybes. Vartosime dvi sąvokas: projektavimas (design) ir vykdymas (run). Ruošiant VB programą vyksta projektavimas, kai kuriamas jos grafinis vaizdas, nustatomos savybių reikšmės, rašomos įvykių procedūros. Ją paleidus - projektas vykdomas, projektavimo metu sukurti objektai “atgyja’. Šie du etapai kartais painiojami, nes projektavimo metu programos išorinis vaizdas beveik toks pats, kaip ją vykdant. Todėl VB lango antraštėje viršuje skliausteliuose nurodoma, kurioje iš šių dviejų būklių esame. Įrankių dėžutė - blokų sandėlis Objektų, kuriuos galite naudoti, piktogramas matome įrankinėje, įrankių dėžutėje (toolbox), paprastai esančioje ekrano kairėje. VB objektų piktogramos įrankinėje. Objektą “pasiimti” iš dėžutės ir jį “padėti” į norimą formos vietą visai paprasta. Tam pakanka paspausti pelę ir objektą nuvilkti į norimą vietą. Lengva ir keisti jo dydį naudojant pelę. Žinoma, sukurtus objektus galima kopijuoti (copy), klijuoti (paste) bei naikinti (delete), naudojant įprastas Windows terpėje operacijas. Paprasčiausio objekto pavyzdys, kurio piktograma A yra įrankių dėžutės viršuje - tai etiketė (label). Ji naudojama tiesiog teksto rašymui. Savybių, projekto, programos teksto ir formų išdėstymo langai Savybių lange (antraštė - “Properties”) išvardintos pasirinkto objekto, mūsų atveju formos Form1, savybės. Bet kurią savybę projektuodami galime keisti. Visi objektai turi savybę Name (Vardas), daugumas – savybę Caption – užrašas. Jei galimos tik fiksuotos savybių reikšmės (pavyzdžiui, šrifto dydis, šrifto tipas), jas patogu pasirinkti iš galimo reikšmių sąrašo, kuris pasirodo paspaudus pele mažą piktogramą redagavimo eilutės dešinėje. Tokio sąrašo pavyzdys parodytas pav. Savybių langas. Kai kurių savybių reikšmių parinkimui gali būti naudojamas dialogas, pavyzdžiui, spalvų parinkimo dialogas, kur matome spalvų pavyzdžių paletę. Kiekvienas objektas turi savo savybių sąrašą. Projekto langas (nepainioti su projektavimo langu) vadinasi “Project1”; jame matome projekto formų, modulių (mūsų atveju - vienintelės Form1) ir kitų projekto dalių sąrašą. Pav. neparodytas programos teksto langas (code window). Jis atsidaro du kartus bakstelėjus pele bet kurio objekto vaizdą. Jame matome formos Form1 įvykių Load (įkelti) procedūrų Form_Load programos tekstą (mūsų atveju tekstas “tuščias” - tik procedūros pradžia ir pabaiga). Norėdami šiame procedūros ruošinyje galime rašyti jos tekstą. Kiekvienai formai ar programiniam moduliui – atskiras programos teksto langas. Tai tekstų redaktorius. Dažniausiai vartojami įvykiai: Click (paspausti), Paint (persipiešti), MouseMove (pelė juda), KeyDown (klaviatūros klavišas nuspaustas), KeyUp (klaviatūrtos klavišas atleistas ir t.t.. Programos teksto langas. Objektas gali turėti daug įvykių, o tuo pačiu ir įvykių procedūrų, todėl programos teksto lange yra galimybė jas visas peržiūrėti ir redaguoti. Dešiniajame viršutiniame lango kampe galime išskleisti visų to objekto įvykių sąrašą (Pav. toks sąrašas parodytas). Matome, kad forma, pavyzdžiui, moka reaguoti į pelės pajudinimo (MouseMove) ir kitus įvykius. Formų išdėstymo langas (Form Layout Window) leidžia susiprojektuoti formų išdėstymą ekrane. Langų, naudojamų projektuojant, nemažai; ne visi jie vienu metu reikalingi. Beveik visą laiką reikalingas projektavimo langas (forma), dažnai - savybių langas. Reikia išmokti manipuliuoti su langais, patogiai juos išdėstyti. “Pametus” kurį nors langą reikia kreiptis į meniu komandą View\Object arba View\Code arba į atitinkamas piktogramas projekto lange.. Programos kūrimo žingsniai VB programų kūrimą galima suskirstyti į tris žingsnius. 1. Interfeiso kūrimas. 2. Savybių nustatymas. 3. Programos tekstų rašymas. Tai nereiškia, kad praktikoje šių žingsnių ar jų vykdymo tvarkos tiksliai prisilaikoma. Pavyzdžiui, prie interfeiso ar savybių keitimo gali būti kartkartėmis grįžtama, nes bandant vykdyti programą kyla naujos idėjos. Paprasčiausias pavyzdys Pradėsime rašyti paprasčiausias VB programas neišstudijavę pačios kalbos, jos sintaksės. Kadangi kalba paprasta, taip galėsime atidėti kalbos studijas vėlesniam laikui. Iliustruokime programos kūrimo žingsnius paprastu pavyzdžiu. Vieninteliame kuriamos programos lange pradžioje turi būti tuščias teksto laukas (text box) ir mygtukas (command button). Paspaudus mygtuką, teksto lauke turi pasirodyti "Valio". Pirmiausia išdėstome savo objektus formoje Form 1, naudodami įrankių dėžutę. Tam bakstelime atitinkamą įrankių dėžutės piktogramą pele, velkame ją į norimą vietą ir keičiame pele objekto dydį. Gauname pav. pavaizduotą interfeiso projektą. Interfeiso projektas. Savybes keisime naudodamiesi savybių langais. Darysime lentelėje pateiktus objektų savybių reikšmių pakeitimus. Objektų savybių pakeitimai. Objektas Savybė Nustatoma savybės reikšmė Forma (form) Užrašas (Caption) Pirmoji programa Teksto laukas (text box) Tekstas (text) Tuščias Mygtukas (command button) Užrašas (Caption) OK Programos tekstą rašysime programos teksto lange (code window), kuris atsidaro du kartus bakstelėjus pele norimą objektą. Tokios įvykių procedūros (event procedure) vykdomos tik įvykus tam tikram su objektu susijusiam įvykiui - mūsų atveju įvykiui Click (bakstelėti): Sub Command1_Click () Text1.Text = "Valio" EndSub Programa keičia teksto lauko Text1 savybės Text reikšmę iš tuščios į "Valio". Lieka vykdyti pirmąją programą. Tam arba atliekama meniu komanda Run\ Start, arba paspaudžiamas klavišas F5, arba pele bakstelima piktograma , dubliuojanti meniu komandą. Pav. iliustruoja formos vaizdą vykdymo metu, paspaudus mygtuką “OK”. Pirmosios programos vaizdas vykdymo metu. Nenumatėme galimybių užbaigti programą patys, todėl jos vykdymą stabdysime VB priemonėmis: meniu komanda Run\ End arba bakstelint piktogramą . Norėdami išsaugoti savo projektą nepamirškime, kad jis susideda ne iš vieno failo. Todėl geriausia juos išsaugokime viename, kiekvienam projektui atskirame kataloge. 1 Užduotis Formoje keli mygtukai, kurių užrašai ”Aš nepaliestas”. Bet kurį palietus jo užrašas keičiasi į “Mane palietė”. 2 Užduotis Formoje mygtukas. Mygtukas ir forma reaguoja į jiems nutikusius įvykius tuo, kad ant savęs užsirašo užrašą, rodantį, koks įvykis jam (jai) įvyko, pvz. “Virš manęs judėjo pelė”. Forma turi reaguoti į įkėlimo Load įvykį, įvykstantį programos pradžioje (“Mane įkėlė”), MouseMove (“Virš manęs judėjo pelė”), Paint (persipiešimas) (“Mane perpiešė”), DblClick (dvigubas paspaudimas) (“Mane du kartus palietė”). Mygtukas – į Click (paspaudimo), Keydown (klaviatūros klavišas paspaustas), KeyUp (klavišas atleistas), MouseMove įvykius. PAPRASČIAUSI REGULIATORIAI. TEKSTO RAŠYMAS IR ĮVEDIMAS Panagrinėkime paprasčiausius, dažnai naudojamus reguliatorius. Mygtukai Paprastai mygtuku sutrumpintai vadina komandinį mygtuką (command button). Jo piktograma įrankių dėžutėje - , o jo vaizdas programoje - pav. Mygtuko paspaudimas sukelia įvykį Click, todėl programos dalį, kurią norėsime vykdyti paspaudus mygtuką, rašysime mygtuko Click įvykio procedūroje. Žinoma, mygtukas gali reaguoti ir į kitus įvykius. Aptarsime kelias svarbesnes mygtuko savybes. Caption (užrašas) - tai tekstas ant mygtuko (pavyzdžiui, “Atsisakau”); Default (pagal nutylėjimą) savybės reikšmė paprastai lygi False. Jei ji lygi True, mygtukas automatiškai pats pasispaudžia paspaudus klavišą Enter. Cancel (atsisakyti) savybės reikšmė taip pat paprastai lygi False. Jei ji lygi True, mygtukas automatiškai pats pasispaudžia paspaudžiant klavišą Esc. Savybės Style reikšmės: Standard ir Graphical. Standard reikšmė atitinka pilką mygtuką be piešinio. Graphical – mygtuką su piešiniais. Savybė Picture nurodo pagrindinį nepaspausto mygtuko piešinį, savybė DownPicture – piešinį ant nuspausto mygtuko, savybė DisabledPicture – piešinį ant neveiklaus mygtuko. Dažnai mygtukas naudojamas programai baigti. Tokio mygtuko įvykio procedūra būtų tokia: Private Sub Command1_Click() End End Sub Vykdant programą mygtukas (pvz. CmdOK) gali būti nuspaustas ne tik pelės paspaudimu, bet ir programiškai: CmdOK.Value=True arba CmdOK_Click Savybės Value mygtukui nerasite – ji keičiama tik programiškai Teksto rašymas ir įvedimas Tam naudojamos etiketės (label) ir teksto laukai (text box). Jų piktogramos atrodo atitinkamai: A ir Etiketės tekstas (savybė Caption) dažniausiai nustatomas projektuojant. Tai viena iš teksto spausdinimo formoje priemonių. Dažnai naudojama savybė Autosize – prisitaikyti dydį prie teksto ilgio. Tai savybė, turinti logines reikšmes. Dažnai naudojamas įvykis Click (palietimas pelės žymekliu). Pavyzdys. Jame etiketės teksto “Jonas” šriftą (kursyvas arba normalus) vykdymo metu galėsime keisti mygtukais. Pav. parodytas formos interfeisas, kuriame matome etiketę Label1 su užrašu “Jonas” (savybė Caption) ir du mygtukus Command1 ir Command2 su užrašais Kursyvas ir Normalus. Pavyzdys su šrifto keitimu. Mygtukams tenka rašyti įvykių Click procedūras (jų pirma ir paskutinė eilutės būna jau pateiktos): Sub Command1_Click () Label1.Font.Italic = True End Sub Sub Command2_Click () Label1.Font.Italic = False End Sub Pirmoji įvykio procedūra keičia etiketės savybės Font.Italic reikšmę į True, antroji - šią savybę panaikina. Matome, kad įvykių procedūros vardijamos sujungiant objekto vardą ir įvykį simboliu “_”. Teksto laukai skirti teksto įvedimui, tačiau kartais gali būti naudojami ir išvedimui. Svarbiausia jų savybė - Text, kurioje ir rasime įvestą tekstą. Savybė Multiline leidžia kurti daugelio eilučių teksto lauką (jei Multiline reikšmė lygi True). Savybės MaxLenght reikšmė (skaičius) riboja įvedamų simbolių skaičių. Keisdami savybę ScrollBars galime teksto lauką papildyti slenkamomis juostomis (tiek horizontalia, tiek vertikalia). Jos naudotinos, kai visas įvedamas tekstas netelpa į teksto lauko langą. Slaptažodžio įvedimui naudosime teksto lauko savybę PasswordChar, kurioje nurodytas simbolis matysis vietoje slapta renkamo teksto. Yra ir savybė RightToLeft, tautoms rašančioms atbulai. Dažnai naudojamas įvykis Change (pasikeisti) įvyksta kaip nors pakeitus tekstą. Pavyzdys. Sukurkime įvedimo lauką kuris teksto pradžioje neleistų rašyti kokio nors negražaus žodžio. Private Sub Text1_Change() If Text1 = "bbb" Then Text1 = "negrazu" End Sub Pavyzdys. Sukurkime elementarų kalkuliatorių, kuris daugina du skaičius ir iš karto vos įvedus rodo rezultatą. Tam sukursime du teksto laukus Text1 ir Text2 daugikliams bei etiketę rezultatams. Rašysime tokį tekstą: Sub Text1_Change() Label1 = Text1 *Text2 End Sub Tą patį pakartosime įvedimo laukui Text2. Programoje nerašėme taip vadinamų pagrindinių reguliatorių savybių (pavyzdžiui, text). Transliatorius jas pats papildo. Atrodytų, kad dviejų teksto eilučių dauginti negalima, tačiau programa dirbs. Basic kalboje Variant duomenų tipas priklausomai nuo vykdomų operacijų pats transformuojasi. Žinoma, ši programa duos klaidą visai ištuštinus įvedimo lauką arba įvedus ne skaitmeninį simbolį. Kad nuo to apsisaugoti, geriau naudoti funkciją Val(eilutė), kuri paverčia skaičiumi bet kurią eilutę: Label1 = Val(Text1) * Val(Text2) 3 Užduotis Formoje turi būti galimybė įvesti tekstą. Šis tekstas, jau jį renkant, turi būti iš karto automatiškai kartojamas įvairiose formos vietose, įvairiais šriftais, dydžiais ir spalvomis. 4 Užduotis Prašoma įvesti slaptažodį, kuris įvedant turi būti nematomas. Paspaudus mygtuką “Slaptažodį įvedžiau”, pranešami slaptažodžio tikrinimo rezultatai. 5 Užduotis - “Elektroninė lentelė” Suma 11 23 2 36 1 2 7 10 Suma 12 25 9 46 Teksto laukų dešinysis stulpelis ir apatinė eilutė - sumos, kurios automatiškai turi pasikeisti pakeitus teksto laukų turinį. Geometrinės savybės Kiekvienas VB objektas turi didelį savybių sąrašą; daugelis savybių objektuose - analogiškos. Beveik visi objektai turi turi savo padėtį ir dydį nusakančias geometrines savybes. Padėtį nusako savybės: Left (kairė) ir Top (viršus). Dydį nusako savybės: Width (plotis) ir Height (aukštis). Objekto padėtį ir dydį nusakančios savybės. Paprastai pradinės geometrinių savybių reikšmės nustatomos automatiškai, projektavimo metu pele keičiant objektų dydį ir padėtį. Programos darbo metu keisdami šias savybes, galėsime judinti reguliatorius, keisti jų dydį. Koordinačių sistemos pradžia formai – projektavimo lango kairysis viršutinis kampas. Bet kuriam tos formos reguliatoriui koordinačių sistemos pradžia - kairysis viršutinis formos kampas. Tai konteinerio koordinačių sistema, kuri judinant konteinerį nesikeičia, nes kartu juda ir konteinerio reguliatoriai. Formoje gali būti įterpti ir kiti konteineriai, pavyzdžiui rėmai (frame), kuriuose savo ruožtu gali būti savi reguliatoriai. Tų reguliatorių koordinačių sistemos pradžia – jų konteinerio kairysis viršutinis kampas. Matavimo vienetas pagal nutylėjimą geometrinėse savybėse - tvipas (twip) nepriklauso nuo monitoriaus galimybių. 567 tvipai atitinka vienam centimetrui popieriuje. Galima pereiti ir į kitus, didesnius matavimo vienetus pakeitus savybę Scale Mode (Mastelio režimas) iš Twip į Pixel, o taip pat centimetrus ar milimetrus. Pavyzdys. Formoje keturi mygtukai ir etiketė, kurios padėtį valdysime tais mygtukais. Tam mygtukams rašysime tokias procedūras: Private Sub Command1_Click() Label1.Left = Label1.Left - 10 End Sub Private Sub Command2_Click() Label1.Left = Label1.Left + 10 End Sub Private Sub Command3_Click() Label1.Top = Label1.Top + 10 End Sub Private Sub Command4_Click() Label1.Top = Label1.Topt - 10 End Sub 6 Užduotis Etiketė “Bijau pelių”, ją bakstelėjus pele, keičia savo vietą. 7 Užduotis Formoje mygtukai, etiketės. Bet kurį objektą palietus pele kažkurioje formos vietoje turi atsirasti užrašai “objekto aukštis lygus …, plotis - …” 8 Užduotis Formoje etiketės įvairiose vietose. Paspaudus mygtuką “Etiketės, išsirikiuokit” etiketės išsirikiuoja viename aukštyje ir iš eilės (be tarpo). Programa turi būti universali – projektuojant pakeitus etikečių dydžius ir padėtį ji turi veikti. 9 užduotis Formoje etiketė. Sukurti įvykių procedūrą, kuri keičiant formos dydį visada palaikytų etiketę formos centre pagal plotį. Patarimas. Skaičiuojant grafines koordinates rezultatas turi būti sveikas. Skaičiaus pavertimą sveiku galima atlikti funkcija Int. Pavyzdžiui, a=int(b), kur a – sveikoji b dalis. Spalvinės savybės Daugelis objektų turi spalvas nusakančias savybes: BackColor - fono spalva; ForeColor - teksto ar piešinio spalva. Projektavimo stadijoje spalvinę savybę nusakyti paprasta, nes ją nustatant savybių lange atsiranda pasirenkamų spalvų įrankių paletė. Sudėtingiau keisti spalvas programą vykdant. Spalvos nusakymui naudojami long tipo sveiki skaičiai, susidedantys iš 4 baitų. Trys iš jų nusako pagrindinių spalvų (raudonos, žalios, mėlynos) intensyvumą. Šešioliktainėje sistemoje - tai konstantė &HBBGGRR&, kur BB, GG ir RR - spalvų intensyvumai. Didžiausiam intensyvumui atitinka 255, vidutiniam - 80. Pavyzdžiui, &HFFFFFF& nusako baltą, &H808080& - pilką, &HFF& - raudoną spalvas ir pan. Tačiau toks spalvų nusakymas nepatogus. Patogiau vartoti RGB funkciją, turinčią tris argumentus, atitinkančius pagrindinių spalvų intensyvumą. Pavyzdžiui, Form1.BackColor = RGB(0,0,64) daro formos foną tamsiai mėlynu. Argumentų reikšmės gali kisti nuo 0 (spalvos nėra) iki 255 (maksimali spalva). Galima vartoti ir Basic’o funkciją QBColor(n), kur n - vienos iš šešiolikos pagrindinių spalvų numeris (pavyzdžiui, 0 - juoda, 4 - raudona ir t. t.). Pavyzdžiui, Form1.BackColor = QBColor(4) daro formos foną raudonu. Pavyzdys. Formoje trys įvedimo laukai, atitinkantys trijų pagrindinių spalvų lygius. Vos pakeitus spalvų stiprumo reikšmes greta esanti etiketė nusidažo nurodytu spalvų mišiniu. Naudosime įvykį Change (pasikeitimas), kuris įvyksta vos pakeitus teksto lauko reikšmę. Teksto į skaičių galime ir neversti. Private Sub Text1_Change() r = Text1 g = Text2 b = Text3 Label1.BackColor = RGB(r, g, b) End Sub Ta pati programa kopijuojama ir kitiems teksto laukams. Žinoma, programa turi šiuos trūkumus: įvedus netinkamus skaičius rasis klaida, programos vykdymo pradžioje etiketės spalva nepriklausys nuo teksto laukuose esančių skaičių. Pirmąjį trūkumą galima ištaisyti naudojant val ir mod funkcijas: r = val( Text1) mod 255 g = val(Text2) mod 255 b = val(Text3) mod 255 10 Užduotis Yra etiketės su tekstais: “Nuo pelės raudonuoju”, “Nuo pelės žaliuoju” ir pan. Bakstelėjus jas pele, etikečių spalva turi atitinkamai keistis. Turi būti mygtukas, atstatantis spalvas 11 Užduotis Teksto lauke surinkus skaičių, jo fono spalva nusidažo to numerio spalva (turima galvoje QBColor funkcijos numeracija), o teksto spalva – trimis skaičiais didesnio numerio spalva. Kadangi čia spalvų numeriai, didesni už 15 neleistini, surinkus skaičių, didesnį už 15 reikia imti jo modulį, naudojant funkciją mod. Pavyzdžiui, Text1 mod 15. 12 Užduotis Formoje paletės etiketė. Jos spalvų nustatymui panaudoti tris teksto laukus trijų pagrindinių spalvų lygiams įvesti. Sukurti etiketes, kurių fono spalvas būtų galima valdyti, pakeitus paletės etiketės spalvą ir po to pele palietus dažomą etiketę. Keletas dažniau naudojamų savybių Loginės savybės Visible (matomas) reikšmių keitimas dažnai naudojamas greitam objekto paslėpimui ar atsiradimui. Loginės savybės Enabled (veiklus) reikšmė paprastai būnna lygi True. Jos reikšmė False naudojama, kai norima kokį nors objektą padaryti neveikiančiu, nes jo veikimas tuo metu būtų beprasmis. Pavyzdžiui, mygtukas, keičiantis šriftą į kursyvą beprasmis, jei tuo metu tas šriftas jau naudojamas. Jei forma neveikli, tai ir visi jos reguliatoriai neveiklūs. Savybė MousePointer (pelės žymeklis) leidžia keisti pelės žymeklio vaizdą, kai jis būna virš to objekto. Yra galimybė naudoti ir savo sukurtą pelės žymeklį. Tam reikia nustatyti savybės MousePointer reikšmę lygią Custom (naudotojo). Tada į savybę MouseIcon įkeliamas nedidelis vaizdelis (geriausia su plėtiniu .ico arba .cur. Savybė Tag (komentarai) leidžia užsirašyti komentarus apie sukurtą objektą. Savybė, nusakanti šriftą, Font pati yra objektas su savo savybėmis. Jos savybės: • Loginė Bold; • Loginė Italic; • Loginė Underline; • Size (sveikas skaičius); • Name (Arial, Symbol ir t.t.). Todėl, pavyzdžiui, norint pakeisti šrifto dydį reikia rašyti: Text1.Font.Size=13 Projektavimo metu šriftas nusakomas dialogu. 13 Užduotis Formoje keli objektai. Pelės žymeklis virš kiekvieno iš jų pasikeičia. Išbandykite įvairias žymeklio formas ir sukurkite savo žymeklius. Vieno mygtuko paspaudimas keičia žymeklį į “Smėlio laikrodį”, kito – žymeklį vėl atstato. VB PROGRAMAVIMO PAGRINDAI VB programų struktūra VB programa vadinama projektu. Ją sudaro ne viena byla. Projekte būna: formos moduliai (plėtinys .FRM) ir programos moduliai (plėtinys .BAS), o kartais ir vartotojo (custom) reguliatoriaus failai .OCX. Projektui būtina viena projekto byla su plėtiniu .VBP, kurioje išvardintos visos projekto komponentės. Formos modulyje aprašyta visa, kas susiję su forma: jos grafiniai elementai, įvykių programos. Programos modulyje - tik Basic programos tekstas. Jis naudojamas, kai būna kelioms formoms bendrų skaičiuojamųjų procedūrų. Iki šiol mūsų programos turėjo tik vieną formą ir tuo pačiu vieną formos modulį, kuriame buvo ir visos įvykių procedūros. Tolimesniam darbui prireiks daugiau formų, o taip pat programos dalių, nesurištų su įvykiu ar forma - bendrųjų procedūrų (common procedures). Tokio bendrosios procedūros kuriamos atskiruose programiniuose moduliuose. Kiekvienas programinis ar formos modulis gali turėti žemiau išvardintas dalis. Deklaracijos (declarations). Būtent čia galite apibrėžti konstantes, tipus, kintamuosius. Įvykių procedūros galimos tik formų moduliuose. Bendros procedūros. Programos modulyje visos procedūros yra bendros ir prieinamos visoms formoms. Modulių dalys lengvai surandamos programos teksto lange. Sukurto VB projekto įdiegimas Jei savo projekto neplanuojate perduoti kitam vartotojui, galima kiekvieną kartą naudotis VB programine aplinka. Priešingu atveju pirmiausia reikia sukurti .exe failą meniu komanda File/Make Project.exe. Tačiau norint perkelti projektą į kitą kompiuterį dar reikia daugelio papildomų failų (jie užima virš 1MB) pagalbos. Geriausia sukurti instaliacinį diskelį ar instaliacinį kompaktinį diską. Tam paprasčiausia naudoti įdiegimo vedlį (Setup Wizard). Jis pats automatiškai nustato, kokius failus reikia įjungti į instaliacinę programą, tuos failus suspaudžia bei kopijuoja į instaliacinį diskelį. Įdiegimo vedlys paleidžiamas paleidžiant vykdyti failą Setupwiz.exe iš katalogo \setupkit\kitfil32\, kuris yra Visual Basic instaliavimo kataloge. Vedlys leidžia pasirinkti vieną iš įdiegimo galimybių: • Kurti instaliacinį diskelį (arba kelis jų, jei netelpa viename); • Kurti atskirą įdiegimo katalogą kietame diske, kurį vėliau galima platinti tinklu ar kaip kompaktinį diską; • Platinti įdiegimo programą internetu. Instaliaciniame diskelyje rasime failus: Setup.exe, Setup.lst, Setup1.exe. Setup.exe, kopijuoja failus, išvardintus faile setup.lst ir paleidžia vykdyti pagrindinę įdiegimo programą Setup1.exe. Projekto pradžia ir pabaiga Pradžioje (at startup) pakraunama ir parodoma pirmoji forma, vykdoma procedūros Form1_Load procedūra. Paprastai skaitinių kintamųjų reikšmės pradžioje lygios nuliui, tačiau bendrai jų pradinių reikšmių uždavimą reikėtų rašyti Form1_Load procedūroje, (pavyzdžiui, eilutę s=0 Norint, kad pradžioje būtų kraunama kita forma, reikia meniu komandoje Project/ProjectProperties pasirinkti kitą pradinę formą (Start Up Object). Projektas visai baigiamas atlikus End. Kintamieji Galite kintamųjų ir nedeklaruoti: pirmą kartą kokį nors vardą panaudojus programoje VB pati sukuria tokį kintamąjį. Deklaruojant naudojama tokia sintaksė: Dim kintamojo vardas [As tipas]. Praleidus As, o taip pat jei kintamasis visai nedeklaruojamas, kintamojo tipas tampa Variant. Šis lankstus duomenų tipas tinka saugoti įvairiausiems duomenims: skaičiams, teksto eilutėms, laikui, datoms. VB automatiškai prisitaiko prie saugomų duomenų, juos reikiamai konvertuoja. Pavyzdžiui: Dim Dydis ‘deklaravome varijantinį duomenį Dydis=”17” ‘Dydyje laikoma dviejų simbolių eilutė Dydis=Dydis-15 ‘Dydyje laikomas skaičius 2 Dydis=”U”&Dydis ‘‘Dydyje laikoma dviejų simbolių eilutė U2” Naudojant Variant duomenų tipą kyla ir pavojų, pavyzdžiui, naudojant operatorių + . Jis naudojamas tiek skaičių sudėčiai, tiek teksto eilučių sujungimui, todėl čia gali gautis nesusipratimų. Norint priskirti kintamajam konkretų tipą, deklaruojamas vienas iš šešių tipų: Tipo vardas Aprašymas Intervalas Integer Sveikas skaičius, 2 baitai -32,768 iki 32,767 Long Sveikas skaičius, 4 baitai -2.000000000 iki 2000000000 Single Realus skaičius, 4 baitai -3E38 iki –1E-45 ir 1E-45 iki 3E38 Double Realus skaičius, 8 baitai -1E308 iki –5E-324 ir 5E-324 iki 1E308 Currency Realus skaičius fiksuotu ženklų skaičiumi po kablelio, 8 baitai -9E14 iki 9E14 String Simbolių eilutė Iki 65,500 simbolių Masyvai deklaruojami prie kintamojo vardo deklaruojant pridedant skliausteliuose įrašytą masyvo dydį. Daugiamačiams masyvams nurodomi keli skaičiai. Pavyzdžiui: Dim A(10) Global Kordinates (100,2) As Integer Kintamųjų prieinamumas ir egzistavimo laikas Lokaliniai kintamieji prieinami tik savo procedūroje. Jie ir deklaruojami savo procedūroje. Modulio lygio kintamieji prieinami visoms procedūroms modulyje. Jie deklaruojami teiginiu Dim modulio deklaracijų (Declarations) sekcijoje. Globalūs kintamieji prieinami visų formų visoms procedūroms. Jie taip pat deklaruojami bet kurio programinio modulio deklaracijų sekcijoje, tačiau ne teiginiu Dim, o teiginiu Global. Lokalūs kintamieji, deklaruoti su Dim, egzistuoja tik tol, kol vykdoma ta procedūra. Yra galimybė tokius kintamuosius išsaugoti iki kito procedūros vykdymo. Tam reikia kintamąjį aprašyti naudojant Static. Pavyzdžiui, norėdami skaičiuoti, kiek kartų paspaustas mygtukas, rašysime tokią procedūrą: Sub Button1_Click () Static Skaitliukas Skaitliukas = Skaitliukas + 1 End Sub Taip pat galime formos General Declarations dalyje jį aprašyti, kad jis taptų globalus formai: Dim s as integer. Pavyzdys. Formoje kelios etiketės. Sukurti įvykių procedūrą, kuri keičiant formos dydį proporcingai keistų reguliatorių padėtį formoje. Tam reikia pačioje programos pradžioje – įvykus įvykiui Form_Load susiskaičiuoti santykinę etiketės padėtį formoje, po to ją atsiminti, o pasikeitus formos dydžiui (formos įvykis Resize) perskaičiuoti etiketės padėties koordinates. ‘Modulio kintamuju aprasas Declarations dalyje Dim HSantykis Dim WSantykis Private Sub Form_Load() WSantykis = Label1.Left / Form1.Width HSantykis = Label1.Top / Form1.Height End Sub Private Sub Form_Resize() Label1.Top = Int(Form1.Height * HSantykis) Label1.Left = Int(Form1.Width * WSantykis) End Sub 14 Užduotis Etiketės, kuriose rodoma po vieną raidę, išmėtytos atsitiktinai. Jas baksnojant pele, etiketės susirenka į eilutę (kaip spausdinimo mašinėlėje). Paliestos etiketės išnyksta. Paruoškite šio projekto instaliacinį diskelį. Patarimas. Reikia įsivesti kintamąjį, kuriame būtų atsimenama paskutinės išsirikiavusios etiketės dešiniojo krašto koordinatės. Procedūros ir funkcijos Procedūros gali būti Sub arba Function tipo. Pastaroji grąžina reikšmę. Sintaksė: Sub procedūros vardas (argumentų sąrašas) Procedūros teiginiai End Sub Argumentų sąrašas susideda iš argumentų vardų, atskirtų kableliais. Kiekvieno argumento sintaksė: [ByVal] kintamojo vardas [As tipas] Analogiška Function sintaksė: Function procedūros vardas (argumentų sąrašas) Funkcijos teiginiai End Function Formos procedūros yra privačios (privat) tai formai: galite jomis naudotis tos formos programose. Tačiau kitose formose ir programiniuose moduliuose jos neprieinamos. Procedūros programiniuose moduliuose yra viešos (public), jomis galima naudotis visame projekte. Kartais norima sukurti privačias procedūras ir programiniuose moduliuose, kad jos nesipainiotų dėl vardų panašumo. Tada reikia prieš procedūros vardą rašyti Privat. Pavyzdžiui, Privat Sub Palyginimas (). Standartinės VB funkcijos Aptarsime kelias iš jų. Abs(a) grąžina absoliutinę skaičiaus reikšmę. Asc(a) grąžina pirmojo a simbolio numerį. Pavyzdžiui Asc("Abba") grąžina 65. Atn(a) – arktangentas. Cos(a) – kosinusas. Exp(a) – eksponentė. Int(a) – palieka sveikąją a dalį. InputBox (Klausiamasis tekstas, Įvedimo dėžutės pavadinimas, pradinis tekstas įvedimo lauke, dėžutės x koordinatė, dėžutės y koordinatė). Vykdant atidaro įvedimo dialogo dėžutę. Funkcijos reikšmė, jei paspaudė OK mygtuką, lygi įvestam tekstui. Pavyzdys. Formoje turime etiketę message. Įvykdžius mygtuko programėlę: Private Sub OK_Click() Dim userMsg As String userMsg = InputBox("What is your message?", "Message Entry Form", "Enter your messge here", 500, 700) If userMsg "" Then message.Caption = userMsg Else message.Caption = "No Message" End If End Sub Pasirodys įvedimo dėžutė, kurios pranešimą įvedus ir paspaudus OK, formos etiketėje pasirodys įvestas pranešimas. Left(S,l) – grąžina l pirmųjų eilutės S simbolių. Len(S) – grąžina eilutės S simbolių skaičių. Log(a) – natūrinis logaritmas. Mid(s,start,ilgis) – grąžina eilutės S ilgis simbolių pradedant start. MsgBox(Prompt, Style Value, Title) – atidaro pranešimo dėžutę, kurioje jau nustatyta pradinė pranešimo reikšmė prompt ir dėžutės užrašas title. Style value reikšmės leidžia keisti dėžutės stilių: 0 OK mygtukas 1 OK ir Cancel mygtukas MsgBox reikšmės po dėžutės uždarymo: 1 Paspaustas OK mygtukas 2 Paspaustas Cancel mygtukas Right – funkcija, analogiška left. Rnd – atsitiktiniai skaičiai tarp 0 ir 1. Sin(a) – sinusas. Sqr(a) – kvadratinė šaknis. Str(a) – verčia skaičių simbolių eilute. Tan(a) – tangentas. Timer – grąžina sekundžių, praėjusių nuo vidurnakčio, skaičių. Val(S) – verčia simbolius į skaičių (jei sutikamas neišverčiamas simbolis, tolimesnis vertimas sustoja). Komentarai. Programos eilutės Tekstas po apostrofos simbolio ‘ traktuojamas kaip komentarai. Kiekvienas teiginys atitinka vienai eilutei, tačiau eilutėle gali būti ir daugiau teiginių, skiriant juos dvitaškiais. Objektų savybės rašomos objekto ir savybės vardus skiriant tašku. Pavyzdžiui, Text1.Text=Text2.Text . Jei naudojamės kitos formos objekto savybe, reikia nurodyti tos formos vardą, skiriant jį nuo objekto vardo šauktuku. Pavyzdžiui, Form2!Text1.Text=Text2.Text . Visi VB objektai turi pagrindinę savybę, kurios galima ir nenurodyti atliekant operacijas su tuo objektu. Tai objekto reikšmė Value. Pavyzdžiui, Text1=Text2 . Kai kurių objektų reikšmių lentelė: Objektas Reikšmė Check box Value Scroll Bar Value Image Picture Label Caption Line Visible Option Button Value Picture Box Picture Shape Shape Text Box Text Timer Enabled Pagrindiniai VB programos teiginiai If sąlyga Then teiginys Jei sąlygą ar teiginį sudaro ne viena eilutė, vartojamos kitokios if konstrukcijos. If sąlyga Then Teiginiai EndIf If sąlyga Then Teiginiai Else Teiginiai EndIf Yra penkios ciklo konstrukcijos. Pagrindinė: For Skaitliukas = pradžia To Pabaiga [Step pokytis] Teiginiai Next Skaitliukas Pavyzdžiui, For i=1 to 10 s=s+1 Next i Dar yra tokios ciklų konstrukcijos: Do While sąlyga Teiginiai Loop Do Teiginiai Loop While sąlyga Do Until sąlyga Teiginiai Loop Do Teiginiai Loop Until sąlyga Iš ciklų vidaus iššokama naudojant teiginius Exit For arba Exit Do. Do While sąlyga Teiginiai Loop Do Teiginiai Loop While sąlyga SUDĖTINGESNI REGULIATORIAI. REGULIATORIŲ MASYVAI Chronometras Chronometras (timer), kurio piktograma , iš tikrųjų primena chronometrą gerokai skiriasi nuo kitų reguliatorių. Vykdymo metu jis nematomas, tad ir jo dydis nekeičiamas - jis tiesiog neturi kitiems reguliatoriams įprastų geometrinių savybių Height ir Width. Chronometras reguliariais laiko intervalais, kurių ilgį (milisekundėmis) nusako savybė Interval, kartoja įvykius Timer. Dar viena jo savybė - Enabled (veiklus). Jei Enabled = True, chronometras iš karto pradeda kartoti laiko įvykius, priešingu atveju jis nieko neatlieka. Chronometras - savotiška programos širdis, nes jis pats, be vartotojo įsikišimo, sukelia įvykius Timer. Toki įvykiai dažniausiai naudojami grafinių objektų judinimui, animacijai, objektų mirgėjimui sukelti. Jei norime, kad chronometras sukeltų tik vieną įvykį (pavyzdžiui, perspėtų, kad skirtas testui laikas baigėsi), reikia į įvykio Timer procedūros pabaigą įdėti chronometro sustabdymą: Timer1.Enabled=False Pavyzdys. Norime, kad forma (Form1) lėtai išslinktų į dešinę už ekrano. Tam sukuriame formoje chronometrą Timer1, nustatome jo savybę Interval lygią 100 (milisekundžių) ir parašome tokią įvykio Timer procedūrą: Sub Timer1_Timer () Form1.Left = Form1.Left + 20 End Sub Žinoma, chronometrų uždavinyje gali būti ir daug. Pavyzdys. (Šviesos muzika) Norime, kad spalvota etiketė mirksėtų kokiu nors sudėtingu ritmu (2 sek. šviečia, pusę sekundės – ne, 1 sek šviečia, 3 sek. ne ir t.t.). Kuriame 4 chronometrus: Timer1, Pauze1, Timer2, Pauze2 ir vieną spalvotą etiketę Label1. Projektuodami atliekame tokius reguliatorių savybių pakeitimus: Timer1 savybė Interval=2000, Pauze1 savybė Interval=500, Timer2 savybė Interval=1000, Pauze2 savybė Interval=3000, Pauze1 savybė Enabled=False, Timer2 savybė Enabled=False, Pauze2 savybė Enabled=False. Timer1 savybė Enabled lieka lygi True. Rašome tokias įvykių procedūras: Sub Timer1_Timer () Label1.Visible = False Pauze1.Enabled = True Timer1.Enabled = False End Sub Sub Pauze1_Timer () Label1.Visible = True Timer2.Enabled = True Pauze1.Enabled = False End Sub Sub Timer2_Timer () Label1.Visible = False Pauze2.Enabled = True Timer2.Enabled = False End Sub Sub Pauze2_Timer () Label1.Visible = True Timer1.Enabled = True Pauze2.Enabled = False End Sub Chronometrų veikimą grafiškai galėtume iliustruoti taip: Matome, kad vardu Timer vadinamas ir reguliatorius Timer,ir jo įvykis Timer. Be to dar yra funkcija Timer, naudinga matuojant laiką. Ji tiesiog rodo laiką sekundėmis nuo vidurnakčio. Todėl naudojant žodį Timer reikia nesusipainioti. Pavyzdys. Sukurkime tokią laiko matavimo programą. Formoje mygtukas su užrašu “Start” ir kitas mygtukas su užrašu “Stop”. Taip pat yra įvedimo laukas vardu “Laikas” laikui tarp šių mygtukų paspaudimų rodyti. Sub Start_Click () StartLaikas = Timer End Sub Sub Stop_Click () Laikas.Text = Timer - StartLaikas End Sub Čia kintamasis turi būti aprašytas už įvykių procedūrų ribų – Declarations dalyje: Dim StartLaikas As Long Pavyzdys. Du strypai įvairiais greičiais nuolatos juda aukštyn ir žemyn, atsimušinėdami nuo formos viršaus ir apačios. Chronometrui savybė Interval nustatoma lygi 50 milisekundžių. d1 ir d2 – modulio kintamieji, nusakantieji, per kiek pasikeis vienos ar kitos etiketės padėtis (savybė Top). Dim d1, d2 As Integer Private Sub Form_Load() d1 = 26 d2 = -19 End Sub Private Sub Timer1_Timer() Label1.Top = Label1.Top + d1 Label2.Top = Label2.Top + d2 If Label1.Top Form1.Height - 400 - Label1.Height Then d1 = -d1 If Label2.Top Form1.Height - 400 - Label2.Height Then d2 = -d2 End Sub 15 Užduotis Sukurti formą, kuri po tam tikro laiko pati išnyktų. 16 Užduotis Patobulinti pavyzdį su vertikaliai judančiais strypais taip, kad jie judėtų įstrižai įvairiomis kryptimis ir atsimušinėtų. 17 Užduotis Sukurti langą, kurio dydis ir spalvos pulsuotų. 18 Užduotis Sukurti formą, kurioje raidės “atkeliautų” iš atsitiktinių vietų į savo tikrąsias vietas. Pavyzdžiui, pradžioje: judėjimo gale: J G J Ė G A A Ė 19 Užduotis Keletas strypų įvairiais greičiais nuolatos juda aukštyn ir žemyn, atsimušinėdami nuo formos viršaus ir apačios. Reikia rasti tarpą ir pro jį “prašauti” iš valdomos patrankėlės. Patrankėlės vertikalus judesys valdomas dviem mygtukais. Šūviui – mygtukas “Ugnis”. Sėkmė ar nesėkmė fiksuojama grafiškai (pavyzdžiui, šūviui pasisekus ant dešinės sienos žybteli raudonas taškas, o nepasisekus – patrankėlė susitraukia). Matuojamas laikas iki sėkmingo šūvio (naudoti funkciją Timer). Slinkties juosta Slinkties juostos gali būti tiek horizontalios (HScrollBar), tiek vertikalios (VScrollBar). Jų piktogramos atrodo atitinkamai, kaip ir . Įpratome jas matyti greta langų ar sąrašų, naudojamas traukyti vaizdą ar sąrašą, jei jis lange netelpa. Tačiau slinkties juostos naudojamos ir kaip įvedimo įrenginiai, kai reikia parinkti dydį duotame intervale (temperatūrą, kokybės įvertį balais grožio konkurse ir pan.). Savybės. Slinkties juostos įvestas dydis - savybė value - priklauso nuo slankiklio padėties. Kraštinėje kairėje padėtyje value reikšmė lygi min, dešinėje - max. Min ir max - tai slinkties juostos savybės. Pagrindinis įvykis: change (pasikeisti). Jis įvyksta, kai slankiklis pajudinamas ir atleidžiamas arba vartojamos šuolių rodyklės, esančios juostos galuose. Pavyzdys, kuriame trys slinkties juostos tolygiai keičia teksto lauko spalvą Formoje sukursime reguliatorius, turinčius nurodytas savybes. Objektas Jo vardas Savybė Savybės reikšmė Pirma slenkama juosta SJ1 Max 255 Min 0 Antra slenkama juosta SJ2 Max 255 Min 0 Trečia slenkama juosta SJ3 Max 255 Min 0 Teksto laukas TL Text (tuščia) Visoms juostoms bendros įvykių procedūros. Sub SJ1_Change () TL.BackColor = RGB(SJ1.Value, SJ2.Value, SJ3.Value) EndSub Sub SJ2_Change () TL.BackColor = RGB(SJ1.Value, SJ2.Value, SJ3.Value) EndSub Sub SJ3_Change () TL.BackColor = RGB(SJ1.Value, SJ2.Value, SJ3.Value) EndSub Naudojome spalvų “maišymo” procedūrą RGB, kurios trijų argumentų reikšmės, atitinkančios trijų pagrindinių spalvų intensyvumą, kinta intervale 0 - 255. Anksčiau nagrinėtą šviesos muzikos pavyzdį galime patobulinti įvesdami slinkties juostas kiekvieno chronometro intervalui vykdymo metu keisti. Taip galėsime keisti “muzikos”ritmą. Taip atrodytų vienos iš slinkties juostų įvykių procedūra: Sub VScroll1_Change () Timer1.Interval = VScroll1.Value End Sub 20 Užduotis Dvi slinkties juostos (vertikali ir horizontali) leidžia keisti užpildyto stačiakampio kraštinių ilgius. Mygtukais keičiamos stačiakampio spalvos, o stačiakampio kraštinių ilgiai skaitmenine forma pateikiami šalia slenkamųjų juostų. 21 Užduotis Rodomas keičiantis spalvas (mirksintis) užrašas. Turi būti galimybė panaudojant slenkamąsias juostas, keisti mirgėjimo dažnumą bei užrašo dydį. Reguliatorių masyvai Iki šiol mokėmės kurti pavienius reguliatorius. Tuo tarpu kartais vienodų reguliatorių būna daug - dešimtys ir šimtai. Pavyzdžio toli ieškoti netenka - pažvelkite į Windows žaidimą Minesweeper (Minų ieškotojas). Tokiu atveju reikėtų kiekvienam reguliatoriui kurti daugybę įvykius apdorojančių procedūrų. Paprastai tokių reguliatorių funkcijos gana vienodos. Tokiais atvejais, kad palengvinti programos kūrėjo darbą, įvedami reguliatorių masyvai. Tai to paties tipo ir vardo reguliatorių grupės. Jų įvykių procedūros irgi tos pačios, tačiau savybės gali skirtis. Reguliatorių masyvai naudotini tada, kai keli reguliatoriai turi tas pačias įvykių procedūras, panašiai kaip kad ankstesniame spalvų maišymo pavyzdyje. Ten užtektų vienos procedūros: Sub SJ_Change (Index as Integer) TL.BackColor = RGB(SJ(1).Value, SJ(2).Value, SJ(3).Value) EndSub Kiekvienas reguliatorių masyvo narys turi savo indeksą. Tai savybė Index. Todėl reguliatorių masyvo įvykių procedūros automatiškai įgauna parametrą Index, rodantį, kuriam masyvo elementui įvyko įvykis. Panašiai kaip ir kintamųjų masyvams paprastai jis prasideda nuo nulio. Pavyzdžiui, ankstesniame pavyzdyje reguliatorių masyvo SJ įvykio Change procedūra turėjo parametrą Index, tik mes juo nesinaudojome. Tačiau dažniausiai indekso parametras įvykių procedūrose naudojamas. Yra trys reguliatorių masyvų sukūrimo projektuojant būdai: • kopijuoti esamą reguliatorių, naudojant įprastas operacijas Copy ir Paste; taip kopijuojant klausiama, ar norite kopijuodami kurti reguliatorių masyvą (Reikia atsakyti teigiamai); • priskirti tą patį vardą keliems reguliatoriams; • pakeisti savybės Index reikšmę į nelygią nuliui. Dažnai naudojamas pirmasis, kopijavimo būdas. Pavyzdys. Visiems žinomas žaidimas “Laivų mūšis”. Jame - dvi lentelės: priešininko ir savo laivams. Sukurkime priešininko laivų lentelę. Sub Label2_Click (Index As Integer) Label4.BackColor = Label2(Index).BackColor Label4.Caption = Label2(Index).Caption End Sub Sub Label1_Click (Index As Integer) Label1(Index).Caption = Label4.Caption Label1(Index).BackColor = Label4.BackColor End Sub Čia turime du reguliatorių masyvus: Label1 ir Label2. Keičiame tiek langelių spalvą, tiek užrašą. Anksčiau nagrinėtame šviesos muzikos pavyzdyje norint padaryti sudėtingesnį ritmą (daugiau chronometrų) būtų tikslinga naudoti chronometrų ir slinkties juostų masyvus. Pavyzdys. Formoje tekstas, kurio raidės pradžioje nematomos. Kas sekundę pasirodo atsitiktinė teksto raidė, kol galų gale visas tekstas matomas. Taip pat formoje matomas laikrodis, rodantis, kiek sekundžių praėjo nuo žaidimo pradžios. Žaidimo tikslas – kuo anksčiau atspėti nepilnai parodytą tekstą. Sakysime, rodomas reklaminis tekstas “Vilniaus prekyba” (15 raidžių). • Sukuriame etikečių po vieną raidę masyvą, kurio indeksas keisis nuo 0 iki 14. • Nustatome masyvo etiketėms reikiamas raides ir pradžioje darome jas nematomomis (savybę Visible pilygindami False). • Įkeliame į formą chronometrą Timer1, kurio savybę interval nustatome lygią 1000 milisekundžių. • Įkeliame į formą etiketę sekundžių skaičiaus rodymui bei etiketę užrašui “sek.” Atsitiktinį masyvo indeksą nario, kuris turės pasidaryti matomas, generuosime naudodami funkciją rnd, kuri duoda tolygiai pasiskirsčiusį atsitiktinį skaičių tarp 0 ir 1. Tam, kad iš naujo vykdant programą gautųsi kita atsitiktinių skaičių seka, programos pradžioje reikia atlikti procedūrą Randomize. Ji pakeičia taip vadinamą generatoriaus sėklą. Private Sub Form_Load() Randomize End Sub Private Sub Timer1_Timer() Static s 1: ‘ funkcija Int atskiria sveikąją argumento dalį a = Int(Rnd * 15) ‘ Jei raidė buvo nematoma, tai ją darome matoma, ‘ bet jei jau matoma einame generuoti naujo atsitiktinio numerio If Label1(a).Visible = False Then Label1(a).Visible = True Else GoTo 1 End If ‘ Skaičiuojame sekundes s = s + 1 Label2 = s ‘ Parodžius visas raides chronometras stabdomas If s = 15 Then Timer1.Enabled = False End Sub Matome žaidimo vaizdą po 8 sekundžių. 22 Užduotis Formoje 10x10 kvadratėlių mozaika iš etikečių. Paliesdami pele galime keisti kvadratėlių spalvą, nupiešdami piešinį. Spalvos keičiamos “padažius teptuką” į spalvų paletę. Turi būti mygtukas mozaikos valymui. Patarimas. Spalvos atsiminimui naudoti Long tipo modulio kintamąjį. 23 Užduotis Horizontaliai išdėstyta 10 teksto laukų. Virš kiekvieno iš jų – stulpelis, kurio aukštis automatiškai tampa proporcingas teksto lauke įvestam skaičiui. Tai savotiška stulpelinė diagrama, kur į teksto laukus įvedus skaičių, diagrama iš karto reaguoja. 24 Užduotis Sukurkite laikrodį, kurio skaitmenys (nuo 1 iki 12) išdėstyti ratu. Kas sekundę ratu bėgant keičiasi skaičiaus spalva. 25 Užduotis Formoje atsiranda 5x5 atsitiktinių skaičių nuo 1 iki 25 lentelė. 4 5 6 24 13 16 11 3 23 12 15 25 1 21 14 17 10 20 2 22 18 9 19 7 8 Testuojamas asmuo turi eilės tvarka pele nurodyti langelius. Visų skaičių rodymo pabaigos laikas fiksuojamas. Turi būti mygtukas skaičių sumaišymui. Jei laikas virš 40 sek. – asmens psichika sulėtėjusi. Patarimas. Skaičių sumaišymui naudoti daugkartinį dviejų atsitiktinių masyvo narių sukeitimą vietomis. Reguliatorių masyvo elementų kūrimas vykdant programą Dažnai reguliatorių masyvo elementų skaičius projektuojant nėra tiksliai žinomas. Pvz. dažnai žaidimuose žaidėjas pats gali pasirinkti langelių, mygtukų skaičių ir pan. Vykdant programą reguliatorių masyvo elementus galima papildyti ar pašalint naudojant teiginius Load ir Unload: Load Reguliatoriaus vardas (indeksas) Unload Reguliatoriaus vardas (indeksas) Žinoma, bandymas įkelti elementą, kurio indeksas jau yra, sukels klaidą. Įkeliant dauguma objekto savybių kopijuojama iš egzistuojančio elemento su žemiausiu indeksu (paprastai 0). Tik Index ir Visible savybės keičiasi. Paprastai įkeltasis elementas pradžioje nematomas, tad reikia savybę Visible padaryti lygia True. Negalima iškelti masyvo elementų, sukurtų projektuojant, o ne įkeltų. Pavyzdys. Pradžioje formoje tik du pasirinkimo mygtukai, keičiantieji etiketės spalvą (spalvos numeris atitinka mygtuko numeriui). Vienas mygtukas (Command button) “Pridėti” gali pridėti daugiau pasirinkimo mygtukų, kitas juos paeiliui šalinti. Dim Ind As Integer ‘ Bendras kintamasis, skaičiuojantis sukurtų mygtukų skaičių Private Sub Form_Load() Ind = 1 ‘Pradžioje jis lygus 1 End Sub Private Sub Command1_Click() ‘Prideda vieną pasirinkimo mygtuką Ind = Ind + 1 Load Option1(Ind) Option1(Ind).Top = Option1(Ind - 1).Top + 400 ‘Suskaičiuoja, kur padėti Option1(Ind).Visible = True Option1(Ind).Caption = "Option" & Ind + 1 ‘Keičia jo užrašą End Sub Private Sub Command2_Click() ‘Šalina vieną pasirinkimo mygtuką Unload Option1(Ind) Ind = Ind - 1 End Sub Private Sub Option1_Click(Index As Integer) Label1.BackColor = QBColor(Index) ‘Keičia spalvą pagal pasirinkimo mygtuko numerį End Sub PASIRINKIMO REGULIATORIAI Jungikliai Jungikliai (check boxes) skirti įjungti arba išjungti kokiam nors režimui, keisti būklei ir pan. Piktograma įrankių dėžutėje - . Esant keliems jungikliams jie dirba nepriklausomai vienas nuo kito. Jungiklio būklę rodo savybės Value reikšmė. Įjungtam jungikliui ji lygi 1, išjungtam - 0. Jungikliai, o taip pat pasirinkimo mygtukai gali turėti ne tik užrašus (šalia jungiklio), bet ir vaizdus – savybėse Picture (jungiklio vaizdas jo neįjungus) ir DownPicture (jungiklio vaizdas jį įjungus). Pavyzdys, kuriame du jungikliai keičia teksto lauko šriftą. (Šriftas gali būti tuo pat metu ir pusjuodis, ir kursyvas!). Lentelėje pateikti objektai ir jų keičiamos savybės. Objektas Savybė Savybės reikšmė Teksto laukas Name Tekstas Caption Jungiklių pavyzdys Jungiklis Name Pusj Caption Pusjuodis Jungiklis Name It Caption Kursyvas Jungiklių įvykių procedūros bus tokios. Sub Pusj _Click () If Pusj.Value = 1 Then Tekstas.Font.Bold = True Else Tekstas.Font.Bold = False EndIf End Sub Sub chkIt _Click () If It.Value = 1 Then Tekstas.FontItalic = True Else Tekstas.FontItalic = False EndIf End Sub Natūralu, kad esant daugeliui jungiklių kuriamas masyvas. Pavyzdys. Jungiklių galimybių demonstracinė programa. Formoje trys jungikliai ir šalia – trys etiketės, kurių užrašai atitinkamai: pirmas, antras ir trečias jungiklis. Programa pati turi pademonstruoti visas galimas trijų jungiklių kombinacijas. Tam naudosimės chronometru, kurio intervalas – 1 sek. Sukursime trijų jungiklių masyvą. Aprašysime formos kintamąjį s: Dim s As Integer Private Sub Form_Load() s = 0 ‘tai skaičius, kuriame dvejetaine sistema užkoduota ‘jungiklių kombinacija (pradžioje 000) End Sub Sub Timer1_Timer() j = s For i = 0 To 2 ‘sustato jungiklių padėtis k = j Mod 2 ‘atkoduoja eilinį skirsnį Check1(i).Value = k j = j - k j = j \ 2 Next i s = (s + 1) Mod 8 ‘sekančią kombinaciją End Sub Sub Check1_Click(Index As Integer) ‘ suriša etikečių matomumą su atitinkamų jungiklių padėtimi If Check1(Index) = 1 Then Label1(Index).Visible = True Else Label1(Index).Visible = False End If End Sub 26 Užduotis Formoje - patiekalų pavadinimai ir kainos. Šalia patiekalų - jungikliai, kuriais pasirinkami užsakomi patiekalai. Paspaudus mygtuką “Pasirinktų patiekalų bendra kaina?” turi pasirodyti ta bendra kaina. 27 Užduotis Sukurti jungiklių masyvą darbų temoms pasirinkti. Studentų ir darbų tiek pat. Turi būti ribota galimybė rinktis: vienam studentui - vienas darbas. Ankstesnis pasirinkimas gali būti panaikintas. Pasirinkimo mygtukai Pasirinkimo mygtuko (option button) piktograma įrankinėje - . Pasirinkimo mygtukai kaip taisyklė grupuojami. Grupėje iš daugelio galime pasirinkti tik vieną parinkimo mygtuką, nes jie dirba priklausomai vienas nuo kito. Pasirinkimo mygtuko būklę rodo savybės Value reikšmė. Įjungus mygtuką ji lygi True, išjungus - False. Grupėje tik vieno mygtuko savybės Value reikšmė būna lygi True; kitų reikšmės automatiškai tampa lygios False. Tiek pasirinkimo mygtukai, tiek jungikliai VB5 versijoje jau turi ir vaixdus - savybes Picture ir DownPicture. Visi pasirinkimo mygtukai, esantieji tiesiogiai formoje, sudaro vieną grupę - Option1 ir Option2). Jei kuriame kitą grupę, esančią ne tiesiogiai formoje, ją reikia įterpti į rėmą (frame) arba paveikslą (picture box) . Pavyzdžiui, mūsų paveikslėlyje mygtukai Option3 ir Option4 įterpti rėme Frame1. Tokiu atveju reikia būtinai pradžioje kurti rėmą, ir tik po to jame - parinkimo mygtukus (išskyrus rėmą). Matome puikią iliustraciją tėvų ir vaikų santykiams objektų pasaulyje. Visi formos reguliatoriai yra jos vaikai. Rėmas yra mygtukų Option3 ir Option4 konteineris, tėvas, tačiau pats yra formos vaikas. Kuo praktiškai pasireiškia tėvystės santykiai? Pirma, vaikai naudoja tėvo kordinačių sistemą (Option3 kordinatės skaičiuojamos atžvilgiu kairiojo viršutinio rėmo kampo, o Option1 - atžvilgiu kairiojo viršutinio formos kampo). Antra, judinant objektą - tėvą, su juo atitinkamai juda ir objektai - vaikai. 28 Užduotis Balsuotojas renka prezidentą ir savivaldybių partiją. Pasirinkęs vieną iš balsavimo alternatyvų, paspaudžia mygtuką “Pasirinkau”. Šis sprendimas įsimenamas balsavimo rezultatų rodikliuose. Pradžioje balsavimo rezultatai turi būti lygūs nuliui. Administratorius, įvedęs slaptažodį, gali pasižiūrėti į balsavimo rodiklius, kurie balsuojantiems nematomi. Vaizdas balsuojant Vaizdas peržiūrint rezultatus Sąrašas Sąrašas (list box) taip pat skirtas parinkti vienai (kartais ir kelioms) iš sąrašo alternatyvų. Jo piktograma ir vaizdas - pav. Matome, kad pasirinkta antroji alternatyva. Slenkamoji juosta šalia sąrašo atsiranda automatiškai, jei sąrašo pozicijoms maža vietos. Sąrašo atmaina - kombo dėžutė (combo box). Kombo dėžutėje virš sąrašo yra teksto laukas, todėl galima arba pasirinkti alternatyvą iš sąrašo, arba įvesti alternatyvos tekstą. Kombo dėžutės piktograma ir vaizdas. Sąrašo metodai. Pradžioje sukurtas sąrašas - tuščias, pozicijos neužpildytos. Naują poziciją prideda (ją užpildo) metodas AddItem (pridėti poziciją), turintis parametrą - pozicijos tekstą. Pavyzdžiui, eilutės: Sar.AddItem “Vokietija” Sar.AddItem “Anglija” užpildys dvi sąrašo Sar pozicijas. Metodas RemoveItem (pašalinti poziciją) pašalina poziciją, kurios numeris nurodomas po metodo einančiame parametre. Pavyzdžiui, Sar.RemoveItem 0 pašalins iš ankstesnio sąrašo Vokietiją, nes pozicijos numeruojamos pradedant 0. Clear metodas išvalo sąrašą. Pasirinktos pozicijos tekstą rasime sąrašo savybėje Text. Pavyzdys. Parašykime tokią sąrašo įvykio procedūrą. Sub Sar_Click () If Sar.Text = “Anglija” then Text1.Text = “Anglijos sostinė - Londonas” EndIf EndSub Tada pasirinkus sąrašo eilutę “Anglija”, teksto lauke Text1 pasirodys informacija apie šalį. Pasirinktos pozicijos numerį galime rasti sąrašo savybėje ListIndex. Jei jis lygus -1, nepasirinkta nei viena pozicija. Savybė List parodo bet kurios pozicijos turinį, savybė ListCount - pozicijų skaičių. Reikia atkreipti dėmesį, kad sąrašo reguliatorius esant reikalui gali būti ir kelių stulpelių, numatyta galimybė pasirinkti iš karto ne vieną, o kelias sąrašo pozicijas. Tam naudojama savybė Multiselect. Pavyzdys. Sukurkime pav. pavaizduotą formą su sąrašu ir kitais reguliatorius. Lentelėje nurodytos keičiamos reguliatorių savybės. Objektas Savybė Jos reikšmė Teksto laukas Name Txt Text (Tuščia) Sąrašas Name Sar Etiketė vardų skaičiui Name Etv Caption (Tuščia) Pridėjimo mygtukas Name Prmyg Caption Pridėti Panaikinimo mygtukas Name PanMyg Caption Panaikinti Rašykime įvykių procedūras. Sub PrMyg_Click () Vardas = Txt.Text Sar.AddItem Vardas Txt.Text = “” Etv.Caption = Sar.ListCount EndSub Sub PanMyg_Click () Dim Ind As Integer Ind = Sar.ListIndex If Ind >=0 then Sar.RemoveItem Ind Etv.Caption = Sar.ListCount Else Beep ‘Garsas End If EndSub Forma Forma irgi objektas, kurį turime jau projektavimo pradžioje. Ji turi kelias tik jai būdingas savybes. Savybė BorderStyle (rėmelio stilius) gali turėti šias reikšmes: • None (jokio rėmelio); • FixedSingle (viengubas); • Sizable (keičiamo dydžio – tokia paprastai ir būna); • FixedDouble (dvigubas rėmelis). Savybė MaxButton gali turėti reikšmes: • True (dešiniame viršutiniame formos kampe esantis formos maksimizavimo mygtukas yra); • False (to mygtuko nėra). Analogiška savybė – MinButton, valdanti minimizavimo mygtuko buvimą. Svarbiausi įvykiai: Load – forma įkeliama; Activate – forma tampa aktyvia; Resize - keičiamas dydis. GRAFINIAI REGULIATORIAI IR METODAI Grafiniai reguliatoriai Kompiuterinės grafikos kūrimui VB naudojami tiek grafiniai reguliatoriai, tiek grafiniai metodai. Pradžioje panagrinėkime keturius VB grafinius reguliatorius: piktogramą (image), paveikslą (picture box), tiesę (line) ir figūrą (shape). Piktogramos, paveikslo, tiesės ir figūros grafinių reguliatorių piktogramos. . Piktograma Piktograma (image) - tai sritis, į kurią galime įkelti vaizdų bylas, turinčias šiuos formatus: bitmap, icon, metafile, JPEG, Gif. Bitmap bylos turi plėtinį .BMP. Tai piešiniai, kurie negali būti didinami ar mažinami, nes saugoma informacija apie kiekvieną pikselį. Icon turi plėtinį .ICO. Tai atskiras Bitmap atvejas, turintis daugiausia 32 x 32 pikselių. Metafile turi plėtinį .WMF. Tai ne pikseliais koduoti paveikslai. Jie gali būti didinami ar mažinami. Paveikslas Paveikslas (picture box) nuo piktogramos skiriasi tuo, kad jame negalima įvesto vaizdo ištempti pagal reguliatoriaus dydį. Jis dažnai tarnauja kaip konteineris kitiems reguliatoriams, tačiau reikalauja daugiau atminties resursų nei piktograma. Tiesė Tiesė (line) nusako tiesės atkarpą, kuriai galite keisti: padėtį, ilgį, spalvą bei stilių. Patogumo dėliai tiesė neturi Left ir Top savybių, o tik tiesės galų kordinates: X1, Y1, X2, Y2. Pirmosios dvi koordinatės atitinka tą tiesės galą, nuo kurio ji pradedama piešti. Figūra Figūra (shape) leidžia piešti: stačiakampį, kvadratą, ovalą, apskritimą, stačiakampį bei kvadratą užapvalintais kampais (žiūr. pav.). Figūros, kurias galima piešti grafiniu reguliatoriumi Shape. Figūroms galite keisti spalvą, permatomumą, užpildymo ir rėmo spalvas, dydžius. Pav. iliustruoja galimus figūrų užpildymo stilius, kurie keičiami, keičiant savybės FillStyle (užpildymo stilius) reikšmes. Užpildymo spalvos keičiamos, keičiant FillColor savybę. Figūrų užpildymo stiliai, kuriuos keičia savybė FillStyle. Tiek tiesė, tiek figūra nereaguoja į jokius įvykius. Tačiau, ką reikėtų daryti, jei tokia reakcija (pavyzdžiui, į pelės paspaudimą) būtina? Tokiu atveju vyksta reguliatoriaus, ant kurio yra tiesė ar figūra, įvykis. Pavyzdžiui, ant formos yra figūros reguliatoriaus variantas – apskritimas, ir reikia reaguoti į įvykį, kai pelės žymeklis pataiko į šio apskritimo vidų. Kadangi galime sužinoti apskritimo koordinates, tai galėsime ir apskaičiuoti, kokios formos koordinatės tenkina įvykio sąlygą. Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) ‘Randame apskritimo diametrą; ‘reguliatoriaus stačiakampis gali būti apskritimui tiek peraukštas, tiek perplatus a = Shape1.Height p = Shape1.Width If a -1 Then Image1(atvSen).Picture = Image3.Picture atvSen = atvNau atvNau = Index If atvSen -1 Then 'Jei atversti vaizdai sutapo, paleiskime chronometrą, 'nes prieš jiems išnykstant būtina nedidelė pauzė. If Vaiz(atvSen) = Vaiz(atvNau) Then Timer1.Enabled = True End If End Sub Sub Timer1_Timer () Image1(atvSen).Visible = False Image1(atvNau).Visible = False atvSen = -1 atvNau = -1 Timer1.Enabled = False End Sub 29 Užduotis Daugybos lentelės mokėjimo tikrintojas priklausomai nuo rezultato turi parodyti linksmą arba liūdną veidelį Patarimas. Formoje turėtų būti: - dvi etiketės daugikliams parodyti; - įvedimo laukas rezultatui įvesti; - piktogramos “veideliams” parodyti; - mygtukai “Atsakymą įvedžiau” ir “Naują užduotį!”. Pradžioje piktogramos turi būti nematomos. 30 Užduotis Atsitiktinėse formos vietose atsitiktiniu momentu pasirodo paveikslėlis (pavyzdžiui, kokio nors vabzdžio). Reikia galimai greičiau su pele jį paspausti, nes paveikslėlis matomas ribotą laiką, o po to dingsta. Žaidimo rezultatai turi būti fiksuojami. Taip pat turi būti galimybė keisti žaidimo sunkumą, pasirodymo trukmę. Paprasta animacija Dviejų vaizdų keitimo naudojimą animacijai geriausiai iliustruoja jau nagrinėtas pavyzdys Butterfly. Kelių vaizdų animaciją, naudojamą ilgesniam ciklui gauti, patogiausia kurti naudojant reguliatorių masyvus. Priminsime, kad reguliatoriai masyvuose turi tą patį tipą, įvykių procedūras ir vardus, tačiau skirtingas savybes. Besisukančio mėnulio pavyzdyje naudosimės aštuonių paveikslų masyvu Men. Aštuonių paveikslų masyvas besisukančio mėnulio pavyzdžiui. Reikės periodiškai atlikinėti tokį programos fragmentą. Static Sk As Integer Sk = Sk + 1 If Sk>7 Then Sk = 0 End If Suk.Picture = Men(Sk).Picture Grafiniai metodai. Minėjome, kad be grafinių reguliatorių naudojami ir grafiniai metodai: Cls - valo visą formos grafiką; Pset - nustato nurodyto pikselio spalvą; Point - teikia informaciją apie nurodyto pikselio spalvą; Line - piešia tiesę, stačiakampį ar užpildytą dėžutę; Circle - piešia apskritimą, elipsę ar lanką. Metodus reikia rašyti procedūrose, todėl nevykdant programos negalėsime matyti, kaip atrodo sukurta grafika. Naudojant grafinius reguliatorius ši problema nekildavo. Paprastai grafiniai metodai rašomi formos, kurioje piešiama, įvykio procedūroje Form_Paint. Šiam tikslui mažiau tinka įvykio procedūra Form_Load, nes įkelta forma dar nebūna nupiešta, o grafiniai metodai piešia tik ant matomų objektų. Valymas. Tai paprasčiausias metodas Cls (Clear screen - valyk ekraną), dažniausiai naudojamas piešimo pradžioje. Piešimo sritis nudažoma fono BackColor spalva. Taškai. piešiami metodu: PSet (x,y) [,color], kur x ir y - taško koordinatės. Spalva gali būti ir nenurodoma, tada taško spalva atitiks priekinio plano spalvai ForeColor. Pavyzdžiui, atsitiktinai formoje išmėtyti atsitiktinių spalvų taškai kuriami taip: R=255*Rnd G=255*Rnd B=255*Rnd X=Rnd*Form.Width Y=Rnd*Form.Height PSet (x,y),RGB(R,G,B) Taškas trinamas, nudažant jį fono spalva: PSet(50,10),BackColor Metodas Point teikia taško su nurodytomis koordinatėmis spalvą, pavyzdžiui: TasSpal = Point (10, 20) Tiesė. Metodo sintaksė: Line [(x1, y1)] - (x2, y2) [,color] Čia x1, y1 - tiesės pradžios , x2, y2 - pabaigos kordinatės. Matome, kad pradžios koordinatės gali būti praleistos - tada piešiama pradedant nuo paskutinio grafinio žymeklio vietos. Tai patogu, kai brėžiamos tarpusavyje sujungtos tiesių atkarpos. Paskutinę grafinio žymeklio vietą galime rasti kintamuosiuose CurrentX ir CurrentY. Programos pradžioje grafinis žymeklis būna viršutiniame kairiajame kampe. Pavyzdžiui, kartojant programą X2 = Int (Rnd*Width) Y2 = Int (Rnd*Height) Line -(X2,Y2) gausime pav. “kryžminę ugnį”. Patogu vartoti žodį Step, kurį galime rašyti prieš bet kurią koordinatę metoduose: Pset, Line ar Circle (pastarasis bus aptartas vėliau). Step reiškia, kad nurodomos koordinatės X ir Y pridedamos prie grafinio žymeklio koordinačių. Pavyzdžiui, eilutė Line (100, 200) - (150, 250) ekvivalentiška eilutei Line (100, 200) - Step (50, 50) Stačiakampiai. Jie piešiami tuo pačiu Line metodu, pridedant gale (po spalvos parametro) raidę B (box - dėžė). Pavyzdžiui, Line (100, 200) - Step (50, 50), , B pieš tuščią stačiakampį. Jei vietoje raidės B pavartosime BF, gausime užpildytą stačiakampį. Apskritimai, elipsės, lankai. Sintaksė apskritimo piešimo metodui - akivaizdi: Circle (X,Y), Spindulys [, Spalva] Elipsės ir lankai brėžiami tuo pačiu metodu, tik naudoj ama daugiau parametrų: Circle (X,Y), Spindulys[, Spalva], [Pradžia], [Galas], [Ištempimas] Pradžia ir Galas - tai pradinis ir galinis lanko kampai radianais. Jie matuojami nuo teigiamos x ašies prieš laikrodžio rodyklę (žiūr. pav., kuriame pradžia = /4 ir galas = 2/3). Lankas brėžiamas nuo pradžios į galą, todėl sukeitus pav. pradžią ir galą gausime Ištempimas yra teigiamas skaičius, rodantis figūros vertikalios ir horizontalių ašių santykį. Pavyzdžiui, programa: FillStyle = 0 Circle (600, 1000), 800, , , , 3 FillStyle = 1 Circle (1000, 1000), 800, , , , 1/3 pieš pav. Piešimo savybės. Formos savybė DrawWidth (piešimo storis) keičia linijų storį (pikseliais) metode Line. Pavyzdžiui, pakeitus savybes DrawWidth = 1 arba 4, pieštų linijų vaizdas parodytas pav. Linijų storis, kai DrawWidth = 1 arba 4. Panašiai savybė BorderWidth (kontūro storis) keičia figūrų konturo storį. Vieno ir keturių pikselių storio apskritimai - pav. Kontūro storis, kai BorderWidth = 1 arba 4. Savybė AutoRedraw Kiekviena forma ar paveikslas turi savybę AutoRedraw. Esant savybės reikšmei lygiai True, formos ar paveikslo grafinis vaizdas išsaugomas atmintyje. Tai reikalinga kuriant gyvybingą (persistent) grafiką. Kas tai per grafika? Windows sistema imituoja lapus, kuriuos galime stumdyti. Kai laikinai slėptas langas atsidengia, jo vaizdas turi būti iš naujo nupiešiamas. Tas vyksta ir mūsų grafiniuose objektuose, kai savybė AutoRedraw leidžia kurti gyvybingą formą ar paveikslą. Pagal nutylėjimą AutoRedraw = False. Jei tokią formą laikinai uždengs kitas langas, jį atitraukus formos vaizdo dalis bus prarasta. AutoRedraw = False atvejo iliustracija. Jei AutoRedraw=True, langą atitraukus vaizdo dalis nebus prarasta. AutoRedraw = True atvejo iliustracija. Jei AutoRedraw = True, daugiau naudojama atminties. Grafikos sluoksniai Įvairūs objektai ir grafiniai vaizdai išsidėsto lyg ir skirtinguose sluoksniuose (pagal tai, kas ką dengia). Skiriami trys sluoksniai. Priekiniame (virš visų) sluoksnyje rasime negrafinius reguliatorius: mygtukus, pasirinkimo dėžutes ir pan. išskyrus etiketes. Viduriniame - grafiniai reguliatoriai ir etiketės.; Tolimiausiame sluoksnyje, ties pačia forma - grafinių metodų darbo rezultatai. 31 Užduotis Formoje taikinys iš koncentrinių apskritimų ir keturiais mygtukais valdomas taikiklis (pavyzdžiui, dviejų tiesių kryžmė). Taikiklis atsitiktinai virpa, vienodai į visas puses, imituodamas rankos virpėjimą. Nusitaikius reikia paspausti mygtuką “Ugnis”. Po to taikinyje atsiranda “skylutė”. Yra mygtukas taikiniui pakeisti. Patyrinėti, kaip elgiasi programa, kaitaliojant formos Autoredraw savybės reikšmes. PELĖS ĮVYKIAI VB objektai gali reaguoti į pelės būklę ir padėtį. Pelės būklę ir padėtį nusako šie įvykiai: MouseDown (pelė paspaudžiama) - paspaudus bet kurį pelės mygtuką; MouseUp (pelės atleidžiama) - atleidžiant bet kurį mygtuką; MouseMove (pelė judinama) - pelės žymeklis juda. Judinant pelę šie įvykiai vyksta labai dažnai, tiesiog kas sekundės dalį. Kaip pastebėjote, įvykis Click nepriskiriamas prie grynai pelės įvykių, kadangi jis neparodo pelės kordinačių, nepasako kuris iš pelės mygtukų paspaustas. Forma atpažįsta pelės įvykį, kai žymeklis yra virš jos dalies, neužimtos reguliatoriumi. Reguliatoriai atpažįsta pelės įvykį, kai pelės žymeklis yra virš jų. Tačiau po pelės mygtuko paspaudimo objektas atpažįsta visus pelės įvykius tol, kol vartotojas mygtuko neatleidžia (net žymekliui išėjus už objekto ribų). Tai padaryta, kad objektus galima būtų vilkti ir toliau. Pelės įvykių procedūrų pirmoji eilutė atrodo taip: Sub Form_MouseDown (Button as Integer, Shift as Integer, X as Single,Y as Single) (taip pat atrodo ir MouseUp bei MouseMove procedūros) Jos turi daug parametrų: Button (mygtukas) - tai integer tipo žodis, kurio 3 paskutiniai bitai rodo, kuris iš trijų pelės mygtukų nuspaustas; Shift - integer tipo žodis, kurio 3 paskutiniai bitai rodo, kuris iš klavišų SHIFT, CTRL, ALT yra nuspaustas; X,Y (single tipo) - pelės žymeklio koordinatės. Žodžių Button ir Shift struktūra iliustruojama pav. Žodžiai Button ir Shift pelės įvykių procedūrose. Kai Button=1, paspaustas kairys mygtukas, kai Button=2, dešinysis. Todėl įvykių procedūrose galime nustatyti, kuris pelės mygtukas paspaustas, ar nėra papildomai paspaustas vienas iš klaviatūros klavišų SHIFT, CTRL, ALT. Be to gauname pelės žymeklio koordinates paspaudimo momentu. Kai Button=1, paspaustas kairys mygtukas, kai Button=2 - dešinysis. Kai Shift=1, paspaustas papildomai klaviatūros klavišas SHIFT, kai Shift=2, paspaustas papildomai Ctrl ir t.t. . Kai pelės įvykis įvyksta reguliatorių masyvo elementui, prisideda dar vienas pirmasis procedūros parametras - masyvo indeksas - Index As Integer Pavienių pelės įvykių naudojimas Įvykis MouseDown naudojamas dažniausia. Pavyzdžiui, norime piktogramą Pik kilnoti į bet kurią vietą, nurodytą pele. Tam užtenka parašyti formos įvykiui MouseDown tokią procedūrą. Sub Form_MouseDown (Button as Integer, Shift as Integer, X as Single,Y as Single) Pik.Move X,Y End Sub Kitas MouseDown naudojimo pavyzdys - piešti laužtę, nurodant pele jos lūžio taškus. Naudosime grafinį metodą Line -(x2, y2), kuris tiesės atkarpą piešia nuo paskutinio grafinio žymeklio taško iki taško x2, y2. Formai rašysime įvykio procedūrą: Sub Form_MouseDown (Button as Integer, Shift as Integer, X as Single, Y as Single) Line -(X, Y) End Sub Laužtės piešimo rezultatas. Vietoje įvykio MouseDown ankstesniame pavyzdyje panaudokime įvykį MouseMove. Toks įvykis įvyksta vos pajudinus pelę, todėl vykdant bus nubrėžta pelės judėjimo trajektorija. Pelės judėjimo trajektorija. Kyla klausimas - kaip dažnai judinant pelę įvyksta įvykiai MouseMove, nes aišku, kad programinė įranga gali generuoti ribotą įvykių skaičių. Šių įvykių tankį iliustruosime, papildę ankstesnę įvykių procedūrą mažo apskritimo piešimu. Line -(X, Y) Circle (X, Y), 50 Rezultatas - pav. Pelės įvykių MouseMove tankis. Kuo greičiau juda pelė, tuo rečiau apskritimai, nes kompiuteris nespėja apdoroti MouseMove įvykių. Kelių pelės įvykių naudojimas kartu Tegul ankstesniame pavyzdyje kreivė bus piešiama tik paspaudus pelės mygtuką, o jį atleidus - ne. Tam reikės reaguoti į visus tris anksčiau aptartus pelės įvykius: MouseDown, MouseUp, MouseMove. Pirmieji du įvykiai įjungs arba išjungs piešimo režimą, nusakomą bendru formai kintamuoju PieRez. Jis aprašomas formos Declarations dalyje: Dim PiesRez As Integer Įvykių procedūros bus tokios. Sub Form_MouseDown (Button as Integer, Shift as Integer, X as Single, Y as Single) PiseRez = True CurrentX = X ‘ grafinio žymeklio CurrentY = Y ‘ pradinės piešimo koordinatės nustatymas End Sub Sub Form_MouseUp (Button as Integer, Shift as Integer, X as Single, Y as Single) PiesRez = False End Sub Sub Form_MouseMove (Button as Integer, Shift as Integer, X as Single, Y as Single) If PiesRez then Line -(X, Y) End Sub Panašiai galima naudoti pelės įvykius, kai kartu su pele paspaudžiami klavišai SHIFT, CTRL, ALT arba spaudžiamas dešinysis pelės mygtukas. Pavyzdys - mozaikinis grafinis redaktorius. Bakstelėjus langelį kairiuoju pelės mygtuku jis patamsėja, dešiniuoju - pašviesėja. Tam sukuriame etikečių Label1 masyvą (iš 4 x 5 elementų), kurių įvykio procedūra būtų tokia. Sub Label1_MouseDown (Index As Integer, button As Integer, Shift As Integer, X As Single, Y As Single) If button = 1 Then Label1(Index).BackColor = QBColor(4) If button = 2 Then Label1(Index).BackColor = QBColor(15) End Sub Čia naudojome tik procedūros parametrą Button ir nenaudojome koordinačių x, y. Kitame pavyzdyje panaudosime pelės žymeklio koordinates. Pavyzdys. Formoje - mygtukas su užrašu “Klausinėkite - atsakysiu: taip ar ne”, o taip pat etiketė atsakymo tekstui. Programos autorius – naiviems klausytojams aiškina šios programos stebuklingas galimybes: “Mano programa mato asmenį, esantį prieš ekraną, jį girdi ir teisingai atsakys į klausimus. Tiktai jos atsakymai gali būti “taip” arba “ne”. Pavyzdžiui, klauskime: “Ar Jūs vyras?”. Spaudžiu mygtuką ir ekrane matome teisingą atsakymą. Klausinėkite toliau”. Naudosime mygtuko paspaudimo įvykį MouseDown ir pelės žymeklio koordinates paspaudžiant mygtuką. Pavyzdžiui, norėdami, kad programa atsakytų “taip”, demonstruojant programą lyg tarp kitko spausime kairę mygtuko pusę; kad atsakytų “ne” - dešinę pusę. Private Sub Command1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) If X 0 Then Label4 = -Val(Text2) / Val(Text1) Else Label4 = "" MsgBox ("Dalyba is nulio") End If End Sub 39 Užduotis Hipertekstas, tai tekstas, turintis aktyvių žodžių, iš kurių galima iškviesti naujas teksto dalis, aiškinančias tą aktyvų žodį. Realizuokite hipertekstą, aiškinantį pagrindinių VB reguliatorių savybes. Pradinėje formoje, naudodami etiketes rašome tekstą: “Paprasčiausi reguliatoriai: mygtukai, etiketės, teksto laukai”. Pabrauktuosius, aktyvius žodžius rašome kita spalva, naudodami atskiras etiketes. Šių etikečių įvykių procedūrose turi būti iškviečiamos naujos formos, kuriose išvardinamos svarbiausios to reguliatoriaus savybės. Tos savybės savo ruožtu - aktyvūs žodžiai, kuriuos bakstelėjus turi atsirasti dar viena nauja forma (pavyzdžiui, vardu “Savybė “Caption”). 40 Užduotis Formoje tekstas: “Ši programa skaitys mintis. Dešimtį sekundžių rodysime šešias kortas. Mintyse pasirinkite vieną jų (tik netyčia jos nenurodykite pele)”. Formoje mygtukas “Perskaičiau”, kurį paspaudus atsiranda antra forma su rodomomis kortomis. Tai gali būti, pavyzdžiui, kryžių berniukas, vynų dama, čirvų karalius, būgnų berniukas, čirvų dama ir kryžių karalius. Po dešimties sekundžių forma turi dingti, o jos vietoje atsirasti trečia su užrašu: “Pašalinau jūsų pasirinktąją kortą. Matote, kad teisingai”. Formoje turi matytis penkios kortos: vynų berniukas, kryžių dama, būgnų karalius, čirvų berniukas ir vynų karalius. Nors programos idėja paprasta, pirmą kartą ji apgauna beveik kiekvieną. DAUGIADOKUMENTINIS INTERFEISAS (MDI) Sutrumpintai – MDI (Multi-document Interface). Jis leidžia kurti daug formų, tačiau su jas vienijančia konteinerine tėviškoje (MDI) forma. Taip sukurtas Word, Excel ir kt. Visos vaikiškos (ar dukterinės) – child formos laikomos tėviškoje MDI formoje. MDI forma gali būti tik viena. Paprastai ji tamsi, ant jos negali būti jokių reguliatorių išskyrus meniu. Vaikiškų formų gali būti daug. Tai paprastos formos, tik jų savybė MDIChild = True. Jos neišeina už MDI formos kraštų. Vykdant: • Kai vaikiška forma minimizuojama, MDI formoje lieka jos piktograma. • Vaikiškos formos gali būti judinamos tik MDI formos vidinėje srityje. • Vaiko negalima paslėpti. MDI formų kūrimas Nors pradžioje projekte jau būna viena paprasta foma (Form1), MDI formą reikia kurti specialiai. Visas MDI interfeisas kuriamas taip: • Kuriama MDI forma atliekant meniu komandą: Project / Add MDI Form. • MDI forma paprastai įtraukiama į projekto startavimo sąrašą meniu komanda: Project / Properties puslapyje General nustatant Startup Object ne Form1 o MDIForm. • Sukuriama vaikiškų formų, tame tarpe, pavyzdžiui, Form1 paverčiant vaikiška. Tam pakeičiama jos savybės MDIChild = True reikšmė. (Paprastai formoms pagal nutylėjimą ji lygi False). Žinoma, startuoti galima ir nuo vaikiškos formos. Tada MDIForm įsikels automatiškai. Tuo tarpu pakrovus MDI formą jos vaikiškos formos automatiškai nepasikrauna – jų pasirodymą (o taip pat ir išnykimą) teks valdyti komandomis. Meniu MDI programose Tiek MDI, tiek vaikiškos formos gali turėti savo meniu. MDI formos meniu matomas tik tada, jei nėra nei vienos aktyvios vaikiškos formos. Aktyvios vaikiškos formos meniu išstumia MDI formos meniu. Paprastai MDI formos meniu turi turėti komandas vaikiškų formų įkėlimui (pavyzdžiui, meniu komandas Įkelti Form1, Įkelti Form2, Iškelti Form1, Iškelti Form2). Jose rašomos komandos: Form1.Show, Form1.Hide ir pan. Įkeltų vaikiškų formų gali susidaryti daug. Kad jas tvarkyti - patogu matyti vaikiškų formų sąrašą. Jį automatiškai sudarinėja ir parodo speciali meniu komanda (paprastai ją Worde ir Excelyje vadina Windows). Tam nereikia rašyti programos – pakanka kuriant šią meniu komandą Meniu redaktoriuje nurodyti (įjungti jungiklį) Window List (Langų sąrašas). Tokia meniu pozicija vykdant atrodytų taip. Analogiškas meniu komandas reikia turėti ir vaikiškų formų meniu komandose, nes joms esant aktyvioms meniu pasikeis. 41 užduotis Sukurti bet kokį MDI programos pavyzdį su trimis vaikiškomis formomis ir atitinkamais meniu. DUOMENŲ BAZĖS Iki šiol nekalbėjome apie informacijos saugojimą išorinėje atmintyje. VB turi specialų duomenų valdymo reguliatorių, kuris leidžia lengvai susirišti su duomenų bazėmis: Access, dBASE, FoxPro, Paradox. Paprasčiausia tai atlikti Windows duomenų bazei Access. Paprasčiausių duomenų bazių struktūra VB reguliatoriai gali susirišti su duomenų bazėmis, saugančiomis duomenis lentelėse (tables), kurios susideda iš laukų (fields) ir įrašų (records). Lentelė - tai duomenų grupė, kurią galime įsivaizduoti, kaip lentelę popieriuje, susidedančią iš stulpelių (laukų) ir eilučių (įrašų). Pavyzdžiui, bazėje apie knygas gali būti lentelės: autoriai, leidyklos, knygos ir pan. Autorių lentelės įrašuose - žinios apie autorių, suskirstytos į laukus (vardas, pavardė, adresas ir pan.). Pavyzdys. Lentelės vardas: “AUTORIAI” ; laukų vardai: VARDAS, PAVARDĖ, ADRESAS Jonas Grafomanas Varpo 2, Balbieriškis, Petras Plunksnėnas Klausučių km., Kėdainių r. Duomenų tvarkytojas VB savo sudėtyje turi instrumentą bazėms kurti, duomenims redaguoti. Tai duomenų tvarkytojas (Data Manager). Į jį patenkame meniu komanda AddIns / Visual Data Manager. Naudosimės jau sukurtomis duomenų bazėmis, pavyzdžiui, \DEVSTUDIO\VB\BIBLIO.MDB. Access bazė sukuriama atskiroje vienoje byloje (bylos plėtinys .MDB). Duomenų reguliatorius Duomenų reguliatorius (data control), turintis piktogramą , įgalina naudotis sukurta duomenų baze, peržiūrėti ir redaguoti įrašų turinį. Tam be šio duomenų reguliatoriaus pasitelkiami mums jau žinomi reguliatoriai (pavyzdžiui, teksto laukai arba etiketės). Tokiu atveju jie vadinami surištaisiais reguliatoriais, nes duomenų reguliatorius juos suriša su duomenų bazėmis. Duomenų reguliatorius vienu metu gali būti surištas tiktai su vienu - taip vadinamu dabartiniu (current) įrašu. Ryšių schema, esant dviems surištiems reguliatoriams, parodyta paveikslėlyje. Norint panaudoti duomenų reguliatorių, reikia atlikti tokius veiksmus. 1) Sukurti formoje duomenų reguliatorių, sakykim vardu Data1, kurio vaizdas - pav. 2) Duomenų reguliatoriaus savybei DatabaseName (duomenų bazės vardas) priskirti duomenų bazės bylos vardą su plėtiniu .MDB (jei duomenų bazė jau sukurta). 3) Savybėje RecordSource (įrašo šaltinis) nurodyti lentelę, su kuria dirbsite (pavyzdžiui, AUTORIAI); bazės lentelių vardai būna matomi šios savybės įvedimo lauke. 4) Formoje sukurti teksto lauką (pavyzdžiui, vardu Text1) duomenų bazės informacijai išvesti bei redaguoti. Vietoje teksto lauko galima naudoti jungiklį, paveikslą, piktogramą bei etiketę. 5) Teksto lauko Text1 savybėje DataSource (duomenų šaltinis) nurodyti duomenų reguliatoriaus, su kuriuo ji surišama, vardą (Data1). Taip Text1 tampa surištu reguliatoriumi. 6) Teksto lauko Text1 savybėje DataField (duomenų laukas) nurodyti lauko, su kuriuo dirbsite, vardą. 7) Greta surišto teksto lauko paprastai kuriama etiketė, paaiškinanti, kas teksto dėžėje rodoma (pavyzdžiui, VARDAS). 8) Kiekvienam toliau kuriamam surištam reguliatoriui, pavyzdžiui, PAVARDĖ, teks kartoti 4 - 7 etapus. Rezultatas programą vykdant - pav. Surištų reguliatorių ir duomenų reguliatoriaus vaizdas. Duomenų reguliatorius savyje turi keturis mygtukus keisti įrašams. Mygtukų funkcijos parodytos pav. Surištuose reguliatoriuose, šiuo atveju - teksto laukuose, galite keisti įrašų turinį. Kai tik pereisite prie kito įrašo, pakeitimai ankstesniame įraše bus išsaugoti duomenų bazėje. Naujų įrašų pridėjimas Iki šiol mokėjome pridėti naują įrašą tik projektuojant, naudojant duomenų tvarkytoją ar pačią duomenų bazę. Tačiau ir programą vykdant tenka papildyti bazes naujais įrašais. Pavyzdžiui, atsiranda naujas sistemos vartotojas, klientas ir pan. Tenka panaudoti specialų metodą AddNew, vykdomą, pavyzdžiui, paspaudus mygtuką “Pridėti”. Naujų įrašų pridėjimas, šalinimas ir išsaugojimo sąsaja. Bazės įrašų objektas yra Recordset (įrašų aibė), o jo metodas, pridedantis naują įrašą - AddNew (pridėti naują). Todėl mygtuko “Pridėti” įvykio procedūroje reiktų atlikti: Data1.Recordset.AddNew Tai pridėtų naują įrašą į įrašų aibės galą, visi surišti reguliatoriai išsivalytų ir būtų galima juos užpildyti nauja informacija. Tačiau mūsų įrašas dar neišsaugotas duomenų bazėje. Išsaugojimas automatiškai įvyksta perėjus prie kito įrašo arba panaudojus metodą Update (atnaujinti). Todėl mygtuko “Išsaugoti” įvykio procedūroje būtų metodas: Data1.Recordset.Update Įrašų šalinimas. Įrašas, kuris šiuo metu matomas, dabartinis (current) įrašas, šalinamas metodu Delete. Pašalinus nereikia naudoti Update metodo, tačiau dabartinis pašalintas įrašas tampa neteisingu (invalid). Bandymas redaguoti tokį jau panaikintą įrašą sukeltų sisteminę klaidą. Todėl pašalinus reikia pereiti prie naujo įrašo, mygtuko “Pašalinti” įvykio procedūroje įrašant: Data1.Recordset.Delete Data1.Recordset.MoveNext Metodo MoveNext veikimas atitinka rodyklės “Pereiti į sekantį įrašą” paspaudimą duomenų reguliatoriuje. Programiškam įrašų keitimui yra ir kiti metodai, atitinkantys rodykles duomenų bazių reguliatoriuje: MovePrevious (pereiti į prieš buvusį įrašą), MoveFirst (pereiti į pirmą įrašą), MoveLast (pereiti į paskutinį įrašą). 42 Užduotis VB duomenų bazei, esančiai \DEVSTUDIO\VB\BIBLIO.MDB, paruošti programinę sąsają. Formoje turi būti: • autorių vardų ir pavardžių • knygų peržiūros galimybės. SPAUSDINIMAS Teksto spausdinimas formose ir paveiksluose. Galima spausdinti ne tik popieriuje, bet ir formoje. Gali būti sukurta net speciali forma, kurioje spausdinami, pavyzdžiui, skaičiavimų rezultatai. Panašus spausdinimas įmanomas ir paveiksle. Tokiam spausdinimui naudojamas metodas Print. Jo sintaksė: [Objektas.]Print [Išraiškų sąrašas] Jei objektas nenurodomas, spausdinama toje formoje, su kuria programa tuo metu susijusi. Pavyzdžiai: Form1.Print “Spausdiname formoje Form1” Pic1.Print “Spausdiname paveikslo dėžutėje Pic1” Printer.Print “Spausdiname ant popieriaus” Išraiškų sąraše gali būti konstantės, kintamieji, savybių reikšmės. Sąrašo komponentės skiriamos tarpusavyje kabliataškiu (tada neperkeliama į kitą eilutę) arba kableliu (perkeliama į kitą eilutę). Pavyzdžiai: Print “X=“; X; “ ir Y=“; Y spausdins X=5 ir Y= 6 (jei X ir Y reikšmës yra tokios). Print “Tai pirma eilutė” Print “Tai antra eilutė” spausdins dvi eilutes. Print “Tai atsispausdins”; Print “vienoje eilutėje” spausdins vienoje eilutëje, nes kabliataškis blokuoja perkėlimą į naują eilutę. Spausdinimo valdymas Spausdintą tekstą išvalyti galima naudojant Cls metodą. Jis naikina visą tekstą formoje ar paveikslo dėžutėje, sukurtą Print arba grafiniais metodais. Spausdinimo vieta valdoma, keičiant grafinio žymeklio koordinates CurrentX ir CurrentY. Pavyzdžiui, įvykdžius CurrentX = 0 CurrentY = 0 bus rašoma formos kairiajame viršutiniame kampe. Spausdinimas su spausdintuvu. Yra du spausdinimo būdai spausdinti Windows sistemoje nustatytu spausdintuvu. 1) Galima pasiųsti tekstą ar grafiką į objektą Printer ir po to spausdinti naudojant NewPage ir EndDoc metodus. 2) Galima pradžioje spausdinti formoje, o po to spausdinti tą formą spausdintuvu, naudojant PrintForm metodą. Paprastesnis antrasis būdas. Metodo PrintForm naudojimo sintaksė: [forma.] PrintForm Pavyzdys: Print “Spausdiname” PrintForm Metodas siunčia kiekvieną formos pikselį tiesiai į spausdintuvą, todël tais atvejais, kai spausdintuvo kokybė geresnė už monitoriaus, PrintForm metodas gali pabloginti spausdinimo kokybę. VB projekto spausdinimas Informacija apie VB projektą turi palyginti sudėtingą struktūrą. Čia ir tarpusavyje objektų savybės, ir įvykių procedūrų tekstai, ir grafinė informacija. Jau žinome, kad netransliuotą VB projektą sudaro toki failai: - po failą kiekvienai formai; - po failą kiekvienam programiniam moduliui; - po failą kiekvienam nestandartiniam reguliatoriui; - vienas projekto failas, apjungiantis visas projekto dalis . Forma simboliais aprašoma formos aprašo bloku ir Basic programa. Formos aprašas susideda iš formos ir jos reguliatorių savybių reikšmių. Jis atspindi reguliatorių priklausomybės hierarchiją. Pav. rodo aprašo struktūrą. Pav. matome aprašo fragmentą. Po jo turi eiti Basic programa. Aprašo fragmentas. Spausdinamos tik pakeistos savybės. Tarp formos apraðo ir Basic programos spausdinami formos meniu aprašai. Tam reikia atlikti meniu komandà File Print. Tada pasirodo pav. pavaizduota dialogo dėžutė, kurioje galima pasirinkti, ką spausdinsime. Dialogo dėžutė projekto spausdinimui.
Šį darbą sudaro 15958 žodžiai, tikrai rasi tai, ko ieškai!
★ Klientai rekomenduoja
Šį rašto darbą rekomenduoja mūsų klientai. Ką tai reiškia?
Mūsų svetainėje pateikiama dešimtys tūkstančių skirtingų rašto darbų, kuriuos įkėlė daugybė moksleivių ir studentų su skirtingais gabumais. Būtent šis rašto darbas yra patikrintas specialistų ir rekomenduojamas kitų klientų, kurie po atsisiuntimo įvertino šį mokslo darbą teigiamai. Todėl galite būti tikri, kad šis pasirinkimas geriausias!
Norint atsisiųsti šį darbą spausk ☞ Peržiūrėti darbą mygtuką!
Mūsų mokslo darbų bazėje yra daugybė įvairių mokslo darbų, todėl tikrai atrasi sau tinkamą!
Panašūs darbai
Kiti darbai
Atsisiuntei rašto darbą ir neradai jame reikalingos informacijos? Pakeisime jį kitu nemokamai.
Pirkdamas daugiau nei vieną darbą, nuo sekančių darbų gausi 25% nuolaidą.
Išsirink norimus rašto darbus ir gauk juos akimirksniu po sėkmingo apmokėjimo!