Kako komunicirati med obrazci

Modalni obrazci ponujajo posebne značilnosti, ki jih ne moremo imeti pri prikazovanju nemodalno. Najpogosteje bomo prikazali obrazec na način, da njegove procese izoliramo od vsega, kar bi se sicer lahko zgodilo na glavnem obrazcu. Ko se ti procesi zaključijo, boste morda želeli vedeti, ali je uporabnik pritisnil gumb Shrani ali Prekliči, da zapre modalni obrazec. Lahko napišete kakšno zanimivo kodo, da to dosežete, vendar ni nujno, da je težko. Delphi dobavi modalne obrazce s lastnostjo ModalResult, ki jih lahko preberemo, da povemo, kako je uporabnik zapustil obrazec.

Naslednja koda vrne rezultat, vendar ga klicna rutina prezre:

var
F: TForm2; začeti
F: = TForm2.Ustvari (nič); F.ShowModal; F.Sprostite; ...

Zgornji primer samo prikazuje obrazec, uporabniku omogoča, da z njim nekaj naredi, nato pa ga sprosti. Da preverimo, kako je obrazec zaključen, moramo izkoristiti dejstvo, da je metoda ShowModal funkcija, ki vrne eno od več vrednosti ModalResult. Spremenite črto

F.ShowModal

do

če F.ShowModal = mrOk torej

instagram viewer

Potrebujemo nekaj kode v modalni obliki, da nastavimo karkoli želimo. Obstaja več kot en način za pridobivanje ModalResult, ker TForm ni edini sestavni del, ki ima lastnost ModalResult - tudi TButton ga ima.

Poglejmo najprej TButton-ov ModalResult. Zaženite nov projekt in dodajte en dodaten obrazec (Glavni meni Delphi IDE: Datoteka -> Novo -> Obrazec). Ta novi obrazec bo imel ime „Form2“. Nato v glavni obrazec (Form1) dodajte gumb TBut (Ime: "Button1"), dvokliknite nov gumb in vnesite naslednjo kodo:

postopek TForm1.Button1Click (Pošiljatelj: TObject); var f: TForm2; začeti
f: = TForm2.Create (nič); poskusiče f. ShowModal = mrOk torej
Napis: = 'da'
drugače
Napis: = 'ne'; končno
f. Sprostitev; konec; konec;

Zdaj izberite dodatni obrazec. Navedite dva gumba TBut, pri čemer ena označi »Shrani« (Ime: 'btnSave'; Napis: 'Shrani') in drugo 'Prekliči' (Ime: 'btnCancel'; Napis: 'Prekliči'). Izberite gumb Shrani in pritisnite F4, da se prikaže Object Inspector, pomaknite se navzgor / navzdol, dokler ne najdete lastnosti ModalResult in nastavite na mrOk. Vrnite se na obrazec in izberite gumb Prekliči, pritisnite F4, izberite lastnost ModalResult in jo nastavite na mrCancel.

Tako enostavno kot to. Zdaj pritisnite F9, da zaženete projekt. (Odvisno od okoljskih nastavitev lahko Delphi zahteva, da shrani datoteke.) Ko se prikaže glavni obrazec, pritisnite gumb 1, ki ste ga dodali prej, in prikažete nadrejeni obrazec. Ko se prikaže podrejeni obrazec, pritisnite gumb Shrani in obrazec se zapre, ko se nazaj na glavni obrazec opomni, da je v napisu napisano "Da". Pritisnite gumb glavnega obrazca, da ponovno odprete otroški obrazec, vendar tokrat pritisnite gumb Prekliči (ali sistemski meni Zaprite element ali gumb [x] na območju napisov). Naslov glavnega obrazca se glasi "Ne".

Kako to deluje? Če želite izvedeti, si oglejte dogodek Klik za TButton (iz StdCtrls.pas):

postopek TButton. Kliknite; var Obrazec: TCustomForm; začeti
Obrazec: = GetParentForm (Self); če Oblika ničelna torej
Oblika. ModalResult: = ModalResult; podedovano Kliknite; konec;

Zgodi se, da je Lastnik (v tem primeru sekundarna oblika) TButtona dobi svoj ModalResult nastavljen glede na vrednost ModalResult TButtona. Če ne nastavite TButton. ModalResult, potem je vrednost mrNone (privzeto). Tudi če je TButton postavljen na drug kontrolni element, se za določitev rezultata še vedno uporablja nadrejeni obrazec. Zadnja vrstica nato prikliče dogodek Klik, ki je podedovan iz razreda prednikov.

Če želite razumeti, kaj se dogaja z Forms ModalResult, je vredno pregledati kodo v Forms.pas, ki bi jo morali najti v.. \ DelphiN \ Vir (kjer N predstavlja številko različice).

V funkciji ShowModal podjetja TForm se takoj po prikazu obrazca sproži zanka Ponavljaj, dokler ne preverja, ali spremenljivka ModalResult postane vrednost večja od nič. Ko se to zgodi, končna koda zapre obrazec.

ModalResult lahko nastavite v času načrtovanja, kot je opisano zgoraj, lahko pa tudi med izvajanjem nastavite lastnost ModalResult obrazca neposredno v kodo.

instagram story viewer