Cikkek - Lazarus formanyomtatványokkal való együttműködés - Információs portál a fejlesztőknek a szabad pascalon -

Formák megnyitása modális üzemmódban

A kiegészítő formanyomtatvány megnyitása legnyilvánvalóbb módja az, hogy kiválaszthatja vagy kereshet egy értéket a könyvtárban, amelynek később visszatér, például a talált elem kódja a fő űrlaphoz. Ezt az űrlapot modálisan kell megnyitni, mivel nincs értelme a főprogram végrehajtásának folytatásához, amíg a választás meg nem történik, és az űrlap nincs lezárva. Próbáljuk meg végrehajtani ezt.







Példaként hozzon létre egy új projektet, és helyezzen el néhány beviteli mezőt és gombot a fő formában:

Cikkek - Lazarus formanyomtatványokkal való együttműködés - Információs portál a fejlesztőknek a szabad pascalon -

Vizsgálati feladatként további formanyomtatványt nyitunk egy beviteli mezővel, amely eredetileg tartalmaznia kell a fő formanyomtatvány megfelelő mezőjét. Ezután módosítsuk ezt a szöveget és visszaadjuk a frissített értéket a fő űrlapra. Ehhez először létre kell hozni egy ilyen formát:

Cikkek - Lazarus formanyomtatványokkal való együttműködés - Információs portál a fejlesztőknek a szabad pascalon -

Mivel a szoftver interfész az átviteli paraméter fogja használni TestValue tulajdonság határozza meg a nyilvános részén az osztály formában. Mi azonosítja és végre több mint nyilvánvaló módszerek beállítására, és elolvassa a ingatlan értéke, valamint az eseménykezelő gomb megnyomásával, ahol az ingatlan be van állítva, így ModalResult mrOK, ami a bezárását (de nem teszi tönkre!) Form.

A legérdekesebb azonban a RunTestForm funkció. Amint látja, a formanyomtatványon kívül van meghatározva, bár ugyanabban a modulban. Ez különösnek tűnhet a VB programozók számára, ahol az osztálymodul teljesen azonosítja az osztályt. Mint Delphi, Lazarusban ez nem így van. Bár csak egy formátum definiálható egy modulban (különben a formák vizuális tervezője nem fog működni), az alkalmazás egyéb elemeit külön nem kell végrehajtani. Esetünkben a RunTestForm függvény tartalmazza az űrlap létrehozásához szükséges kódot, elküldi a beviteli mező kezdeti értékét és visszaadja a szerkesztett értéket. Nyilvánvaló, hogy a RunTestForm az űrlap osztályhoz kapcsolódik, ezért ésszerű (bár nem szükséges) az űrlapmodulba helyezni.







Most nézzük meg, hogyan kell mindezt használni az alap formában. Adja hozzá az eseménykezelőknek a RunTestForm funkcióhoz tartozó hívásokat, így a fő űrlap modul végrehajtási szakasza így fog kinézni:

Formanyomtatvány megnyitása

Tehát először is meg kell állapítanunk, hogy teljesen más a célja, a modellformák viselkedése és az ezzel való együttmûködés elvei. Először is, nem-modális formák nem célja, hogy a visszatérési értékek, mivel azok felfedezése utáni program nem állt le előre a záró formájában, és továbbra is fut. Emiatt, ha nem különleges intézkedéseket mutatót a képernyő megnyitásához elvész befejezése után a kódot, hogy létrehozza (ebben az esetben - a funkció RunTestForm). Ez olyan szörnyű? A legtöbb esetben nem. Ne feledje, hogy ha létrehozott egy űrlap-példányt, az alkalmazásparaméter átkerült a konstruktornak? Tehát: Az alkalmazás olyan objektum, amely a teljes alkalmazást képviseli. Ezzel az űrlap létrehozásával emlékezni fog rá a jelenlétére, és képesek leszünk kihasználni ezt. A fő formában létrehozunk egy listát, amelyet kitöltünk az alkalmazásban megnyitott űrlapok nevével. A fő forma kicsit változik, és így néz ki:

Cikkek - Lazarus formanyomtatványokkal való együttműködés - Információs portál a fejlesztőknek a szabad pascalon -

Felhívjuk a figyelmet arra, hogy kijelöltük az új FillWindowsList metódust, amely csak kiegészíti a jelentkezési űrlapok listáját. Végrehajtása nem túl bonyolult:

Van itt valami érdekes pont. Az a tény, hogy az Alkalmazásobjektum tartalmazza az összes tulajdonosi összetevő egyetlen listáját, ellenőriznie kell, hogy a következő összetevő pontosan a TForm.

Azonban mi a használata az űrlapok felsorolásának. Meg kell csinálnod, hogy átválthatsz bármelyikre. Egy valós alkalmazás, akkor biztosan jobban köze a menü, de a kód lesz egy kicsit nehézkes, ezért ebben az egyszerű példában az első listát fogják használni, másrészt kihagyja a szükséges ellenőrzéseket a valós alkalmazás.

Az alábbiakban a fő űrlap modul végrehajtási szakaszának teljes kódja látható. Felhívjuk a figyelmet arra, hogy a RunTestForm metódus meghívásával nem várunk a visszatérési értékre, de az alkalmazásablakok listájának betöltésére vonatkozó eljárást hívjuk.

Most létrehozunk egy további űrlapot, amelyet a fő formában nem-modális módban fogunk megnyitni. Kívülről semmi sem fog különbözni az előző fejezetben tárgyalt modális formától, de a kód kissé megváltozik. Ne feledje, hogy a TestValue tulajdonság most csak írható, és a RunTestForm módszer egy függvény helyett eljárást váltott ki.

Volt egy új globális változó is - az Form2Count formátumú számláló. Szükségünk lesz rá, amikor létrehozunk egy nevet a létrehozandó űrlap példányára. Minden alkalmazásobjektumnak egyedi nevekkel kell rendelkeznie, de az LCL nem törődik vele, ezért magának kell eljárnia. Az Form2Count változóval társított kód elég triviális, ezért nem fogunk élni.

A megvalósítás is sokat változott. Az űrlap mostantól megjelenik a Show metódus meghívásával, nem a ShowModal használatával, így a program nem kerül át a létrehozott űrlapra, mielőtt bezárt volna, de folytatódik. Az erőforrások lezárását és felszabadítását most a formában kell kezelni. Ehhez az űrlap bezárásának folyamatát feldolgozó eljárásban a CloseAction változót caFree-ra állítjuk be. A gomb megnyomásával a ModalResult értékét nem lehet beállítani, hanem kifejezetten hívja a Close módszert.

Ha nem csak elolvasta ezt a cikket, de létrehozta a leírt tesztprogramot, itt az ideje elindítani. Ne felejtsd el eltávolítani a kiegészítő űrlapot az automatikusan létrehozott alkalmazások listájáról.