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ší

Podvodníci opět útočí na české mobily. Kdo se nachytá, přijde o peníze

Podvodníci opět prozvání česká čísla

Zhruba po půl roce se podvodníci opět soustředí na česká telefonní čísla a snaží se z náhodných obětí dostat peníze....

Je lepší Samsung, nebo Apple? Rozhodněte v anketě Mobil roku

Mobil roku 2018

O nejlepším smartphonu roku 2018 rozhodují čtenáři Mobil.iDNES.cz v 21. ročníku ankety Mobil roku. Vyhrát můžete jeden...

Stovky lidí čekaly na levné čínské smartphony v Budějovicích od noci

Otevření obchodu Xiaomi v Českých Budějovicích

Xiaomi pokračuje v otvírání poboček po celé České republice. Tu poslední čínská značka otevřela v sobotu v Českých...

Honor se chlubí, že má první průstřel displeje. Samsung ho však předběhl

Takto vypadá nový Samsung A8s

Výrobci dodrželi sliby, že ještě do konce roku představí modely s novým typem výřezu displeje. Svůj model už oficiálně...

Chlubili se nejvýkonnějším mobilem, ale byla to chyba v překladu

OnePlus 6T

Šéf značky OnePlus se u příležitosti představení nejvýkonnějšího mobilního procesoru Snapdragon 855 chlubil, že právě...

Další z rubriky

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...

Vyrážíte na dovolenou? Tyto aplikace by neměly chybět ve vašem mobilu

Ilustrační snímek

Mobilní aplikace jsou dnes v mnoha případech neodmyslitelným pomocníkem v celé řadě situací a letní cestování a...

Tyto aplikace vám řeknou vše o počasí. Vyberte si pro vás tu pravou

Ilustrační snímek

Nástroje, které vám pomohou zjistit, jaké bude počasí, jsou v mobilu mnohdy neocenitelným pomocníkem. Vybrali jsme ty...

Najdete na iDNES.cz