Megosztás a következőn keresztül:


Vezérlőszöveg-műveletek szerkesztése

A rendszer automatikusan feldolgozza az összes felhasználó által kezdeményezett szöveges műveletet, és értesíti az alkalmazást a műveletek befejezésekor.

Az alábbi témakörök a felhasználó által kezdeményezett szövegműveleteket és az alkalmazás válaszát ismertetik:

Szerkesztési vezérlő kiválasztása

A felhasználó az egérrel vagy a TAB billentyű lenyomásával kijelölhet egy szerkesztési vezérlőt. A lapozási módszer egy előre definiált billentyűzetfelület része, amelyet a rendszer biztosít. A felület teljes leírását a párbeszédpanelekcímű témakörben talál. Amikor a felhasználó kiválaszt egy szerkesztési vezérlőt, a rendszer a billentyűzetfókuszt adja meg (lásd a "Billentyűzetfókusz és aktiválás" című részt A billentyűzetbemenetről) című témakörben), és fordított videóval kiemeli annak szövegét.

Szöveg beállítása és beolvasása

Az alkalmazások beállíthatják a szerkesztési vezérlők szövegét a SetWindowText függvénnyel, a SetDlgItemText függvénnyel, vagy egy WM_SETTEXT üzenet küldésével.

Ha egy szerkesztési vezérlőből szeretné lekérni az összes szöveget, először használja a GetWindowTextLength függvényt vagy a WM_GETTEXTLENGTH üzenetet a szöveghez szükséges puffer méretének meghatározásához. Ezután kérje le a szöveget a GetWindowText függvénnyel, a GetDlgItemText függvénnyel vagy a WM_GETTEXT üzenettel.

Szöveg kijelölése

A szerkesztési vezérlő kiválasztása után a felhasználó az egérrel vagy a billentyűzettel kijelölheti a vezérlő szövegét. Az alkalmazások a vezérlő EM_GETSEL üzenet küldésével lekérhetik az aktuális kijelölés kezdő és befejező karakterpozícióit egy szerkesztési vezérlőben. A záró pozíció visszatérési értéke egy nagyobb, mint a kijelölés utolsó karaktere (vagyis az utolsó karaktert követő első karakter pozíciója).

Az alkalmazások a szerkesztési vezérlők szövegét is kijelölhetik úgy, hogy a vezérlőnek egy EM_SETSEL üzenetet küldenek a kijelölés kezdő és befejező karakterindexeivel. Az alkalmazás például EM_SETSEL és EM_REPLACESEL használatával törölheti a szöveget egy szerkesztési vezérlőből.

Ez a három üzenet egyaránt vonatkozik az egysoros és a többsoros szerkesztési vezérlőkre.

Szöveg cseréje

Egy alkalmazás lecserélheti a kijelölt szöveget egy szerkesztési vezérlőben, ha egy EM_REPLACESEL üzenetet küld a vezérlőnek egy mutatóval a helyettesítő szövegre. Ha nincs aktuális kijelölés, EM_REPLACESEL beszúrja a helyettesítő szöveget a beszúrási pontra. Az alkalmazás EN_ERRSPACE értesítési kódot kaphat, ha a helyettesítő szöveg túllépi a rendelkezésre álló memóriát. Ez az üzenet az egysoros és a többsoros szerkesztési vezérlőkre is vonatkozik.

Az alkalmazások EM_REPLACESEL használhatják a szerkesztési vezérlő szövegének egy részét, vagy a SetDlgItemText függvényt az összes helyére.

Szerkesztési vezérlő által használt betűtípus módosítása

Az alkalmazások az WM_SETFONT üzenet elküldésével módosíthatják a szerkesztési vezérlő által használt betűtípust. A legtöbb alkalmazás ezt a WM_INITDIALOG üzenet feldolgozása során hajtja végre. A betűtípus módosítása nem változtatja meg a szerkesztési vezérlő méretét; előfordulhat, hogy az WM_SETFONT üzenetet küldő alkalmazásoknak le kell kérniük a szöveg betűmetrikáit, és újra kell számolni a szerkesztési vezérlő méretét. További információ a betűtípusokról és a betűmetrikákról: Betűtípusok és Szöveg.

