Programování pro PalmOS počítače krok za krokem (44)

aktualizováno 
Doufám, že si PalmOS programátoři přes svátky oddychli - pokračujeme v našem seriálu o PalmOS programování. V tomto dílu si uvedeme základní sadu obalujících funkcí pro práci s políčky. Povíme si o tom, kam do zdrojového textu umístit příkazy, a doplníme program o jednoduché čtení a nastavování textu políček.

4.10. Obalující funkce pro čtení a nastavování textu políček

Nyní dáme dohromady funkce z předchozích dvou ukázek a ukážeme si základní sadu funkcí pro čtení a nastavování textu políček. Text políčka je obsažen v bloku paměti, jehož ovladač získáme voláním funkce FldGetTextHandle(). Má-li ovladač hodnotu NULL, je políčko prázdné.

void KopirujTextPolicka(UInt16 idPolicka, Char* kam, UInt16 pocet)
{
    FieldPtr policko = (FieldPtr)Objekt(idPolicka);
    MemHandle ovladacTextu = FldGetTextHandle(policko);
    Char* textPolicka;

    if(ovladacTextu)
    {
        textPolicka = (Char*)MemHandleLock(ovladacTextu);
        StrNCopy(kam, textPolicka, pocet);
        MemHandleUnlock(ovladacTextu);
    }
    else
    {
        StrCopy(kam, "");
    }
}

Funkce KopirujTextPolicka() vyžaduje jako parametr jednoznačnou identifikaci políčka v aktuálním formuláři, jehož text vyzvedáváme. Také omezujeme nejvyšší počet znaků, které z políčka vyzvedáváme parametrem pocet.

Pro nastavování a mazání textu políčka rozložíme obalující funkci, kterou jsme si ukázali v dílu 4.9., na tři funkce. První z nich nastaví nový ovladač bloku paměti, ve kterém je uložen text políčka. Druhá funkce text políčka vymaže a třetí jej nastaví podle předaného řetězce.

void NastavNovyOvladacPolicka(UInt16 idPolicka, MemHandle novyOvladac)
{
    FieldPtr policko = (FieldPtr)Objekt(idPolicka); 
    MemHandle staryOvladac = FldGetTextHandle(policko);
	
    FldSetTextHandle(policko, novyOvladac);
    FldDrawField(policko);

    if(staryOvladac)
    {
        MemHandleFree(staryOvladac);
    }
}

void VymazTextPolicka(UInt16 idPolicka)
{
    NastavNovyOvladacPolicka(idPolicka, NULL);
}

void NastavTextPolicka(UInt16 idPolicka, Char* text)
{
    MemHandle novyOvladac;

    novyOvladac = (MemHandle)MemHandleNew(StrLen(text) + 1);
    StrCopy((Char*)MemHandleLock(novyOvladac), text);
    MemHandleUnlock(novyOvladac);

    NastavNovyOvladacPolicka(idPolicka, novyOvladac);
}

Uvedené čtyři funkce zcela stačí pro práci s políčky pro úpravy textu v našich aplikacích. Můžeme jimi číst a nastavovat text v políčkách, která může uživatel upravovat, i v políčkách, která slouží pouze pro zobrazení textu. Funkce, které nastavují text v políčku prostřednictvím řetězce, nebudeme v našich programech zatím používat.

4.11. Předávání dat mezi formuláři

Při psaní zdrojového textu aplikace musíme mít stále na paměti, že všechny činnosti programu (třeba příkazy pro zašifrování textu) musí být přiřazeny k některému z formulářů aplikace. Událostmi řízená aplikace pro PalmOS musí vhodně rozložit svoji činnost tak, aby mohla reagovat na zprávy, které jí operační systém zasílá.

Nejjednodušším příkladem, který jsme už jednou použili, je přepnutí se do jiného formuláře v závislosti na stisknutí tlačítka. Funkce FrmGotoForm() je volána při stisknutí tlačítka. Funkce FrmGotoForm() vloží do fronty zpráv sérii zpráv nutných pro přechod do jiného formuláře a vrátí řízení operačnímu systému.

Operační systém pak postupně - po jedné - zasílá zprávy naší aplikaci. První zprávou je frmCloseEvent pro uzavření aktivního formuláře a poslední je frmOpenEvent sloužící k inicializaci a vykreslení formuláře nového.

Při zpracování žádné ze zpráv se naše aplikace nesmí "zaseknout" - zpracovávat zprávu příliš dlouho. Později si ukážeme, jak je možné i úlohy náročné na výpočet rozdělit do menších bloků a v době mezi zpracováním těchto bloků reagovat na zprávy operačního systému.

