Moodimuodot tarjoavat erityisiä ominaisuuksia, joita meillä ei voi olla, kun niitä näytetään epämuodollisesti. Yleensä näytämme lomakkeen modaalisesti erottaaksemme sen prosessit kaikesta, mitä muuten voi tapahtua päämuodossa. Kun nämä prosessit ovat valmistuneet, saatat haluta tietää, onko käyttäjä sulkenut Tallenna- tai Peruuta-painikkeen sulkeaksesi modaalimuodon. Voit kirjoittaa mielenkiintoisen koodin tämän suorittamiseksi, mutta sen ei tarvitse olla vaikeaa. Delfoi toimittaa modaalimuodot ModalResult-ominaisuuden kanssa, jonka voimme lukea kertoaksemme kuinka käyttäjä poistui lomakkeesta.
Seuraava koodi palauttaa tuloksen, mutta kutsuva rutiini jättää sen huomioimatta:
var F: TForm2; alkaa F: = TForm2.Luo (nolla); F.ShowModal; F.Release; ...
Yllä oleva esimerkki näyttää vain lomakkeen, antaa käyttäjän tehdä jotain sen kanssa, sitten vapauttaa sen. Lomakkeen lopettamisen tarkistamiseksi meidän on hyödynnettävä sitä tosiasiaa, että ShowModal-menetelmä on toiminto, joka palauttaa yhden useista ModalResult-arvoista. Vaihda linja
F.ShowModal
että
jos F.ShowModal = mrOk sitten
Tarvitsemme joitain koodeja muodollisessa muodossa, jotta pystymme asettamaan kaiken, mitä haluamme noutaa. ModalResult on saatavana useammalla kuin yhdellä tavalla, koska TForm ei ole ainoa komponentti, jolla on ModalResult-ominaisuus - myös TButtonilla.
Katsokaamme ensin TButtonin ModalResult. Käynnistä uusi projekti ja lisää yksi lisälomake (Delphi IDE -päävalikko: Tiedosto -> Uusi -> Lomake). Tällä uudella lomakkeella on 'muoto2' nimi. Seuraavaksi lisää TB-painike (nimi: 'Button1') päälomakkeeseen (Form1), kaksoisnapsauta uutta painiketta ja kirjoita seuraava koodi:
menettely TForm1.Button1Click (Lähettäjä: TObject); var f: TForm2; alkaa f: = TForm2.Luo (nolla); yrittääjos f. ShowModal = mrOk sitten Kuvateksti: = 'Kyllä' muu Kuvateksti: = 'Ei'; vihdoin f. release; pää; pää;
Valitse nyt lisälomake. Anna sille kaksi TB-painiketta, merkitsemällä yksi 'Tallenna' (nimi: 'btnSave'; Kuvateksti: 'Tallenna') ja toinen 'Peruuta' (nimi: 'btnCancel'; Kuvateksti: 'Peruuta'). Valitse Tallenna-painike ja paina F4 tuodaksesi esiin Object Inspectorin, vieritä ylös / alas, kunnes löydät ominaisuuden ModalResult ja aseta se arvoon. Palaa lomakkeeseen ja valitse Peruuta-painike, paina F4, valitse omaisuus ModalResult ja aseta se arvoon mrCancel.
Se on niin yksinkertaista. Nyt paina F9 ajaa projekti. (Ympäristöasetuksistasi riippuen Delphi saattaa pyytää tiedostojen tallentamista.) Kun päälomake tulee esiin, paina aikaisemmin lisäämääsi Button1 näyttääksesi alamuodon. Kun alalaji tulee näkyviin, paina Tallenna-painiketta ja lomake sulkeutuu, kun palaat takaisin päämuodon muistiinpanoon, että sen tekstitys on "Kyllä". Tuo lapsilomake uudelleen esiin painamalla päälomakkeen painiketta, mutta paina tällä kertaa Peruuta-painiketta (tai Järjestelmä-valikon Sulje-kohtaa tai [x] -painiketta tekstitysalueella). Päälomakkeen otsikossa lukee "Ei".
Miten tämä toimii? Voit saada selville napsauttamalla TButton-tapahtumaa (osoitteesta StdCtrls.pas):
menettely TButton. Klikkaus; var Muoto: TCustomForm; alkaa Muoto: = GetParentForm (itse); jos Muoto nolla sitten Muodostavat. ModalResult: = ModalResult; peritty Klikkaus; pää;
Mitä tapahtuu on, että Omistaja (tässä tapauksessa sekundaarimuoto) TButton saa ModalResult-sarjansa TButtonin ModalResult-arvon mukaan. Jos et aseta TButton-painiketta. ModalResult, sitten arvo on mrNone (oletuksena). Vaikka TButton asetetaan toiseen säätimeen, vanhemmuotoa käytetään silti tuloksen asettamiseen. Viimeinen rivi kutsuu sitten esi-ikäluokastaan perinyt Click-tapahtuman.
Ymmärtääksesi, mitä Forms ModalResult -sovelluksella tapahtuu, kannattaa tarkistaa Forms.pas -koodi, jonka sinun pitäisi löytää osoitteesta.. \ DelphiN \ Source (missä N edustaa versionumeroa).
TForm: n ShowModal-toiminnossa, heti lomakkeen näyttämisen jälkeen, Repeat-kunnes -silmukka alkaa, mikä tarkistaa, että muuttujan ModalResult muuttuu nollaa suuremmaksi. Kun tämä tapahtuu, lopullinen koodi sulkee lomakkeen.
Voit asettaa ModalResult-suunnittelutyöhön, kuten yllä on kuvattu, mutta voit myös asettaa lomakkeen ModalResult-ominaisuuden suoraan koodiksi ajon aikana.