Másolási beillesztés kivágása és műveletek törlése

A szöveg szerkesztési vezérlő és a vágólap közötti áthelyezésére négy üzenet áll rendelkezésre. A WM_COPY üzenet átmásolja az aktuális kijelölést (ha van ilyen) egy szerkesztési vezérlőből a vágólapra anélkül, hogy törölte volna azt a szerkesztési vezérlőből. A WM_CUT üzenet törli az aktuális kijelölést (ha van ilyen) a szerkesztési vezérlőben, és átmásolja a törölt szöveget a vágólapra. A WM_CLEAR üzenet törli az aktuális kijelölést (ha van ilyen) egy szerkesztési vezérlőből, de nem másolja a vágólapra (kivéve, ha a felhasználó lenyomta a SHIFT billentyűt). A WM_PASTE üzenet szövegeket másol a vágólapról egy szerkesztési vezérlőbe a beszúrási ponton. Ez a négy üzenet az egysoros és a többsoros szerkesztési vezérlőkre is vonatkozik.

Microsoft Windows NT 4.0 és újabb verziók: A szerkesztési vezérlők beépített helyi menüt tartalmaznak, amely megkönnyíti a felhasználó számára a szöveg áthelyezését a szerkesztési vezérlő és a vágólap között. A helyi menü akkor jelenik meg, amikor a felhasználó a jobb gombbal a vezérlőre kattint. A helyi menüben a következő parancsok találhatók: Visszavonás, Kivágás, Másolás, Beillesztés, Törlés, és Az összes kijelölése.

Szöveg módosítása

A felhasználó kijelölhet, törölhet vagy áthelyezhet szöveget egy szerkesztési vezérlőben. A rendszer minden szerkesztési vezérlőhöz egy belső jelzőt tart fenn, amely jelzi, hogy a vezérlő tartalma módosult-e. A rendszer törli ezt a jelzőt, amikor létrehozza a vezérlőt, és beállítja a jelölőt a vezérlő szövegének módosításakor. Egy alkalmazás lekérheti a módosításjelzőt egy EM_GETMODIFY üzenet küldésével. Az alkalmazás ezután beállíthatja vagy törölheti a módosításjelzőt egy EM_SETMODIFY üzenet küldésével. Ezek az üzenetek az egysoros és a többsoros szerkesztési vezérlőkre is érvényesek.

Felhasználó által beírt szöveg korlátozása

A szerkesztési vezérlőkbe beírható szöveg alapértelmezett korlátja 32 KB. Az alkalmazások módosíthatják az alapértelmezett korlátot egy EM_SETLIMITTEXT üzenet küldésével. Ez az üzenet kemény korlátot állít be arra a bájtszámra, amelyet a felhasználó be tud írni egy szerkesztési vezérlőbe, de nem érinti a vezérlőben az üzenet elküldésekor már szereplő szöveget, sem a SetDlgItemText függvény vagy a WM_SETTEXT üzenet által a vezérlőbe másolt szöveget. Tegyük fel például, hogy az alkalmazás a SetDlgItemText függvénnyel 500 bájtot helyez el egy szerkesztési vezérlőben, és a felhasználó 500 bájtot (összesen 1000 bájtot) is beír. Ha az alkalmazás ezután egy EM_SETLIMITTEXT üzenetet küld, amely 300 bájtra korlátozza a felhasználó által megadott szöveget, a szerkesztési vezérlőben már szereplő 1000 bájt megmarad, és a felhasználó nem tud további szöveget hozzáadni. Ha azonban az alkalmazás EM_SETLIMITTEXT üzenetet küld, amely a felhasználó által megadott szöveget 1300 bájtra korlátozza, az 1000 bájt megmarad, de a felhasználó további 300 bájtot adhat hozzá.

