Delphi kiemelték, hogy zárja be a forma, hogy elkerülje

Gyakran szükség van, hogy az ablak zárva volt, ha megnyomja a Kilépés gombot. Ez tényleg jó. Sőt, van egy saját joga: adatbevitel felület legyen képes működni egér nélkül. Ie úgy, hogy miután az adatbevitelt a billentyűzeten nyomja meg az Enter vagy a menekülés, hanem elérte, hogy az egér kurzort a cél, majd egy kis kereszt.

Talán úgy érzi, hogy a téma verték és ez a kérdés csak aggódni kezdőknek. Azonban még a tapasztalt programozók nem mindig tudja, hogyan kell csinálni. Ebben a cikkben azt is megmondja, hogy hogyan kell helyesen kezelni és más párbeszédablak kulcsokat.

Szóval Íme néhány lehetőség.

Ha van egy gomb formájában (TButton), akkor lehetséges, hogy az egyik gombot, hogy állítsa be a tulajdonság: Mégsem: = True. Amikor a felhasználó rákattint a menekülés, a munka onclick kezelő ezt a gombot, hogy a kulcs egyszerűen hívja a következő eljárás formájában.

A modális formában még egyszerűbb: ahelyett, hogy onclick esemény elég a ModalResult tulajdonság: = mrCancel. Miután megpróbálta felhívni OnClick gombot, a VCL néz az ingatlan, és ha eltér a nullától (<> mrNone), akkor regisztrálja azt ModalResult formában, ami a záró modális formában.

Ez az opció a helyes. de szükség van egy extra gombot a forma, ami nem mindig kényelmes.

E lehetőség elviszem egészen elkapjam bármely gomb megnyomásakor a forma szintjén. Ehhez tegye formájában KeyPreview tulajdonság: = True, és regisztrálni a felvezető onkeypress:

vagy obabotchik onkeydown. Vagy onkeyup.

Mint látható, ez a lehetőség nagyon egyszerű, és a leggyakoribb (amely megtalálható a terek az internet). De ez a lehetőség nem egészen helyes. A következőkben bemutatjuk, miután végzett több akciók formájában.

Hozzon létre egy combo doboz formájában rendszeresen (TCombobox), töltse fel tetszőleges értéket az elemek. Indítsa el az alkalmazást, nyissa meg az űrlapot (a combo box és a kutyavezető onkeypress). Most nyissa ki a legördülő listából, és nyomja meg az Escape. Mi történt? Ez így van, a forma zárva van. Bár én vagyok több, mint arról, hogy a felhasználó az akkori vár eltérő viselkedést a Kilépés gombot. Nevezetesen, az első préselés -, hogy bezárja a combo box, és csak a második megnyomása - záróeiemszerszámbói. (Megjegyezzük, hogy kivéve a kombinált listában az űrlapon lehet, és más alkatrészek, amelyek a saját kezelni a Kilépés gombot.)

Ez azért van, mert a forma felvezető onkeypress dolgozott, mielőtt a combo box megkapta az esetben nyomja meg az Escape (ne felejtsük, tedd a KeyPreview igaz?). Ha KeyPreview vissza Hamis, a forma onkeypress nincs értéke.

Tehát hogyan kell helyesen kezelni a Kilépés gombot?

Ebben a cikkben azt többször említettük az „párbeszéd nyomógombok”. Ezek a gombok: menekülés, az Enter, Tab és nyilak (és néhány más fontos, nem szabványos billentyűzet). Ezeket hívják így, mert ezek a speciális kulcsokat. Ezek nem kerülnek közvetlen adatbevitel, és arra használják, hogy ellenőrizzék ablakok (combo box - ez is egy ablakban).

Kezelhető párbeszéd nyomógombok a VCL használ üzenet CM_DIALOGKEY. Ez az üzenet jön először jelenlegi szabályozás (az egyik, hogy jelenleg a hangsúly), majd (mindaddig, amíg nem kerül feldolgozásra, azaz amíg Eredmény = 0) - Parental Control (akár a jelenlegi szinten formában). Ha CM_DIALOGKEY nem került feldolgozásra, akkor váltott onkeydown jelenlegi szabályozás.

A második példában, hogy utolérjék a menekülés a forma szintjén, rakjuk KeyPreview. Ez a funkció megtöri a leírt logikai: az összes billentyűzet üzeneteket először feldolgozott formában, majd jönnek kotrol.

Bárki, aki érdekelt lehet poizuchat VCL forráskódot, azt is, hogy a harmadik lehetőség.

Harmadik kiviteli alak. Universal.

CM_DIALOGKEY is kezelni kell, a többi a párbeszédablak segítségével. Itt egy tipikus példa: a formában van egy bemeneti (SomeEdit: tSzerkesztés) és asztal. Az ENTER a SomeEdit, a felhasználó elvárja, néhány reakció (például szűrés adatok a táblázatban). Azonban, ha a forma modális, és rajta van egy „OK” gombot (amely leleplezte Alapértelmezett tulajdonság: = True és ModalResult: = mrOk), az üzenet megnyomása nem lesz ideje, hogy elérje a Enter SomeEdit (munkálatok Kattintson a gombra, és a modális formában van zárva). Ebben az esetben lehetőség van arra, hogy írjon egy ilyen felvezető:

Nos, általában az egész ...

Kapcsolódó cikkek