Deschiderea formularelor în modul modal
Aplicarea cea mai evidentă a software-ului este deschiderea unei forme suplimentare de selecție sau de căutare pentru orice valoare în directorul și apoi să se întoarcă, de exemplu, elementul de cod găsit în forma de bază. Acest formular trebuie să fie deschis modal, deoarece nu există nici un punct în continuarea punerii în aplicare a programului principal până când alegerea este făcută și forma nu este închisă. Să încercăm să implementăm acest lucru.
De exemplu, creați un nou proiect și puneți câteva câmpuri și butoane de introducere pe formularul principal:
Ca sarcină de testare, vom deschide un formular suplimentar cu un câmp de introducere, care ar trebui să conțină inițial textul din câmpul de intrare corespunzător al formularului principal. Apoi, modificați acest text și returnați valoarea actualizată în formularul principal. Pentru a face acest lucru, mai întâi creați o formă suplimentară de acest tip:
Ca interfață de programare pentru trecerea parametrilor, vom folosi proprietatea TestValue, pe care o definim în secțiunea publică a clasei de formular. Noi identifice și să pună în aplicare mai mult de metode evidente pentru stabilirea și citirea valorii proprietății, precum și o tratare a evenimentului apăsarea butonului în care proprietatea este setată pentru a forma ModalResult mrOK, ceea ce duce la închiderea (dar nu distrug!) Forma.
Cu toate acestea, cea mai interesantă este funcția RunTestForm. După cum puteți vedea, este definită în afara clasei formularului, deși în același modul. Acest lucru poate părea ciudat programatorilor VB, unde modulul de clasă este complet identificat cu clasa însăși. Ca și în Delphi, în Lazăr nu este cazul. Deși într-o singură unitate poate fi determinată numai o singură formă (în caz contrar formă vizuală proiectantul nu va funcționa), celelalte elemente ale cererii nu sunt obligate să pună în aplicare separat. În cazul nostru, funcția RunTestForm conține codul necesar pentru a crea un formular, transferul valorii inițiale a câmpului de intrare și returnează valoarea modificată. Evident, RunTestForm este legat de clasa de formular, deci este rezonabil (deși nu este necesar) să-l plasați în modulul de formă.
Acum, să vedem cum să folosim toate acestea în forma de bază. Adăugați la operatorii de evenimente care împing apelurile la funcția RunTestForm, rezultând în secțiunea de implementare a modulului principal de formular va arăta astfel:
Formulare de deschidere în modul fără mod
Deci, pentru început, determinăm că scopul, comportamentul formei fără mod și principiile de lucru cu ele sunt complet diferite. În primul rând, formele non-modal nu sunt proiectate să se întoarcă valori, deoarece după programul lor de descoperire nu este oprit în anticiparea închiderii formularului, și continuă să curgă. Din acest motiv, dacă nu luați măsuri speciale de indicatorul pentru a deschide formularul este pierdut după finalizarea codului pe care le creează (în acest caz - este o funcție RunTestForm). Este atât de groaznic? În majoritatea cazurilor, nu. Amintiți-vă că atunci când ați creat o instanță de formă, parametrul aplicației a fost transmis constructorului? Deci: Aplicația este un obiect care reprezintă întreaga noastră aplicație. Cu această formă de creație, își va aminti prezența și vom putea profita de aceasta. Vom crea în forma principală o listă pe care o vom completa cu numele formularelor deschise în aplicație. Forma principală se va schimba ușor și va arăta astfel:
Rețineți că am declarat noua metodă FillWindowsList, care tocmai completează lista formularelor de solicitare. Implementarea sa nu este prea complicată:
Există un punct interesant aici. Faptul este că obiectul Application conține o singură listă a tuturor componentelor pe care le deține, deci trebuie să verificați dacă următoarea componentă este exact TForm.
Cu toate acestea, ce folosește doar listarea formularelor. Trebuie să faceți acest lucru pentru a putea trece la oricare dintre ele. Într-o aplicație reală, este cu siguranță mai bine de a face cu meniul, dar codul va fi un pic mai greoaie, astfel încât în acest exemplu simplu, în prima listă va fi utilizată, iar pe de altă parte omite verificările necesare în aplicarea reală.
Mai jos apare întregul cod al secțiunii de implementare a modulului principal de formular. Rețineți că sunând la metoda RunTestForm, nu așteptăm valoarea returnată, dar vom apela procedura de completare a listei de ferestre de aplicații.
Acum vom crea o formă suplimentară, pe care o vom deschide din forma principală în modul nemodal. În exterior, nu va diferi în nimic de forma modală discutată în capitolul precedent, dar codul se va schimba într-o oarecare măsură. Rețineți că proprietatea TestValue este acum numai pentru scriere, iar metoda RunTestForm a devenit o procedură în locul unei funcții.
A existat, de asemenea, o nouă variabilă globală - formularul Form2Count. O vom avea nevoie când vom crea un nume pentru instanța formularului creat. Toate obiectele aplicației trebuie să aibă nume unice, dar LCL nu-i pasă de ea, deci va trebui să acționezi singur. Codul asociat cu variabila Form2Count este suficient de banal, deci nu vom mai rezista.
De asemenea, implementarea sa schimbat destul de mult. Formele sunt acum Afișarea face prin apel arată, mai degrabă decât ShowModal, astfel încât programul nu este transferat la forma nou creată înainte de al închide, și continuă. Resursele de închidere și eliberare ar trebui să fie acum tratate de formularul însuși. Pentru aceasta, în procedura de procesare a evenimentului de închidere a formularului, vom seta variabila CloseAction la caFree. Dacă faceți clic pe buton, nu se va seta valoarea ModalResult, ci se va apela în mod explicit metoda Close.
Dacă nu ați citit doar acest articol, ci ați creat programul de testare descris în trecere, este timpul să îl porniți. Nu uitați să eliminați formularul suplimentar din lista de aplicații create automat.