Amikor a felhasználó eléri a szerkesztési vezérlő karakterkorlátját, a rendszer egy EN_MAXTEXT értesítési kódot tartalmazó WM_COMMAND üzenetet küld az alkalmazásnak. Ez az értesítési kód nem jelenti azt, hogy a memória kimerült, de elérte a felhasználó által megadott szöveg korlátját; a felhasználó nem adhat meg több szöveget. A korlát módosításához az alkalmazásnak egy új EM_SETLIMITTEXT üzenetet kell küldenie a vezérlőnek egy magasabb korláttal.

A EM_SETLIMITTEXT és EN_MAXTEXThasználatára példaként tegyük fel, hogy az alkalmazásnak legfeljebb négy karakterre kell korlátoznia a felhasználót egy szerkesztési vezérlőben. Az alkalmazás EM_SETLIMITTEXT használna egy négy karakteres korlát megadásához. Ha a felhasználó egy ötödik karaktert próbált meg megadni, a rendszer egy EN_MAXTEXT értesítési kódot küld az alkalmazásnak.

Karakter- és vonalműveletek

Több üzenet is tartalmaz információt a szerkesztési vezérlőben lévő karakterekről és sorokról. Az üzenetek többsége egy indexet , általában nulla alapú számot ad vissza, amely egy karakterre vagy egy sorra hivatkozik. Egy n karaktert tartalmazó egysoros szerkesztési vezérlőben például a sorindex nulla, a karakterek pedig nulláról n-1-esre vannak indexelve. Az m és n karaktereket tartalmazó többsoros szerkesztési vezérlőkben a sorok indexelése nulláról m-1 értékre, a karakterek indexelése pedig nulla és n-1 között van. Vegye figyelembe, hogy a karakterindexelés figyelmen kívül hagyja a sortöréseket.

Az alkalmazások a szerkesztési vezérlőben lévő karakterek számát úgy határozhatják meg, hogy elküldik a WM_GETTEXTLENGTH üzenetet a szerkesztési vezérlőnek. Ez az üzenet a szöveg egysoros vagy többsoros szerkesztési vezérlőelemben szereplő hosszát adja vissza karakterekben (a végződő null karaktert nem beleértve). A EM_LINELENGTH üzenet egy sor karakterindexe által megadott vonal hosszát adja vissza karakterben. A visszaadott hossz nem tartalmaz kijelölt karaktereket. Egy alkalmazás használhatja ezeket az üzeneteket egysoros vagy többsoros szerkesztési vezérlőben.

A EM_GETFIRSTVISIBLELINE üzenet egy többsoros szerkesztési vezérlőelem legfelső látható vonalának nulla alapú indexét, vagy az egysoros szerkesztési vezérlő első látható karakterének nulla alapú indexét adja vissza. Az alkalmazások átmásolhatnak egy vonalat egy szerkesztési vezérlőből egy pufferbe úgy, hogy elküldik a EM_GETLINE üzenetet a szerkesztési vezérlőnek. A sort a sorindex határozza meg, és a fogadó puffer első szava tartalmazza a pufferbe másolandó bájtok maximális számát. A visszatérési érték a másolt bájtok száma. Ez az üzenet egysoros vagy többsoros szerkesztési vezérlőben is használható.

A többsoros szerkesztési vezérlőben lévő sorok adatainak visszaadására egyedi üzenetek érhetők el. A EM_GETLINECOUNT üzenet a szerkesztési vezérlőben lévő sorok számát adja vissza. A EM_LINEFROMCHAR üzenet a megadott karakterindexet tartalmazó sor indexét adja vissza. A EM_LINEINDEX üzenet egy adott sor első karakterének indexét adja vissza.

Szöveg görgetése szerkesztési vezérlőben

