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.