Kako komunicirati između oblika

click fraud protection

Modalni obrasci nude specifične značajke koje ne možemo imati kada se prikazuju nemodalno. Najčešće ćemo prikazati obrazac modalno da izoliramo njegove procese od svega što bi se inače moglo dogoditi na glavnom obrascu. Nakon što se ovi procesi dovrše, možda biste željeli znati je li korisnik pritisnuo gumb Spremi ili Otkaži kako bi zatvorio modalni obrazac. Možete napisati zanimljiv kôd da biste to postigli, ali to ne mora biti teško. Delphi opskrbljuje modalne obrasce svojstvom ModalResult, koje možemo pročitati kako bismo otkrili kako je korisnik napustio obrazac.

Sljedeći kod vraća rezultat, ali rutina pozivanja ignorira ga:

var
F: TForm2; početi
F: = TForm2.Create (nula); F.ShowModal; F.Release; ...

Gore prikazani primjer samo prikazuje obrazac, omogućava korisniku da nešto učini s njim, a zatim ga otpusti. Da bismo provjerili kako je obrazac završen, moramo iskoristiti činjenicu da je metoda ShowModal funkcija koja vraća jednu od nekoliko vrijednosti ModalResult. Promijenite liniju

F.ShowModal

instagram viewer

do

ako F.ShowModal = mrOk zatim

Potreban nam je neki kod u modalnom obliku da bismo postavili ono što želimo dohvatiti. Postoji više načina da nabavite ModalResult jer TForm nije jedina komponenta koja ima svojstvo ModalResult - i TButton ga ima.

Pogledajmo prvo TButton-ov ModalResult. Započnite novi projekt i dodajte jedan dodatni obrazac (Glavni izbornik Delphi IDE: Datoteka -> Novo -> Obrazac). Ovaj novi obrazac imat će naziv "Form2". Zatim dodajte TButton (Naziv: 'Button1') glavnom obrascu (Form1), dvokliknite novi gumb i unesite sljedeći kôd:

postupak TForm1.Button1Click (Pošiljatelj: TObject); var f: TForm2; početi
f: = TForm2.Create (nula); probatiako f. ShowModal = mrOk zatim
Natpis: = 'Da'
drugo
Opis: = 'Ne'; konačno
f. pustite; kraj; kraj;

Sada odaberite dodatni obrazac. Dajte mu dva TButtons, jedan označite "Save" (Naziv: 'btnSave'; Opis: 'Spremi') i drugi 'Odustani' (Naziv: 'btnCancel'; Opis: "Odustani". Odaberite gumb Spremi i pritisnite F4 da biste prikazali objektni inspektor, pomičite se gore / dolje dok ne pronađete svojstvo ModalResult i postavi na mrOk. Vratite se na obrazac i odaberite gumb Odustani, pritisnite F4, odaberite svojstvo ModalResult i postavite ga na mrCancel.

Jednostavno je. Sada pritisnite F9 da biste pokrenuli projekt. (Ovisno o postavkama okruženja, Delphi može zatražiti spremanje datoteka.) Nakon što se pojavi glavni obrazac, pritisnite gumb 1 koji ste dodali ranije kako biste pokazali podređeni obrazac. Kad se pojavi podređeni obrazac, pritisnite gumb Spremi, a obrazac se zatvara, vraćajući se na glavni obrazac uz napomenu da je u potpisu napisano "Da". Pritisnite tipku glavnog obrasca kako biste ponovno otvorili podređeni obrazac, ali ovaj put pritisnite gumb Otkaži (ili izbornik sustava Zatvori stavku ili gumb [x] u području opisa). Naslov glavnog obrasca glasit će "Ne".

Kako ovo radi? Da biste to saznali, pogledajte događaj "Click" za TButton (iz StdCtrls.pas):

postupak TButton. Klik; var Oblik: TCustomForm; početi
Oblik: = GetParentForm (Self); ako Obrazac nula zatim
Oblik. ModalResult: = ModalResult; naslijedio Klik; kraj;

Ono što se događa je da Vlasnik (u ovom slučaju sekundarni oblik) TButton dobiva svoj ModalResult postavljen prema vrijednosti modalResultata TButtona. Ako ne postavite TButton. ModalResult, tada je vrijednost mrNone (prema zadanim postavkama). Čak i ako se TButton stavi na drugu kontrolu, nadređeni obrazac i dalje se koristi za postavljanje rezultata. Posljednji redak tada poziva događaj Click naslijeđen iz klase predaka.

Da biste shvatili što se događa s Forms ModalResult vrijedno je pregledati kôd u Forms.pas koji biste trebali pronaći u.. \ DelphiN \ Source (gdje N predstavlja broj verzije).

U funkciji ShowModal tvrtke TForm, neposredno nakon prikazivanja obrasca, petlja Ponavljaj dok se ne pokrene, koja nastavlja provjeravati da li varijabla ModalResult postaje vrijednost veća od nule. Kad se to dogodi, konačni kod zatvara obrazac.

ModalResult možete postaviti u vrijeme dizajniranja, kao što je opisano gore, ali također možete postaviti svojstvo ModalResult oblika izravno u kod u vrijeme izvođenja.

instagram story viewer