Ha szerkesztési vezérlőben szeretné implementálni a görgetést, használhatja Vezérlőtípusok és stílusok szerkesztésecímű témakörben ismertetett automatikus görgetési stílusokat, vagy explicit módon hozzáadhat görgetősávokat a szerkesztési vezérlőhöz. Vízszintes görgetősáv hozzáadásához használja a stílus WS_HSCROLL; függőleges görgetősáv hozzáadásához használja a WS_VSCROLLstílust. A görgetősávokkal rendelkező szerkesztési vezérlők saját görgetősáv-üzeneteket dolgoznak fel. A vezérlők szerkesztéséhez görgetősávok hozzáadásáról további információt Görgetősávokcímű témakörben talál.

A rendszer három üzenetet biztosít, amelyeket egy alkalmazás küldhet egy görgetősávokkal rendelkező szerkesztési vezérlőnek. A EM_LINESCROLL üzenet függőlegesen és vízszintesen is görgetheti a többsoros szerkesztési vezérlőt. Az lParam paraméter az aktuális vonaltól kezdődően függőlegesen görgethető vonalak számát adja meg, a wParam paraméter pedig a vízszintesen görgetendő karakterek számát adja meg az aktuális karaktertől kezdve. A szerkesztési vezérlő nem nyugtázza a vízszintes görgető üzeneteket, ha ES_CENTER vagy ES_RIGHT stílussal rendelkezik. A EM_LINESCROLL üzenet csak a többsoros szerkesztési vezérlőkre vonatkozik.

A EM_SCROLL üzenet függőlegesen görget egy többsoros szerkesztési vezérlőt. A wParam paraméter határozza meg a görgetési műveletet. A EM_SCROLL üzenet csak a többsoros szerkesztési vezérlőkre vonatkozik. EM_SCROLL hatása megegyezik a WM_VSCROLL üzenetével.

A EM_SCROLLCARET üzenet egy szerkesztési vezérlőben görgeti a gondnokot a nézetbe.

Tabulátorok és margók beállítása

Az alkalmazások a EM_SETTABSTOPS üzenettel állíthatnak be tabulátorokat többsoros szerkesztési vezérlőkben. (A tabulátor alapértelmezett értéke nyolc karakter.) Amikor egy alkalmazás szöveget ad hozzá a szerkesztési vezérlőhöz, a szöveg tabulátorkarakterei automatikusan térközt hoznak létre a következő tabulátorig. A EM_SETTABSTOPS üzenet nem okozza automatikusan a rendszer számára a szöveg újraírását. Ehhez az alkalmazás meghívhatja a InvalidateRect függvényt. A EM_SETTABSTOPS üzenet csak a többsoros szerkesztési vezérlőkre vonatkozik.

Egy alkalmazás a szerkesztési vezérlő bal és jobb margójának szélességét a EM_SETMARGINS üzenettel állíthatja be. Az üzenet elküldése után a rendszer újrarajzli a szerkesztési vezérlőt, hogy tükrözze az új margóbeállításokat. Az alkalmazások a EM_GETMARGINS üzenet elküldésével lekérhetik a bal vagy a jobb margó szélességét. Alapértelmezés szerint a szerkesztési vezérlő margói elég szélesek ahhoz, hogy a szerkesztési vezérlőben használt jelenlegi betűtípushoz a legnagyobb karakter vízszintes túlnyúlása (negatív ABC-szélesség) legyen beállítva.

Felhasználói bevitel elrejtése

