Controls - Kontroller

Internt i Palm OS behandlas ett antal användarelement som kontroller. Systemet behandlar alla kontroller med liknande datastrukturer, händelser och funktioner. Följande objekt tillhör kontroller:

- Knappar och grafik knappar
- Tryckknappar och grafiska tryckknappar
- Checkboxar
- Pop-up utlösare (triggers)
- Val utlösare (selector triggers)
- Upprepningsknappar och grafiska upprepningsknappar
- Rulllister och feedback rulllister

När det gäller kontroller överlämnar frmHandleEvent kontrollen till ctlHandleEvent som tar hand om alla händelser med kontroller. För objekt som inte är kontroller anropas andra funktioner:

- FldHandleEvent för fält
- LstHandleEvent för listor
- MenuHandleEvent för menyer
- SclHandleEvent för scrollistor
- TbHandleEvent för tabeller

När en användare trycker på en knapp (och håller pennan kvar), köas en Enter event. När en användare inte än har släppt upp pennan kan man i alla fall förbereda det som ska hända om pennan släpps upp inom gränsen för objektet. Ett exempel är att fylla en popup lista med val.  Följande Enter events finns
        ctlEnterEvent
        fldEnterEvent
        frmTitleEnterEvent
        lstEnterEvent
        sclEnterEvent
        tblEnterEvent

Om användaren sedan släpper upp pennan och är innanför gränsen för objektet, köas en Select event. Select event är mest intressant eftersom de innebär en lyckad tryckning på ett objekt. Följande Select event finns:
        ctlSelectEvent
        frmTitleSelectEvent
        lstSelectEvent
        popSelectEvent
        tblSelectEvent

Om användaren istället drar pennan utanför gränsen för objektet innan han släpper upp pennan köas en Exit event. Exit event kan ta rensa upp efter Enter events som har förberett för en Select event som aldrig kom. Följande Exit event finns
        ctlExitEvent
        lstExitEvent
        sclExitEvent
        tblExitEvent

Repeteringsknappar och scrollistor genererar en annan typ av event, Repeat event. Repeat events tillåter programmet att uppdatera en lista dynamiskt medan scrollistan går ner. Följande Repeat event finns.
        ctlRepeatEvent  
        sclRepeatEvent

För att svara på något av dessa events ska programmet kolla efter dem in rätt formulär Event handler (Händelse hanterare). Sidan 267 i boken ger ett exempel på hur man fångar upp events (händelser). Om det finns flera objekt av samma typ kan man använda tabellen på sidan 268 i boken. över vilka funktioner att anropa för att ta reda på vilken ResursID som händelsen gäller.

Alla formulär som har Event Handlers (händelsehanterare) ska kunna ta hand om de händelser som kan hända i det formuläret. Ex:

// En Event Handler (händelsehanterare) som tar hand om Select Events från 2 knappar och en lista
static Boolean MyFormHandleEvent (EventType *event)
{
    Boolean handled = false;
    if (event->eType == ctlSelectEvent) {
        switch (event->data.ctlSelect.controlID) {
            case OKButton:
                // Do something in response to the OK button being tapped.
                handled = true;
                break;

            case CancelButton:
            // Do something in response to the Cancel button being tapped.
            handled = true;
            break;

            default:
            break;
        }
    }
    else if (event->eType == lstSelectEvent) {
        // Do something in response to the list selection; this code assumes only one list on the form.
        handled = true;
    }

    return (handled);
}

Följande tabell visar vart man ska leta för efter Resurs-ID för ett objekt i en Event (händelse) struktur, beroende på vilken typ av Event (händelse) som har skett.