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

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

V květnu se zřejmě vrátí ikonická Nokia 3210, kdysi to byl přelomový model

24. března 2024  8:01

Současný vlastník značky Nokia na poli mobilních telefonů, firma HMD (Human Mobile Devices –...

Banka spustila mobilní datové balíčky. Funguje to i zákazníkům z Česka

26. března 2024  12:06

Virtuální banka Revolut spouští virtuálního celosvětového operátora. Zákazníci si mohou kupovat...

{NADPIS reklamního článku dlouhý přes dva řádky}

{POPISEK reklamního článku, také dlouhý přes dva a možná dokonce až tři řádky, končící na tři tečky...}

Trvalo to. Nový nejlepší fotomobil světa konečně koupíte i v Česku

26. března 2024  7:02

Konečně nastává situace, že nejlepší fotomobil v žebříčku DxO Mark je dostupný i na našem trhu....

Smartphonům od Googlu raketově rostou prodeje tam, kde kraluje Apple

27. března 2024  7:02

Prodeje smartphonů Pixel od Googlu se mohou pochlubit neskutečným nárůstem prodejů. Tedy prozatím...

{NADPIS reklamního článku dlouhý přes dva řádky}

{POPISEK reklamního článku, také dlouhý přes dva a možná dokonce až tři řádky, končící na tři tečky...}

Pochlubili se, že se pochlubí. Značky ze sebe dělají slibotechny

25. března 2024  7:02

Jedním z trochu nečekaných trendů veletrhu MWC v Barceloně se stala oznámení o tom, že firmy nějaké...

Nová cenově dostupná stylovka vás může dostat na fotbalové Euro

29. března 2024

Vivo má nový smartphone střední třídy, který má velké ambice. Za rozumnou cenu nabídne nejen dobrou...

Toho telefonu je pouze pro Čínu škoda. Udělal by parádu i u nás

28. března 2024  12:06

Xiaomi má nový trhák. Model Civi 4 Pro trhá předprodejní rekordy, ale jen na domácím čínském trhu....

U foťáků se blýská na lepší časy, naznačuje výsledek testu nového xiaomi

28. března 2024  7:02

Čínská značka Xiaomi trochu na poli fotomobilů v uplynulých letech tápala. Ukazuje to mimo jiné...

Kartónek Steva Jobse se vydražil za neuvěřitelnou sumu

28. března 2024

Vizitku slavného ředitele společnosti Apple si někdo pořídil za pořádný balík peněz. Přidanou...

Akční letáky
Akční letáky

Prohlédněte si akční letáky všech obchodů hezky na jednom místě!

Smoljak nechtěl Sobotu v Jáchymovi. Zničil jsi nám film, řekl mu

Příběh naivního vesnického mladíka Františka, který získá v Praze díky kondiciogramu nejen pracovní místo, ale i...

Rejžo, jdu do naha! Balzerová vzpomínala na nahou scénu v Zlatých úhořích

Eliška Balzerová (74) v 7 pádech Honzy Dědka přiznala, že dodnes neví, ve který den se narodila. Kromě toho, že...

Pliveme vám do piva. Centrum Málagy zaplavily nenávistné vzkazy turistům

Mezi turisticky oblíbené destinace se dlouhá léta řadí i španělská Málaga. Přístavní město na jihu země láká na...

Velikonoce 2024: Na Velký pátek bude otevřeno, v pondělí obchody zavřou

Otevírací doba v obchodech se řídí zákonem, který nařizuje, že obchody s plochou nad 200 čtverečních metrů musí mít...

Kam pro filmy bez Ulož.to? Přinášíme další várku streamovacích služeb do TV

S vhodnou aplikací na vás mohou v televizoru na stisk tlačítka čekat tisíce filmů, seriálů nebo divadelních...