Use this, like I do:
In your Form handle function put
Char txtTime[timeStringLength];
Char finalTxtTime[timeStringLength+(5*sizeof(Char))];
DateTimeType theDate;
case nilEvent: // update the time
if (!gMenuOn) «------------ This is used to know if a Form
Menu is shown...
{
TimSecondsToDateTime (TimGetSeconds(), &theDate);
TimeToAscii (theDate.hour, theDate.minute, tfColon24h,
txtTime);
StrPrintF(finalTxtTime,"%s h", txtTime);
SetFieldTextFromStr(MenuInicial_TimeField, finalTxtTime,
true); «------------ This is one of my functions...
}
handled = true;
break;
Now in the AppEventLoop put this...
Boolean gMenuOn; «---- I use this as global...
EvtGetEvent(&event, SysTicksPerSecond());
// Supress drawing TimeField if another window has been opened
over ours.
if (event.eType == winExitEvent)
{
if (event.data.winExit.exitWindow ==
(WinHandle)FrmGetFormPtr(LoginForm))
{
gMenuOn = true;
}
}
// Resume drawing if our window has been entered
else if (event.eType == winEnterEvent)
{
if (event.data.winEnter.enterWindow ==
(WinHandle)FrmGetFormPtr(LoginForm) && event.data.winEnter.enterWindow
== (WinHandle)FrmGetFirstForm ())
{
gMenuOn = false;
}
Err SetFieldTextFromStr (UInt16 fieldID, char *s, Boolean redraw)
{
FieldPtr field;
MemHandle h;
Err err;
FormType * frmP;
UInt16 obj;
frmP = FrmGetActiveForm();
obj = FrmGetObjectIndex(frmP, fieldID);
field = (FieldType *)FrmGetObjectPtr(frmP, obj);
h = FldGetTextHandle (field);
if (h) {
FldSetTextHandle (field, NULL);
err = MemHandleResize(h, StrLen(s) + 1);
if (err != errNone) {
FldSetTextHandle(field, h); // Restore handle
return err;
}
} else {
h = MemHandleNew(StrLen(s) + 1);
if (!h)
return memErrNotEnoughSpace;
}
StrCopy((char *) MemHandleLock(h), s);
MemHandleUnlock(h);
FldSetTextHandle(field, h);
if (redraw)
FldDrawField(field);
return errNone;
}
I hope it will help!
André Augusto
--
For information on using the PalmSource Developer Forums, or to unsubscribe,
please see http://www.palmos.com/dev/support/forums/