Wenn ich den dynamisch erzeugten Button anklicke, so
löst dieser scheinbar keinen Event aus. Der Button ändert
auch nicht (wie sonst üblich) seine Farbe.
Ich wäre sehr dankbar, wenn mir jemand weiter helfen
könnte.
Die (meines erachtens) relevanten Stellen habe ich
farbig markiert.
Sorry, dass der Code so lang ist. Ich bin allerdings Anfänger im
Bereich der Palm-Programmierung und nur so bin ich mir sicher,
dass keine wesentlichen Informationen fehlen.
Zur Entwicklung verwende ich den Palm Emulator.
Vielen Dank im Voraus! ![]()
#include <Pilot.h>
#include <SysEvtMgr.h>
#include "StarterRsc.h"
struct StarterPreferenceType
{
Byte replaceme;
} ;
struct StarterAppInfoType
{
Byte replaceme;
} ;
const unsigned long appFileCreator = 'STRT';
const unsigned short appVersionNum = 0x01;
const unsigned short appPrefID = 0x00;
const unsigned short appPrefVersionNum = 0x01;
const unsigned long version20 = 0x02000000;
static Err RomVersionCompatible(DWord requiredVersion, Word launchFlags)
{
DWord romVersion;
// See if we're on in minimum required version of the ROM or later.
FtrGet(sysFtrCreator, sysFtrNumROMVersion, &romVersion);
if (romVersion < requiredVersion)
{
if ((launchFlags & (sysAppLaunchFlagNewGlobals | sysAppLaunchFlagUIApp)) ==
(sysAppLaunchFlagNewGlobals | sysAppLaunchFlagUIApp))
{
FrmAlert (RomIncompatibleAlert);
// Pilot 1.0 will continuously relaunch this app unless we switch to
// another safe one.
if (romVersion < version20)
{
//Err err;
AppLaunchWithCommand(sysFileCDefaultApp, sysAppLaunchCmdNormalLaunch, NULL);
}
}
return (sysErrRomIncompatible);
}
return (0);
}
static VoidPtr GetObjectPtr(Word objectID)
{
FormPtr frmP;
frmP = FrmGetActiveForm();
return (FrmGetObjectPtr(frmP, FrmGetObjectIndex(frmP, objectID)));
}
static void MainFormInit(FormPtr frmP)
{
}
static Boolean MainFormDoCommand(Word command)
{
Boolean handled = false;
switch (command)
{
case MainOptionsAboutStarterApp:
handled = true;
break;
}
return handled;
}
static Boolean MainFormHandleEvent(EventPtr eventP)
{
Boolean handled = false;
FormPtr frmP;
switch (eventP->eType)
{
case menuEvent:
ErrNonFatalDisplay("Text-Menue----");
return MainFormDoCommand(eventP->data.menu.itemID);
break;
case frmOpenEvent:
frmP = FrmGetActiveForm();
MainFormInit( frmP);
FrmDrawForm ( frmP);
handled = true;
break;
case ctlSelectEvent:
ErrNonFatalDisplay("Debug-Meldung1");
switch (eventP->data.ctlSelect.controlID) {
case 1001:
ErrNonFatalDisplay("Debug-Meldung2");
handled = true;
break;
}
break;
default:
break;
}
return handled;
}
static Boolean AppHandleEvent( EventPtr eventP)
{
Word formId;
FormPtr frmP;
if (eventP->eType == frmLoadEvent)
{
// Load the form resource.
formId = eventP->data.frmLoad.formID;
frmP = FrmInitForm(formId);
FrmSetActiveForm(frmP);
switch (formId)
{
case MainForm:
{
FrmSetEventHandler(frmP, MainFormHandleEvent);
}
break;
default:
ErrFatalDisplay("Invalid Form Load Event");
break;
}
return true;
}
return false;
}
static void AppEventLoop(void)
{
Word error;
EventType event;
do {
EvtGetEvent(&event, evtWaitForever);
if (! SysHandleEvent(&event))
if (! MenuHandleEvent(0, &event, &error))
if (! AppHandleEvent(&event))
FrmDispatchEvent(&event);
} while (event.eType != appStopEvent);
}
static Err AppStart(void)
{
StarterPreferenceType prefs;
Word prefsSize;
// Read the saved preferences / saved-state information.
prefsSize = sizeof(StarterPreferenceType);
if (PrefGetAppPreferences(appFileCreator, appPrefID, &prefs, &prefsSize, true) !=
noPreferenceFound)
{
}
return 0;
}
static void AppStop(void)
{
StarterPreferenceType prefs;
// Write the saved preferences / saved-state information. This data
// will be backed up during a HotSync.
PrefSetAppPreferences (appFileCreator, appPrefID, appPrefVersionNum,
&prefs, sizeof (prefs), true);
}
static DWord StarterPilotMain(Word cmd, Ptr cmdPBP, Word launchFlags)
{
Err error;
FormPtr form1;
ControlType *testButton1;
error = RomVersionCompatible (version20, launchFlags);
if (error) return (error);
switch (cmd)
{
case sysAppLaunchCmdNormalLaunch:
// ErrNonFatalDisplay("Text");
error = AppStart();
if (error)
return error;
FrmGotoForm(MainForm);
form1= FrmInitForm(MainForm);
FrmSetActiveForm(form1);
form1= FrmGetActiveForm();
FrmSetEventHandler(form1, MainFormHandleEvent); // !!! Event-Handler !!!
testButton1= CtlNewControl(&form1, 1001, buttonCtl, "Button1f", 40, 20, 80, 13, stdFont, 0, false);
CtlSetEnabled ( testButton1, true ); // macht nicht so richtig was
CtlSetUsable ( testButton1, true ); // macht nicht so richtig was
CtlShowControl(testButton1); // macht nix ?!?!
FrmDrawForm(form1);
CtlHitControl (testButton1); // --> funktioniert! Debug-Meldung erscheint!
AppEventLoop();
AppStop();
break;
default:
break;
}
return 0;
}
DWord PilotMain( Word cmd, Ptr cmdPBP, Word launchFlags)
{
return StarterPilotMain(cmd, cmdPBP, launchFlags);
}