Autor: sukovanej | 17.3.2013 |
Jak již perex článku napovídá, pokusím se ukázat, jak lze naprogramovat jednoduchý editor souborů RTF. Editor by měl umět soubory vytvářet a upravovat. Také bude umět alespoň základní formátovací prvky, jako je například tučné písmo, kurzíva, podtržené písmo, nebo velikost písma. A konečně, bude umět pracovat s více soubory za pomoci záložek. Nuže, s chutí do práce!
Rozhodl jsem se moc neexperimentovat a zůstat u klasického Word 2003 stylu, takže uživatelské rozhraní programu bude obsahovat jedno horní menu, pod ním panel s nástroji, pracovní místo pro psaní a nakonec nějaký panel s informačním textem (tj., co se právě v aplikaci děje).
"Naházejte" si komponenty na formulář přibližně tak, jako mám já na obrázku. Největší část programu vypadá, jako by na ní nic nebylo, ale je zde komponenta tabControl, která má nastavenou vlastnost Dock = fill, díky níž se při změně velikost formuláře vždy rozšíří tak, aby zaplňovali celý svůj prostor formuláře. Nahoře v menu je pod položkou Soubor ještě skryto dalších pět itemů - Uložit, Nový, Zavřít, Otevřít a Ukončit.
Pro úpravu souborů použijeme komponentu richTextBox, která je pro tento typ souborů přímo udělaná.
Nejdříve si vytvoříme pomocnou třídu, která bude obsahovat metodu pro přidání záložky a pro získání instance richTextBoxu, který zrovna prohlížíme.
V konstruktoru třídy jsme si vyžádali instanci komponenty TabControl. TabControl obsahuje kolekci TabPages, s pomocí níž můžeme pracovat s jednotlivými záložkami.
Začněme metodou Add. Nejdříve vytvoříme instanci třídy TabPage a upřesníme její vlastnost Text (z argumentu metody). Dále vytvoříme novou instanci třídy RichTextBox a tu přidáme do kolekce Controls instance třídy TabPage. Tuto celou instanci přidáme komponentě TabControl do kolekce TabPages.
Metoda GetSelectedBox bude jednodušší. Zde pouze zkontrolujeme, jestli jsou vůbec v kolekci TabPages nějaké položky a pokud ano, metoda vrátí instanci richTextBoxu na vybrané záložce. Jesliže v kolekci žádné prvky nejsou, necháme vrátit null.
Nejdříve vytvoříme instanci naší třídy Tabs a předáme jí instanci komponenty TabControl.
Přidání nové záložky provede jednoduchým jednořádkovým kódem
Při odstraňování záložky pouze zkontrolujeme, jestli je vůbec nějaká vytvořená a potom ji smažeme na základě indexu z vlastnosti SelectedIndex.
Ukončení aplikace se provede následovně
Co se týče formátování (tučné, kurzíva, podtrženo), musíme nejdříve samozřejmě zkontrolovat, jestli je vybrána (reps., jestli existuje) nějaká záložka. Pokud ano, musíme zjistit, jestli už není vybraný text náhodou zvoleným formátem upraven. Pokud je, toto formátování zrušíme a pokud není, tak textu toto formátování nastavíme.
Pokud budeme chtít text "ztučnit", nejdříve musíme zjistit, jestli už tučně vytištěn není. Pokud je, tučný formát zrušíme a pokud není, tak mu tento formát nastavíme.
(K formátu právě vybraného textu se v komponentě richTextBox dostaneme pomocí vlastnosti SelectionFont.)
Analogicky to bude i u kurzívy a podtrženého písma. U změny velikost písma to bude vypadat také velice podobně. Jen již nemusíme kontrolovat, jestli takoví formát (resp. velikost) vybraný text náhodou nemá.
K ukládání a otevírání souborů nám dobře poslouží komponenty SaveFileDialog a OpenFileDialog. SaveFileDialog při zavolání ShowDialog() otevře dialogovou okno, v němž si můžeme zvolit soubor. Po výběru souboru a stisku na tlačítko OK metoda ShowDialog() vrátí strukturu Dialog.OK, takže můžeme podmínkou jednoduše informace zpracovat. K absolutní adrese vybraného souboru se dostaneme s pomocí vlastnosti FileName. RichTextBox má potom na otevírání(resp. ukládání) souborů vlastní metodu LoadFile (resp. SaveFile).
Při otevírání souboru ještě musíme pamatovat na to, že uživatel nemusí být nutně na poslední záložce. Takže budeme postupovat tak, že po získání adresy souboru vytvoříme novou záložku, kterou pojmenujeme jako adresu souboru. Potom nastavíme vlastnost SelectedIndex na úplně poslední index a v tomto bodě již můžeme pracovat s naší metodou GetSelectedBox(), protože se určitě nacházíme na úplně poslední záložce.
Doufám, že i přesto, že jsem opravdu upozorňoval jen na ty nejdůležitější části kód, se k zdárnému dokončení programu všichni doškrábají.
Je zde strašně moc věcí, které lze na aplikaci dodělat. Barva textu, informační text (status v dolní části programu), spoustu dalších formátovacích prvků,... Takže můžete zkoušet a zkoušet a pokud vymyslíte něco originálního, můžete se klidně pochlubit v komentářích.