Operace upravit text ovládacího prvku
Systém automaticky zpracuje všechny textové operace iniciované uživatelem a po dokončení operací aplikaci upozorní.
Následující témata popisují operace textu iniciované uživatelem a odpověď aplikace:
- výběr ovládacího prvku pro úpravy
- nastavení a načítání textových
- výběr textového
- nahrazení textového
- změna písma používaného ovládacím pro úpravy
- operace Vyjmutí kopírování a vymazání
- úpravy textového
- omezení uživatelem zadaného textového
- operace znaků a řádků
- posouvání textu v ovládacím prvku Pro úpravy
- nastavení zarážek tabulátoru a okrajů
- skrytí uživatelského vstupu
- použití celých čísel
- vrácení textové operace zpět
- zpracování wordwrapu a konců řádků
- načítání bodů a znaků
- automatické dokončování řetězců
- složitý skript v ovládacích prvcích pro úpravy
Výběr ovládacího prvku pro úpravy
Uživatel může vybrat ovládací prvek pro úpravy tak, že na něj klikne myší nebo stisknete klávesu TAB a přesune se na něj. Metoda tabbing je součástí předdefinovaného rozhraní klávesnice, které systém poskytuje. Úplný popis tohoto rozhraní naleznete v tématu Dialogová okna. Když uživatel vybere ovládací prvek pro úpravy, systém dává ovládacímu prvku fokus klávesnice (viz "Fokus klávesnice a aktivace" v O klávesových vstupech) a zvýrazní jeho text pomocí reverzního videa.
Nastavení a načítání textu
Aplikace může nastavit text ovládacího prvku pro úpravy pomocí funkce SetWindowText, funkce SetDlgItemText nebo odesláním ovládacího prvku WM_SETTEXT zprávu.
Pokud chcete načíst veškerý text z ovládacího prvku pro úpravy, nejprve použijte funkci GetWindowTextLength nebo zprávu WM_GETTEXTLENGTH k určení velikosti vyrovnávací paměti potřebné k zahrnutí textu. Dále načtěte text pomocí funkce GetWindowText, funkce GetDlgItemText nebo zprávy WM_GETTEXT.
Výběr textu
Po výběru ovládacího prvku pro úpravy může uživatel vybrat text v ovládacím prvku pomocí myši nebo klávesnice. Aplikace může načíst počáteční a koncovou pozici znaků aktuálního výběru v ovládacím prvku pro úpravy odesláním ovládacího prvku EM_GETSEL zprávu. Návratová hodnota pro koncovou pozici je jedna větší než poslední znak ve výběru (to znamená pozice prvního znaku za posledním vybraným znakem).
Aplikace může také vybrat text v ovládacím prvku pro úpravy odesláním ovládacího prvku EM_SETSEL zprávu s počátečním a koncovým indexem znaků pro výběr. Aplikace může například pomocí EM_SETSEL s EM_REPLACESEL odstranit text z ovládacího prvku pro úpravy.
Tyto tři zprávy platí pro jednořádkové i víceřádkové ovládací prvky pro úpravy.
Nahrazení textu
Aplikace může nahradit vybraný text v ovládacím prvku pro úpravy odesláním ovládacího prvku EM_REPLACESEL zprávu ukazatelem na náhradní text. Pokud neexistuje žádný aktuální výběr, EM_REPLACESEL vloží náhradní text na pozici kurzoru. Aplikace může obdržet kód oznámení EN_ERRSPACE, pokud náhradní text překročí dostupnou paměť. Tato zpráva platí pro ovládací prvky pro úpravy s jedním řádkem i víceřádkovým ovládáním.
Aplikace může použít EM_REPLACESEL k nahrazení části textu ovládacího prvku pro úpravy nebo funkce SetDlgItemText nahradit všechny.
Změna písma používaného ovládacím prvku pro úpravy
Aplikace může změnit písmo, které ovládací prvek pro úpravy používá, odesláním zprávy WM_SETFONT. Většina aplikací to dělá při zpracování zprávy WM_INITDIALOG. Změna písma nezmění velikost ovládacího prvku pro úpravy; aplikace, které odesílají zprávu WM_SETFONT, možná budou muset načíst metriky písma pro text a přepočítat velikost ovládacího prvku pro úpravy. Další informace o písmech a metrikách písem najdete v tématu Písma a textové.
Operace Vyjmutí operace vložení a vymazání kopírování
Existují čtyři zprávy pro přesouvání textu mezi ovládacím prvku pro úpravy a schránkou. Zpráva WM_COPY zkopíruje aktuální výběr (pokud existuje) z ovládacího prvku pro úpravy do schránky bez odstranění z ovládacího prvku pro úpravy. Zpráva WM_CUT odstraní aktuální výběr (pokud existuje) v ovládacím prvku pro úpravy a zkopíruje odstraněný text do schránky. Zpráva WM_CLEAR odstraní aktuální výběr (pokud existuje) z ovládacího prvku pro úpravy, ale nezkopíruje ho do schránky (pokud uživatel nestiskl klávesu SHIFT). Zpráva WM_PASTE zkopíruje text ze schránky do ovládacího prvku pro úpravy v místě vložení. Tyto čtyři zprávy platí pro jednořádkové i víceřádkové ovládací prvky pro úpravy.
Microsoft Windows NT 4.0 a novější: Ovládací prvek pro úpravy obsahuje integrovanou místní nabídku, která uživateli usnadňuje přesouvání textu mezi ovládacím prvku pro úpravy a schránkou. Místní nabídka se zobrazí, když uživatel klikne pravým tlačítkem myši na ovládací prvek. Příkazy v místní nabídce zahrnují Zpět, Vyjmout, Kopírovat, Vložit, Odstranita Vybrat všechny.
Úprava textu
Uživatel může vybrat, odstranit nebo přesunout text v ovládacím prvku pro úpravy. Systém udržuje interní příznak pro každý ovládací prvek pro úpravy označující, zda byl obsah ovládacího prvku změněn. Systém vymaže tento příznak při vytváření ovládacího prvku a nastaví příznak při každé změně textu v ovládacím prvku. Aplikace může načíst příznak úpravy odesláním ovládacího prvku EM_GETMODIFY zprávu. Aplikace pak může příznak úprav nastavit nebo vymazat odesláním ovládacího prvku EM_SETMODIFY zprávu. Tyto zprávy platí pro jednořádkové i víceřádkové ovládací prvky pro úpravy.
Omezení zadaného textu uživatelem
Výchozí limit množství textu, který může uživatel zadat do ovládacího prvku pro úpravy, je 32 kB. Aplikace může změnit výchozí limit odesláním ovládacího prvku EM_SETLIMITTEXT zprávu. Tato zpráva nastaví pevný limit počtu bajtů, které uživatel může zadat do ovládacího prvku pro úpravy, ale nemá vliv na text, který je již v ovládacím prvku, když byla zpráva odeslána, ani text zkopírován do ovládacího prvku SetDlgItemText funkce nebo WM_SETTEXT zprávy. Předpokládejme například, že aplikace používá funkci SetDlgItemText k umístění 500 bajtů do ovládacího prvku pro úpravy a uživatel také zadá 500 bajtů (celkem 1 000 bajtů). Pokud aplikace odešle EM_SETLIMITTEXT zprávu, která omezuje uživatelem zadaný text na 300 bajtů, 1 000 bajtů, které už v ovládacím prvku pro úpravy zůstanou a uživatel nemůže přidat další text. Pokud aplikace odešle EM_SETLIMITTEXT zprávu, která omezuje uživatelem zadaný text na 1 300 bajtů, zůstane 1 000 bajtů, ale uživatel může přidat dalších 300 bajtů.
Když uživatel dosáhne limitu znaků ovládacího prvku pro úpravy, systém odešle aplikaci WM_COMMAND zprávu obsahující kód oznámení EN_MAXTEXT. Tento kód oznámení neznamená, že paměť byla vyčerpána, ale že bylo dosaženo limitu pro text zadaný uživatelem; uživatel nemůže zadat žádný další text. Pokud chcete tento limit změnit, musí aplikace odeslat ovládací prvek nové EM_SETLIMITTEXT zprávy s vyšším limitem.
Jako příklad použití EM_SETLIMITTEXT a EN_MAXTEXTpředpokládejme, že aplikace musí omezit uživatele na maximálně čtyři znaky v ovládacím prvku pro úpravy. Aplikace by použila EM_SETLIMITTEXT k určení limitu čtyř znaků. Pokud se uživatel pokusil zadat pátý znak, systém odešle do aplikace kód oznámení EN_MAXTEXT.
Operace znaků a řádků
Existuje několik zpráv, které vracejí informace o znacích a řádcích v ovládacím prvku pro úpravy. Většina zpráv vrací index, obvykle číslo založené na nule, aby odkazolo na znak nebo řádek. Například v ovládacím prvku pro úpravy s jedním řádkem, který obsahuje n znaků, je index řádku nula a znaky se indexují od nuly do n-1. Ve víceřádkovém ovládacím prvku pro úpravy, který obsahuje řádky m a n znaků, jsou řádky indexovány od nuly do m-1 a znaky jsou indexovány od nuly do n-1. Všimněte si, že indexování znaků ignoruje konce řádků.
Aplikace může určit počet znaků v ovládacím prvku pro úpravy odesláním zprávy WM_GETTEXTLENGTH do ovládacího prvku pro úpravy. Tato zpráva vrátí délku textu v znaky (bez ukončujícího znaku null) v jednom řádku nebo víceřádkovém ovládacím prvku pro úpravy. Zpráva EM_LINELENGTH vrátí délku řádku určeného indexem znaku v řádku. Vrácená délka neobsahuje žádné vybrané znaky. Aplikace může tyto zprávy používat v jednom řádku nebo víceřádkovém ovládacím prvku pro úpravy.
Zpráva EM_GETFIRSTVISIBLELINE vrátí index založený na nule horního viditelného řádku v ovládacím prvku pro víceřádkové úpravy nebo index založený na nule prvního viditelného znaku v ovládacím prvku pro úpravy s jedním řádkem. Aplikace může zkopírovat řádek z ovládacího prvku pro úpravy do vyrovnávací paměti odesláním EM_GETLINE zprávy do ovládacího prvku pro úpravy. Řádek je určen indexem řádku a první slovo přijímající vyrovnávací paměti obsahuje maximální počet bajtů, které se mají zkopírovat do vyrovnávací paměti. Vrácená hodnota je počet zkopírovaných bajtů. Tuto zprávu lze použít také v jednom řádku nebo víceřádkovém ovládacím prvku pro úpravy.
K dispozici jsou jedinečné zprávy, které vrátí informace o řádku v ovládacím prvku pro víceřádkové úpravy. Zpráva EM_GETLINECOUNT vrátí počet řádků v ovládacím prvku pro úpravy. Zpráva EM_LINEFROMCHAR vrátí index řádku obsahujícího zadaný znakový index. Zpráva EM_LINEINDEX vrátí index prvního znaku v zadaném řádku.
Posouvání textu v ovládacím prvku Pro úpravy
Chcete-li implementovat posouvání v ovládacím prvku pro úpravy, můžete použít styly automatického posouvání popisované v upravit typy ovládacích prvků a stylynebo můžete explicitně přidat posuvníky do ovládacího prvku pro úpravy. Chcete-li přidat vodorovný posuvník, použijte styl WS_HSCROLL; chcete-li přidat svislý posuvník, použijte styl WS_VSCROLL. Ovládací prvek pro úpravy s posuvníky zpracovává vlastní zprávy posuvníku. Podrobné informace o přidávání posuvníků pro úpravy ovládacích prvků naleznete v tématu posuvníky.
Systém poskytuje tři zprávy, které může aplikace odeslat do ovládacího prvku pro úpravy pomocí posuvníků. Zpráva EM_LINESCROLL může posunout ovládací prvek pro víceřádkové úpravy svisle i vodorovně. Parametr lParam určuje počet řádků, které se mají posunout svisle od aktuálního řádku, a parametr wParam určuje počet znaků, které se mají posunout vodorovně počínaje aktuálním znakem. Ovládací prvek pro úpravy nepotvrzuje vodorovné posouvání zpráv, pokud má styl ES_CENTER nebo ES_RIGHT. Zpráva EM_LINESCROLL platí jenom pro ovládací prvky pro úpravy ve víceřádkovém zobrazení.
Zpráva EM_SCROLL posune ovládací prvek pro víceřádkové úpravy svisle. Parametr wParam určuje akci posouvání. Zpráva EM_SCROLL platí jenom pro ovládací prvky pro úpravy ve víceřádkovém zobrazení. EM_SCROLL má stejný účinek jako zpráva WM_VSCROLL.
Zpráva EM_SCROLLCARET posune stříšku do zobrazení v ovládacím prvku pro úpravy.
Nastavení zarážek tabulátoru a okrajů
Aplikace může nastavit zarážky tabulátoru v ovládacím prvku pro víceřádkové úpravy pomocí zprávy EM_SETTABSTOPS. (Výchozí hodnota pro zarážku tabulátoru je osm znaků.) Když aplikace přidá text do ovládacího prvku pro úpravy, znaky tabulátoru v textu automaticky vygenerují mezeru až do další zarážky tabulátoru. Zpráva EM_SETTABSTOPS automaticky nezpůsobí, aby systém překreslil text. K tomu může aplikace volat funkci InvalidateRect. Zpráva EM_SETTABSTOPS se vztahuje pouze na ovládací prvky pro víceřádkové úpravy.
Aplikace může nastavit šířku levého a pravého okraje ovládacího prvku pro úpravy pomocí zprávy EM_SETMARGINS. Po odeslání této zprávy systém překreslí ovládací prvek pro úpravy tak, aby odrážel nové nastavení okrajů. Aplikace může načíst šířku levého nebo pravého okraje odesláním zprávy EM_GETMARGINS. Ve výchozím nastavení jsou okraje ovládacích prvků pro úpravy nastaveny dostatečně široké, aby se přizpůsobily největšímu znaménku vodorovného převisu (záporné šířky ABC) pro aktuální písmo použité v ovládacím prvku pro úpravy.
Skrytí vstupu uživatele
Aplikace může pomocí znaku hesla v ovládacím prvku pro úpravy skrýt uživatelský vstup. Když je znak hesla nastavený, zobrazí se místo každého znaku, který uživatel zadá. Při odebrání znaku hesla ovládací prvek zobrazí znaky, které uživatel zadá. Pokud aplikace vytvoří ovládací prvek pro úpravy s jedním řádkem pomocí stylu ES_PASSWORD, výchozí znak hesla je hvězdička (*). Aplikace může pomocí EM_SETPASSWORDCHAR zprávy odebrat nebo definovat jiný znak hesla a EM_GETPASSWORDCHAR zprávu k načtení aktuálního znaku hesla. Tyto zprávy platí jenom pro ovládací prvky pro úpravy s jedním řádkem.
Použití celých čísel
Existují dvě celočíselné převodní funkce pro ovládací prvky pro úpravy navržené tak, aby obsahovaly pouze čísla. Funkce SetDlgItemInt vytvoří řetězcovou reprezentaci zadaného celého čísla (podepsaného nebo bez znaménka) a odešle řetězec do ovládacího prvku pro úpravy. SetDlgItemInt nevrací žádnou hodnotu. Funkce GetDlgItemInt vytvoří celé číslo (podepsané nebo bez znaménka) z řetězcové reprezentace v ovládacím prvku pro úpravy. GetDlgItemInt vrátí celé číslo (nebo chybovou hodnotu).
Vrácení textových operací zpět
Každý ovládací prvek pro úpravy udržuje příznak zpět, který označuje, jestli může aplikace vrátit zpět nebo vrátit zpět nejnovější operaci ovládacího prvku pro úpravy (například vrácení odstranění textu zpět). Ovládací prvek pro úpravy nastaví příznak zpět, který označuje, že operaci lze vrátit zpět a obnovit ji tak, aby indikovat, že operaci nelze vrátit zpět. Aplikace může určit nastavení příznaku zpět odesláním ovládacího prvku EM_CANUNDO zprávu.
Aplikace může vrátit zpět poslední operaci odesláním ovládacího prvku EM_UNDO zprávu. Operaci je možné vrátit zpět, pokud se napřed nedochází k žádné jiné operaci ovládacího prvku pro úpravy. Uživatel může například odstranit text, nahradit text (vrátit odstranění zpět) a znovu odstranit text (vrátit zpět nahrazení). Zpráva EM_UNDO platí pro ovládací prvky pro úpravy s jedním řádkem i pro víceřádkové úpravy a vždy funguje pro ovládací prvky pro úpravy s jedním řádkem.
Aplikace může resetovat příznak vrácení zpět ovládacího prvku úprav odesláním ovládacího prvku EM_EMPTYUNDOBUFFER zprávu. Systém automaticky resetuje příznak vrácení zpět vždy, když ovládací prvek pro úpravy obdrží EM_SETHANDLE nebo WM_SETTEXT zprávu. Funkce SetDlgItemText odešle zprávu WM_SETTEXT.
Zpracování konců řádků a wordwrapu
Aplikace může pomocí funkcí Wordwrap s ovládacími prvky pro víceřádkové úpravy vyhledat slovo nebo fragment slova, které by se měly zabalit na další řádek. Pomocí výchozí funkce Wordwrap poskytované systémem končí řádky vždy na mezerách mezi slovy. Aplikace může zadat vlastní funkci Wordwrap zadáním EditWordBreakProc Wordwrap a odesláním ovládacího prvku pro úpravy EM_SETWORDBREAKPROC zprávu. Aplikace může načíst adresu aktuální funkce Wordwrap odesláním ovládacího prvku EM_GETWORDBREAKPROC zprávu.
Aplikace může nasměrovat ovládací prvek pro víceřádkové úpravy, který na konci zalomení řádků automaticky přidá nebo odebere znak zalomení řádku (dva řádky a odřádkování). Aplikace může tuto funkci zapnout nebo vypnout odesláním ovládacího prvku pro úpravy EM_FMTLINES zprávu. Tato zpráva se vztahuje pouze na ovládací prvky pro úpravy s více řádky a nemá vliv na řádek, který končí pevným koncem řádku (jeden návrat na začátek řádku a kanál řádku zadaný uživatelem). V ovládacích prvcích pro úpravy ve víceřádkovém režimu může aplikace zadat styl ES_WANTRETURN, který požádá o vložení návratu na začátek řádku, když uživatel stiskne klávesu ENTER v ovládacím prvku pro úpravy.
Načítání bodů a znaků
Chcete-li určit znak nejblíže zadanému bodu v klientské oblasti ovládacího prvku pro úpravy, odešlete do ovládacího prvku zprávu EM_CHARFROMPOS. Zpráva vrátí index znaku a index řádku znaku nejbližšího bodu. Podobně můžete načíst souřadnice klientské oblasti zadaného znaku odesláním zprávy EM_POSFROMCHAR. Zpráva vrátí souřadnice x a y v levém horním rohu zadaného znaku.
Automatické dokončování řetězců
Automatické dokončování rozšiřuje řetězce, které byly částečně zadány v ovládacím prvku pro úpravy na úplné řetězce. Když například uživatel začne zadávat adresu URL do ovládacího prvku Úpravy adresy, který je vložen na panelu nástrojů Aplikace Windows Internet Explorer, automatické dokončování rozšíří řetězec na jednu nebo více úplných adres URL, které jsou konzistentní s existujícím částečným řetězcem. Částečný řetězec adresy URL, například "mic", se může rozšířit na "https://www.microsoft.com" nebo "https://www.microsoft.com/windows". Automatické dokončování se obvykle používá s ovládacími prvky pro úpravy nebo s ovládacími prvky, které mají vložený ovládací prvek pro úpravy.
Další informace najdete v dokumentaci k rozhraní IAutoComplete a IAutoComplete 2.
Složitý skript v ovládacích prvcích pro úpravy
složitý skript je jazyk, jehož tištěný formulář není rozložen jednoduchým způsobem. Například složitý skript může povolit obousměrné vykreslování, kontextové tvarování glyfů nebo kombinování znaků. Standardní ovládací prvky pro úpravy byly rozšířeny tak, aby podporovaly vícejazyčný text a složité skripty. To zahrnuje nejen vstup a zobrazení, ale také správný pohyb kurzoru nad shluky znaků (například ve skriptu thajštiny a Devanagari).
Dobře napsaná aplikace obdrží tuto podporu automaticky beze změny. Znovu byste měli zvážit přidání podpory pro pořadí čtení zprava doleva a zarovnání doprava. V tomto případě přepněte příznaky rozšířeného stylu okna ovládacího prvku pro úpravy tak, aby se tyto atributy řídily, jak je znázorněno v následujícím příkladu.
// 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 ;
Po nastavení hodnoty lAlign povolte nové zobrazení nastavením rozšířeného stylu okna ovládacího prvku pro úpravy následujícím způsobem.
// 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);
Uniscribe je další sada funkcí, které poskytují jemné řízení pro zpracování složitých skriptů. Další informace naleznete v tématu Uniscribe.