Az alkalmazások jelszó karaktert használhatnak a szerkesztési vezérlőben a felhasználói bemenet elrejtéséhez. Ha egy jelszó karakter be van állítva, az a felhasználó által beszúrt karakterek helyett jelenik meg. Jelszókarakterek eltávolításakor a vezérlő megjeleníti a felhasználó által használt karaktereket. Ha az alkalmazás egysoros szerkesztési vezérlőt hoz létre a stílus ES_PASSWORDhasználatával, az alapértelmezett jelszó karakter egy csillag (*). Az alkalmazások a EM_SETPASSWORDCHAR üzenet használatával eltávolíthatnak vagy definiálhatnak egy másik jelszókaraktelyt, és a EM_GETPASSWORDCHAR üzenetet az aktuális jelszó karakter lekéréséhez. Ezek az üzenetek csak az egysoros szerkesztési vezérlőkre vonatkoznak.

Egész számok használata

A szerkesztési vezérlőknek két egész számkonvertálási függvénye van, amelyek csak számokat tartalmaznak. A SetDlgItemInt függvény létrehozza egy adott egész szám sztringképét (aláírt vagy aláíratlan), és elküldi a sztringet egy szerkesztési vezérlőnek. SetDlgItemInt nem ad vissza értéket. A GetDlgItemInt függvény egy egész számot (aláírt vagy aláíratlan) hoz létre a sztring-ábrázolásból egy szerkesztési vezérlőben. GetDlgItemInt az egész számot (vagy hibaértéket) adja vissza.

Szövegműveletek visszavonása

Minden szerkesztési vezérlő egy visszavonási jelzőt tart fenn, amely jelzi, hogy egy alkalmazás vissza tudja-e fordítani vagy visszavonni a szerkesztési vezérlő legutóbbi műveletét (például egy szöveg törlésének visszavonását). A szerkesztési vezérlő úgy állítja be a visszavonás jelzőt, hogy a művelet visszavonható, és alaphelyzetbe állítja azt, hogy a művelet nem vonható vissza. Egy alkalmazás egy EM_CANUNDO üzenet küldésével meghatározhatja a visszavonási jelző beállítását.

Egy alkalmazás visszavonhatja a legutóbbi műveletet egy EM_UNDO üzenet küldésével. A művelet visszavonható, feltéve, hogy először nem történik más szerkesztésvezérlési művelet. A felhasználó például törölheti a szöveget, lecserélheti a szöveget (visszavonhatja a törlést), majd törölheti ismét a szöveget (visszavonhatja a csere). A EM_UNDO üzenet az egysoros és a többsoros szerkesztési vezérlőkre is vonatkozik, és mindig egysoros szerkesztési vezérlőkhöz használható.

Egy alkalmazás visszaállíthatja a szerkesztési vezérlő visszavonási jelzőjét egy EM_EMPTYUNDOBUFFER üzenet küldésével. A rendszer automatikusan visszaállítja a visszavonási jelzőt, amikor egy szerkesztési vezérlő EM_SETHANDLE vagy WM_SETTEXT üzenetet kap. A SetDlgItemText függvény WM_SETTEXT üzenetet küld.

Wordwrap és sortörések kezelése

Az alkalmazások többsoros szerkesztési vezérlőkkel használhatják a Wordwrap-függvényeket a következő sorba burkolni kívánt szó- vagy szótöredék megkereséséhez. A rendszer által biztosított alapértelmezett Wordwrap függvény használatával a sorok mindig a szavak közötti szóközöknél végződnek. Az alkalmazások saját Wordwrap-függvényt adhatnak meg egy EditWordBreakProc Wordwrap függvény megadásával, és a szerkesztési vezérlő elküldésével egy EM_SETWORDBREAKPROC üzenetet. Egy alkalmazás lekérheti az aktuális Wordwrap függvény címét egy EM_GETWORDBREAKPROC üzenet küldésével.

