Czech English German
 
 ÚVOD    PŘIHLÁSIT SE    MIMOŘÁDNÁ NABÍDKA    NOVINKY    O FIRMĚ    PRODUKTY    KE STAŽENÍ    KONTAKT   
     
REGULACE.ORG
 Nabídka služeb
 Ke stažení
 Reference
 Obrazová galerie
 Historie firmy
 Obchodní podmínky
Produkty
LangMan pro Delphi (6)
Software (2)
Články
Nové články
Všechny články
- Zajímavosti
- LangMan pro Delphi
- Laserový projektor
- HW a SW za studena
Hledání
 
Rychlé vyhledávání produktů pomocí klíčových slov.
Pokročilé vyhledávání
Dynamické generování textů Autor: Ing. Tomáš Halabala
 
box_bg_l.gif.

Generuje-li váš program za chodu nějaký výpis, log soubor apod. může do tohoto souboru vkládat příslušné řetězce z lexikonu, který je vypisuje vždy v aktuálně zvoleném jazyce. Tento postup má ale jednu slabinu. Při následné změně jazyka, zůstane dosavadní obsah výpisu v původním jazyce, zatímco pokračování výpisu bude v jazyce změněném. Za normálních okolností asi nemá uživatel programu žádný důvod volit jiný jazyk, než ten který si zvolil na začátku a který mu nejlépe vyhovuje. Jsou ale případy, kdy je změna jazyka za chodu programu žádoucí a je i žádoucí, aby se změnil jazyk u celého výpisu od začátku ne jenom u části, která v čase následuje.

Pro tyto případy byla vytvořena třída TLangManStrings, vizuální komponenta TLangManRichEdit a do lexikonů byla přidána metoda CompleteString a vlastnost Link. Popis a použití komponenty TLangManRichEdit najdete zde. Na následujícím příkladu si ukážeme jak na třídu TLangManStrings:


Příklad:

Máte-li do své aplikace například vloženou vizuální komponentu TMemo, do které program generuje za chodu nějaký výpis, a požadujete, aby se jazyk celého výpisu dal v kterémkoli okamžiku změnit, použijte k tomu třídu TLangManStrings. Postup je následující:

V rutině události OnCreate formuláře vytvoříte objekt např. Memo:

Memo := TLangManStrings.Create(Memo1.Lines, MainLexicon);

kde Memo1 je vizuální komponenta TMemo a MainLexicon je jazykový lexikon (TDesignedLExicon nebo TProgrammableLexicon), který obsahuje všechny potřebné jazykové řetězce pro dynamické generování vašeho výpisu.

Tento krok lze považovat za jakési nahrazení vlastnosti Memo1.Lines novým objektem Memo. Takže od této chvíle musíte veškerý textový obsah vlastnosti Lines měnit výhradně prostřednictvím nového objektu Memo třídy TLangManStrings! Jakékoli manipulace s řetězci ve vlastnosti Memo1.Lines tedy provádíte výhradně přes objekt Memo a to úplně stejně, jako byste pracovali přímo s Memo1.Lines. Například nový řádek vložíte následovně:

Memo.Add('Text nového řádku');

Výsledkem bude přidání řetězce 'Text nového řádku' na nový řádek vlastnosti Memo1.Lines.

Nyní se dostáváme k tvorbě přeložitelného textu pomocí lexikonu MainLexicon, který byl v konstruktoru objektu Memo, předán jako druhý parametr. Takže například pokud se na položce s indexem 2 lexikonu MainLexicon, nachází řetězec 'Můj text' (aktuální jazyk je čeština), mohli byste vložit tento řetězec přímo následujícím způsobem:

Memo.Add(MainLexicon.Item[2]);

Efekt by byl úplně stejný, jako v tomto případě:

Memo.Add('Můj text');

Jedinou výhodou by bylo, že je právě vložený řetězec v aktuálně zvoleném jazyce. V okamžiku, kdy by ale uživatel změnil jazyk u příslušného enginu, již vložený text by se nezměnil a zůstal by v češtině.

Pokud byste ale řetězec vložily následujícím způsobem pomocí odkazu (Link):

Memo.Add(MainLexicon.Link[2]);

bude v daném okamžiku v komponentě Memo1  na novém řádku vypsán sice stejný text jako v předešlém případě, ale s tím rozdílem, že pokud by uživatel změnil jazyk, převede se automaticky text na posledním řádku Memo1.Lines také do nově zvoleného jazyka. A pokud vložíte uvedený řádek do rutiny události OnChangeLanguage, provede se překlad textu v Main1.Lines také do nově zvoleného jazyka.

Stejně jako metoda Add fungují bez rozdílu od původních metod třídy TStrings i další metody jako jsou AddObject, Insert, InsertObject, Delete, Clear, Exchange, Sort a CustomSort třídy TLangManStrings. Pouze je nutné dávat pozor na to, že výsledné přidělení indexů řetězcům vlastnosti Lines komponenty TMemo se může od objektu třídy TLangManStrings lišit. Například, budete-li mít nastaveno u komponenty TMemo automatické zalamování řádků, může se tím počet řádků o počet zalomení zvýšit oproti počtu řádků v TLangManStrings. I proto je důležité opravdu dbát na to, aby se k textu původního objektu přistupovalo pouze přes náhradní objekt TLangManStrings.

Odměnou je velmi efektní na čase nezávislá možnost změny jazyka u rozsáhlých textů TStrings a opět, jak je tomu u komponent LangMan zvykem, bez nároků na čas programátora, který by jinak musel pro dosažení stejného výsledku jít mnohem složitější a pracnější cestou.

Před ukončením programu nezapomeňte uvolnit paměť, přidělenou objektu Memo pomocí metody Free:

Memo.Free;

Článek byl publikován : Čtvrtek, 26. leden 2012.
box_bg_r.gif.
Článek hodnotilo: 0 Napsat hodnocení/komentář
Pošli e-mailem
Zadejte e-mail, na který chcete poslat upozornění na tento článek:  
Související produkty
LangMan Premium
LangMan Premium
LangMan Ultimate
LangMan Ultimate
LangMan Professional
LangMan Professional
Košík více
Košík je prázdný
Zákaznický účet
Přihlašovací e-mail
Heslo
Volba měny
     
 ÚVOD    PŘIHLÁSIT SE    MIMOŘÁDNÁ NABÍDKA    NOVINKY    O FIRMĚ    PRODUKTY    KE STAŽENÍ    KONTAKT   
     
Copyright © 2008-2024 Tomáš Halabala - REGULACE.ORG