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

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

4.12. Nejjednodušší funkce pro šifrování

Pro účel prvního příkladu doplníme naši aplikaci o jednoduchou šifrovací a dešifrovací funkci. Funkci předáváme vstupní text, heslo a ukazatel na proměnnou, do které bude uložen výsledný text. Parametr smer určuje, zda bude funkce text šifrovat nebo dešifrovat. Prototyp šifrovací funkce je v následujícím rámečku:

void Sifruj(Char* vystup, Char* vstup, Char* heslo, Boolean smer)

Nyní doplníme volání funkce Sifruj() do zdrojového kódu aplikace. Většinu kódu umístíme do funkce vstupního formuláře. Na obrázku, na kterém navrhujeme chování aplikace, to bude vypadat takto:

Většinu kódu jsme umístili do funkce vstupního formuláře. V následujícím rámečku si můžeme prohlédnout zjednodušenou funkci vstupního formuláře. Vstupní text i heslo ukládáme do globálních proměnných gHeslo a gPuvodniText. Podle hodnoty přepínačů (které jsou v jedné skupině: je-li jeden zapnut, je druhý z nich určitě vypnut) nastavíme směr šifrování.

Stav přepínačů, které určují směr šifrování, ukládáme do globální proměnné gZasifruj. Všechny globální proměnné musíme inicializovat ve funkci ZacatekProgramu().

static Boolean UdalostVstupnihoFormulare(EventPtr udalost)
{
    switch(udalost->eType)
    {
        case ctlSelectEvent:

            switch(udalost->data.ctlSelect.controlID)
            {
                case TlacitkoZakoduj:

                        // Zasifrovani

                    smer = CtlGetValue((ControlPtr)Objekt(PrepinacZasifruj));
                    KopirujTextPolicka(PoleHeslo, gHeslo, 50);
                    KopirujTextPolicka(PoleTextVstupni, gPuvodniText, 500);
                    Sifruj(gNovyText, gPuvodniText, gHeslo, smer);

                        // Skok do vystupniho formulare

                    FrmGotoForm(FormularVystupni);
                    zpracovano = true;
                    break;

                default:
                    break;
            }
            break;

        default:
            break;
    }

    return zpracovano;
}

Ve funkci výstupního formuláře jen naplníme výstupní políčko příslušným obsahem globální proměnné gNovyText. Zjednodušenou funkci výstupního formuláře uvádíme v následujícím rámečku:

static Boolean UdalostVystupnihoFormulare(EventPtr udalost)
{
    switch(udalost->eType)
    {
        case frmOpenEvent:

                // Zkopirovani vystupniho textu do policka

            NastavTextPolicka(PoleTextVystupni, gNovyText);

            FrmDrawForm(FrmGetActiveForm());
            zpracovano = true;
            break;

        case ctlSelectEvent:

            switch(udalost->data.ctlSelect.controlID)
            {
                case TlacitkoZpet:
				
                       // Návrat zpět
				
                    FrmGotoForm(FormularVstupni);
                    zpracovano = true;
                    break;
            } 
    }

    return zpracovano;
}

Zdrojový kód aplikace si můžeme prohlédnout zde.

4.13 Špinavá políčka

U každého políčka, které se nachází ve formuláři, je uložen údaj o tom, zda jsou data v políčku čistá nebo špinavá. Čistá jsou data, která uživatel nezměnil, a špinavá jsou data, která byla uživatelem změněna. Pokud uložíme do políčka nějaký text (například funkcí FldSetTextHandle() nebo funkcí FldSetTextPtr()), tak je políčko označené jako čisté.

Boolean FldDirty(const FieldType* políčko)

Zjistí, zda bylo políčko uživatelem po nastavení změněno.

Vstupní parametry
  • políčko - ukazatel na strukturu obsahující data políčka
Vrácená hodnota
  • true - políčko bylo uživatelem změněno
  • false - text v políčku nebyl uživatelem změněn

Změní-li uživatel text políčka, označí jej operační systém PalmOS jako špinavé. Funkce FldDirty() v takovém případě vrátí logickou hodnotu true. Naše aplikace může pomocí funkce FldDirty() testovat, která políčka uživatel ve formuláři změnil.

void FldSetDirty(FieldType* políčko, Boolean špinavé)

Nastaví příznak špinavého (změněného) políčka.

Vstupní parametry
  • políčko - ukazatel na strukturu obsahující data políčka
  • špinavé - příznak, zda byl obsah políčka změněn

Políčko je jako čisté označeno nastavením nového textu. Voláním funkce FldSetDirty() můžeme příznak špinavosti políčka přímo nastavit nebo vymazat. 


V příštím dílu si povíme o prvním, nejjednodušším způsobu, jak rolovat obsahem políčka nahoru a dolů pomocí opakovacích tlačítek.