Ale zpět k naší aplikaci. Chceme, aby se při stisknutí tlačítka OK v hlavním formuláři text nejprve zašifroval a poté aby se zobrazil ve formuláři druhém. Mezi formuláři přejdeme funkcí FrmGotoForm(). Vlastní příkazy pro zašifrování textu musíme vhodně rozdělit do obou funkcí formulářů.

Naše aplikace totiž nikdy nemá přístup k oběma formulářům současně. Proto musíme vyřešit způsob, kterým budou předávána data mezi formuláři. K uložení dat budeme zatím používat globální proměnné. Příkazy pro zašifrování můžeme vložit do zdrojového textu dvěma způsoby, popsanými v následující tabulce:

První způsob Druhý způsob
Zpracování zprávy o stisknutí tlačítka ctlSelectEvent v prvním formuláři
  1. Vyzvednutí textu, který má být zašifrován z políčka
  2. Uložení tohoto textu do globální proměnné
  3. Volání funkce FrmGotoForm()
  1. Vyzvednutí textu, který má být zašifrován z políčka
  2. Zašifrování textu
  3. Uložení zašifrovaného textu do globální proměnné
  4. Volání funkce FrmGotoForm()
Zpracování zprávy frmOpenForm druhého formuláře
  1. Vyzvednutí textu z globální proměnné
  2. Zašifrování textu
  3. Vložení textu do políčka výsledků
  1. Vyzvednutí zašifrovaného textu z globální proměnné
  2. Vložení textu do políčka výsledků

V aplikacích, ve kterých budeme používat více než dva formuláře, musíme dobře rozvážit, kam do zdrojového kódu funkcí formulářů umístíme jednotlivé příkazy. Musíme si také dobře rozmyslet, jak budou předávána data mezi formuláři. K tomuto úkolu nám nejlépe poslouží, nakreslíme-li si jednotlivé formuláře aplikace a doplníme k nim šipky. Každá šipka bude znázorňovat přechod mezi formuláři. V následujících kapitolách si budeme uvádět čím dál tím složitější příklady návrhu aplikací.


Příště doplníme náš program o funkci šifrování a ukážeme si, jak přenášet data mezi formuláři.



Nejčtenější

Huawei Mate 20 Pro může být nový král smartphonů. Nechybí mu vůbec nic

Huawei Mate20 Pro

Špičkový Huawei Mate 20 Pro se stal jedním z nejvybavenějších smartphonů na trhu. Jak jsme si mohli již krátce...

Nedívejte se na zabavené iPhony, zablokují se, radí odborníci policistům

iPhone XS Max

Podle instrukcí forenzní firmy Elcomsoft pro americkou policii je vhodné, aby se policisté nedívali zpříma na nové...



Na českém trhu se objeví nová značka smartphonů, budou líbivé a levné

Smartphone UMIDIGI Z2

Na český trh zavítá nová značka UMIDIGI, která nabídne hned tři levnější smartphony. Budou mít zajímavou výbavu i...

Megapřehled: srovnali jsme nový iPhone XS Max s hlavními rivaly

iPhone XS Max

Apple s novou generací iPhonů opět přepisuje cenové zvyklosti, za vrcholné verze dáte přes čtyřicet tisíc korun....

Nové Apple Watch popletla změna času. Zůstaly viset ve smyčce

Apple Watch Series 4 v Austrálii popletla změna času

Austrálie v uplynulém víkendu přešla na letní čas, což obyvatele kontinentu oloupilo o hodinu spánku. To však nebyla...

Další z rubriky

K používání aplikace WhatsApp vám nově musí být minimálně 16 let

Whatsapp bude umět zpětně vymazat odeslané zprávy

Chatovací služba WhatsApp mění podmínky používání v Evropské unii. Nově začíná platit, že pro používání služby vám musí...

Už přes ni vyhrožovali smrtí. Přesto je aplikace extrémně populární

Logo aplikace Sarahah

Vysoký nárůst popularity zaznamenala aplikace Sarahah, určená k posílání anonymních zpráv. Ačkoliv se v posledních...

Aplikace ukazovala otravující čísla. Data kradl antivir přímo z mobilů

Škodlivý kód Cooligan napadá zařízení s Androidem 4 a 5

Zajímavý model vymyslelo studio DU. Jedna jejich android aplikace ukazovala, kdo volá, včetně obtěžujících čísel...



Najdete na iDNES.cz