Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!
Zadejte Vaši e-mailovou adresu:
Kamarád fotí rád?
Přihlas ho k odběru fotomagazínu!
Zadejte e-mailovou adresu kamaráda:
Delphi
Tipy pro TMemo
8. ledna 2002, 00.00 | V článku si ukážeme dva tipy, které můžete využít při práci se standardní komponentou TMemo v Delphi.
Každý programátor v Delphi zná určitě komponentu TMemo. Dnes se podíváme na dva malé zlepšováky, které vám mohou pomoci při práci s ní.
Režim vkládání a přepisuVětšina slušných textových editorů podporuje oba režimy zmíněné v podnadpisu, TMemo ale umí jenom režim vkládání. Nic nám ale nebrání si režim přepisování naemulovat. Přiznávám ale, že níže uvedená metoda není úplně programátorsky "čistá", jde spíš o malý trik.
Někde na počátku unity s formulářem je potřeba deklarovat globální proměnnou OverwriteMode typu Boolean. V té si budeme pamatovat, jaký režim uživatel zrovna nastavil. Pak do programu přidáme následujících několik řádků, zajišťujících obsluhu některých událostí našeho TMema:
|
Myslím, že celkem zřejmé, jak kód funguje. Za prvé obsluhujeme stisk klávesy Insert, která přepíná režim práce, a za druhé vždy pokud je stisknuta "písmenotvorná" klávesa a režim je nastaven na přepisování, zvětšíme délku aktuálního výběru na jedno písmeno. Ten je pak přepsán písmenem, jehož klávesu uživatel stiskl. Tuto činnost samozřejmě provádíme jenom když není vybrán žádný text - jinak by prodloužení výběru mělo nechtěné efekty (prodloužení existujícího výběru o jeden znak).
Mimochodem, teď mě napadá, že obsah procedury Memo1KeyDown by se dal zjednodušit na jeden příkaz:
|
To už je ale pro optimalizační extremisty.
Zjištění čísla aktuálního řádku/sloupceUžitečnou funkcí některých textových editorů je zobrazování souřadnic kurzoru. Komponenta TMemo na to nemá žádné speciální vlastnosti (pojmenované třeba Row nebo Col), takže si musíme pomoci "ručně" - přes Win32 API. Zašleme našemu memu zprávu EM_LINEFORMCHAR, pomocí které zjistíme, na kterém řádku se nachází kurzor. Pak pošleme další zprávu EM_LINEINDEX, která pro daný řádek vrátí index jeho prvního znaku. Když vrácenou hodnotu odečteme od vlastnosti SelStart (index znaku, kde se nachází kurzor resp. začátek výběru), získáme sloupec, ve kterém je kurzor. Při celém počítání nesmíme zapomenout na to, že interně jsou souřadnice počítány od nuly, kdežto uživatel by je samozřejmě rád viděl počítané od jedničky. Proto při zobrazování výsledku k přičteme k získaným souřadnicím jedničku.
Kousek kódu, zodpovědný za zobrazení souřadnic třeba na stavové liště je zde:
|
Výše uvedený kód je dobré umístit do nějaké procedury a tu volat z procedur obsluhujících události OnKeyUp/Down a OnClick (případně i OnMouseUp/Down) daného mema. Jiným přístupem (ale asi méně vhodným) je volat ji z procedury obsluhující událost Application.OnIdle.
Toť pro dnešek vše a slibuji, že se ke komponentě TMemo ještě někdy vrátím.
-
25. listopadu 2012
-
30. srpna 2002
-
10. října 2002
-
4. listopadu 2002
-
12. září 2002
-
25. listopadu 2012
-
28. července 1998
-
31. července 1998
-
28. srpna 1998
-
6. prosince 2000
-
27. prosince 2007
-
4. května 2007