A modális formák olyan sajátosságokat kínálnak, amelyek nem állnak rendelkezésre, ha nem modálisan jelenítjük meg őket. Leggyakrabban egy űrlapot mutatunk ki módszeresen, hogy elkülönítsük annak folyamatait minden, ami egyébként megtörténhet a fő képernyőn. Miután ezek a folyamatok befejeződtek, érdemes tudni, hogy a felhasználó megnyomta-e a Mentés vagy a Mégsem gombot a modális forma bezárásához. Írhat néhány érdekes kódot ennek megvalósításához, de ennek nem kell, hogy nehéz legyen. Delphi a modális űrlapokat szolgáltatja a ModalResult tulajdonsággal, amelyet elolvashatunk annak elmondása érdekében, hogy a felhasználó kilépett az űrlapból.
A következő kód eredményt ad, de a hívó rutin figyelmen kívül hagyja azt:
var F: TForm2; kezdődik F: = TForm2.Létrehozás (nulla); F.ShowModal; F.Release; ...
A fenti példa csak megmutatja az űrlapot, lehetővé teszi a felhasználónak, hogy tegyen valamit vele, majd kiadja. Az űrlap lezárásának ellenőrzéséhez ki kell használnunk azt a tényt, hogy a ShowModal módszer egy olyan funkció, amely a ModalResult több érték egyikét adja vissza. Változtassa meg a sort
F.ShowModal
nak nek
ha F.ShowModal = mrOk azután
Szüksége van valamilyen kódra a modális formában, hogy beállítsuk azt, amit akarunk letölteni. A ModalResult megszerzésének több módja is van, mivel a TForm nem az egyetlen olyan elem, amely rendelkezik a ModalResult tulajdonsággal - a TButton is rendelkezik.
Először nézzük meg a TButton ModalResult-ját. Indítson el egy új projektet, és adjon hozzá egy további űrlapot (Delphi IDE Főmenü: Fájl -> Új -> Űrlap). Ennek az új űrlapnak 'Form2' neve lesz. Ezután adjon hozzá egy TB gombot (Név: 'Button1') a fő űrlaphoz (Form1), kattintson duplán az új gombra, és írja be a következő kódot:
eljárás TForm1.Button1Click (Feladó: TObject); var f: TForm2; kezdődik f: = TForm2.Létrehozás (nulla); próbáld kiha f. ShowModal = mrOk azután Felirat: = 'Igen' más Felirat: = 'Nem'; végül f. Kiadás; vég; vég;
Most válassza ki a kiegészítő űrlapot. Adj neki két TBgombot, egy megjelöléssel: „Mentés” (név: 'btnSave'; Felirat: 'Mentés' és a másik 'Mégse' (Név: 'btnCancel'; Felirat: 'Mégse'). Válassza a Mentés gombot, és nyomja meg az F4 billentyűt az Object Inspector előhívásához, görgessen felfelé / lefelé, amíg meg nem találja a ModalResult tulajdonságot, és állítsa mrOk-ra. Térjen vissza az űrlaphoz és válassza a Mégse gombot, nyomja meg az F4 billentyűt, válassza ki a ModalResult tulajdonságot, és állítsa be mrCancel.
Ennyire egyszerű. Most nyomja meg az F9 billentyűt a projekt futtatásához. (A környezeti beállításoktól függően a Delphi felkérheti a fájlok mentését.) Miután megjelenik a fő forma, nyomja meg a korábban hozzáadott Button1 gombot az alsó űrlap megjelenítéséhez. Amikor megjelenik az alsó űrlap, nyomja meg a Mentés gombot, és az űrlap bezáródik, és térjen vissza a fő űrlaphoz, és vegye figyelembe, hogy a felirata „igen”. Nyomja meg a fő képernyőgombot a gyermekűrlap újbóli előhívásához, de ezúttal nyomja meg a Mégse gombot (vagy a Rendszer menü Bezárás elemet vagy a [x] gombot a felirat területén). A fő űrlap felirata "Nem" lesz.
Hogy működik ez? Tudjon meg egy pillantást a TButton Click eseményére (a StdCtrls.pas oldalról):
eljárás TButton. Kattintson; var Forma: TCustomForm; kezdődik Form: = GetParentForm (Self); ha Forma nulla azután Forma. ModalResult: = ModalResult; örökölt Kattintson; vég;
Ami történik, az a Tulajdonos (ebben az esetben a másodlagos forma) a TButton megkapja a ModalResult halmazát a TButton ModalResult értéke alapján. Ha nem állítja be a TButton beállítást. ModalResult, akkor az érték mrNone (alapértelmezés szerint). Még ha a TButton egy másik vezérlőegységre kerül, akkor az alaplapot továbbra is használják az eredmény beállításához. Az utolsó sor ezután meghívja az őse osztálytól örökölt Click eseményt.
Annak megértése érdekében, hogy mi folyik a Forms ModalResult-val, érdemes áttekinteni a Forms.pas-ban szereplő kódot, amelyet megtalálnia kell a.. \ DelphiN \ Source-ban (ahol N a verziószámot jelöli).
A TForm ShowModal funkciójában, közvetlenül az űrlap megjelenése után, az Ismétlés-ig hurok elindul, amely folyamatosan ellenőrzi, hogy a ModalResult változó nullánál nagyobb értékre válik-e. Amikor ez megtörténik, a végleges kód bezárja az űrlapot.
Beállíthatja a ModalResult a tervezési időbe, a fentebb leírtak szerint, de az űrlap ModalResult tulajdonságát közvetlenül a kódban is beállíthatja futtatáskor.