Klávesové zkratky na tomto webu - základní
Přeskočit hlavičku portálu

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

Berte, dokud je. Mobil pro fajnšmekry po neúspěchu drasticky zlevnil

Essential PH-1

Keramické tělo, jeden z nejmodernějších procesorů, 128 GB vnitřní paměti a velký displej s tenkými rámečky a...

Konkurenci poprvé ukazuje záda, Huawei P20 Pro je nejlepší smartphone

Huawei P20 Pro

Čínský Huawei si dal letos na nových modelech řady P20 opravdu záležet. Model P20 Pro chce být tím nejlepším...



Američtí teenageři se mohou z iPhonů zbláznit. A zájem roste

iPhone 8 Plus v Drážďanech

Ve Spojených státech je mezi mladými uživateli smartphonů enormní zájem o iPhony - v současnosti je vlastní 82 procent...

Berte telefon jako kreditní kartu, radil odborník v Rozstřelu o podvodném volání

Redaktor Mobil.iDNES.cz Jan Matura (vlevo) a mluvčí Českého telekomunikačního...

V posledních dnech se opět ozvali podvodníci, kteří se snaží vydělat na snadné záměně telefonních čísel. Prozvoní vás z...

Revoluce v mobilním focení? Umí nasadit profi objektiv na smartphony

S adaptérem můžete na mobil nasadit i profesionální objektivy

Na výstavě americké Národní asociace provozovatelů vysílání v Las Vegas byl ukázán zajímavý doplněk k mobilům pro...

Další z rubriky

Na aplikace alternativních taxi útočí virus. Pase po údajích ke kartám

Virus pro Android

Uživatelé mobilních aplikací alternativních taxi včetně aplikace Uber by měli být obezřetní. Ohrožuje je totiž nový...

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

Na dovolené se můžete seznámit i nespálit

Ilustrační snímek

Na dovolenou si bereme kde co, ovšem počítač/notebook často zůstává doma. Ten je na jedné straně prostředkem k...



Najdete na iDNES.cz