Egy alkalmazás többsoros szerkesztési vezérlőt irányíthat arra, hogy automatikusan hozzáadjon vagy eltávolítson egy lágy vonaltörési karaktert (két kocsivissza és egy sorcsatorna) a becsomagolt szövegsorok végén. Egy alkalmazás a szerkesztési vezérlő EM_FMTLINES üzenet küldésével be- vagy kikapcsolhatja ezt a funkciót. Ez az üzenet csak a többsoros szerkesztési vezérlőkre vonatkozik, és nem érinti a kemény vonaltöréssel végződő sorokat (egy kocsivissza és egy, a felhasználó által megadott vonalcsatorna). A többsoros szerkesztési vezérlőkben az alkalmazás megadhatja a ES_WANTRETURN stílust is, amely kérheti, hogy a rendszer kocsivisszaszúrjon, amikor a felhasználó lenyomja az ENTER billentyűt a szerkesztési vezérlőben.

Pontok és karakterek beolvasása

A szerkesztési vezérlő ügyfélterületének egy adott pontjához legközelebb eső karakter meghatározásához küldje el a EM_CHARFROMPOS üzenetet a vezérlőnek. Az üzenet a ponthoz legközelebbi karakter karakterindexét és sorindexét adja vissza. Hasonlóképpen lekérheti egy adott karakter ügyfélterületének koordinátáit a EM_POSFROMCHAR üzenet elküldésével. Az üzenet a megadott karakter bal felső sarkának x és y koordinátáit adja vissza.

Sztringek automatikus kiegészítése

Az automatikus kiegészítés teljes sztringekké bontja ki a szerkesztési vezérlőben részben megadott sztringeket. Ha például egy felhasználó elkezdi beírni a Windows Internet Explorer eszköztárába beágyazott URL-címet a Cím szerkesztése vezérlőben, az automatikus kiegészítés a sztringet egy vagy több teljes URL-címre bontja, amelyek összhangban vannak a meglévő részleges sztringgel. Egy részleges URL-sztring, például a "mikrofon" kibontható a "https://www.microsoft.com" vagy "https://www.microsoft.com/windows". Az automatikus kiegészítés általában szerkesztési vezérlőkkel vagy beágyazott szerkesztési vezérlőkkel használható.

További információ: IAutoComplete és IAutoComplete2 felület dokumentációja.

Összetett szkript a vezérlők szerkesztésében

Az összetett szkriptek olyan nyelv, amelynek nyomtatott formája nem egyszerű. Egy összetett szkript például lehetővé teheti a kétirányú renderelést, a karakterjelek környezetfüggő alakítását vagy a karakterek kombinálását. A szabványos szerkesztési vezérlőket kiterjesztettük a többnyelvű szövegek és összetett szkriptek támogatására. Ez nem csak a bevitelt és a megjelenítést foglalja magában, hanem a kurzor mozgásának helyességét is karakterfürtök felett (például Thai és Devanagari szkriptben).

Egy jól megírt alkalmazás automatikusan, módosítás nélkül megkapja ezt a támogatást. Érdemes megfontolni a jobbról balra olvasási sorrend és a jobb igazítás támogatását. Ebben az esetben a szerkesztési vezérlőablak kiterjesztett stílusjelzőit váltva vezérelheti ezeket az attribútumokat, ahogyan az az alábbi példában látható.

// ID_EDITCONTROL is the control ID in the resource file.
HANDLE hWndEdit = GetDlgItem(hDlg, ID_EDITCONTROL);
LONG lAlign = GetWindowLong(hWndEdit, GWL_EXSTYLE) ;

// To toggle alignment
lAlign ^= WS_EX_RIGHT ;

// To toggle reading order
lAlign ^= WS_EX_RTLREADING ;

Az lAlign értékének beállítása után engedélyezze az új megjelenítést a szerkesztési vezérlőablak bővített stílusának az alábbiak szerint történő beállításával.

// This assumes your edit control is in a dialog box. If not, 
// get the edit control handle from another source.

SetWindowLong(hWndEdit, GWL_EXSTYLE, lAlign);
InvalidateRect(hWndEdit, NULL, FALSE);

Az Uniscribe egy másik függvénykészlet, amely finom vezérlést biztosít az összetett szkriptek feldolgozásához. További információ: Uniscribe.