The way that the XXXNewXXX UI functions work - mainly the fact that the form pointer passed in may not be the form pointer you get out - I would wait until I've added all my objects before attaching the form to event handlers and such...
This is just a guess... Hope it helps, Kevin -----Original Message----- From: Junyan [mailto:[EMAIL PROTECTED]] Sent: Wednesday, February 20, 2002 4:57 PM To: Palm Developer Forum Subject: fatal alert: object not in form hi, sorry to post this message again. i have tried to change my coding according to what was mentioned below but now it hinted me fatal alert: object not in form. do you know what this error is due to?? is there any ways to debug or track it? here are the new codes: static void submenu (char *cde, int counter){ FormPtr newForm; EventType openEvent; int MenuX=5, MenuY=20; MemHandle oldTxtH; char title[20],*msg2, msg[10]; MemPtr FieldPtr; StrPrintF(title,"Remarks for %s", cde); newForm = FrmNewForm(SubmenuForm, title, 0, 75, 160, 160, true, 0, 0, 0); currentIndex=counter; FrmSetActiveForm(newForm); FrmSetEventHandler(newForm, SubmenuFormHandleEvent); // create new field // FldNewField ((VoidPtr) &newForm, SubmenuField, MenuX, MenuY, 155, 50, 0, 100 , true, true, false, true, leftAlign, true, false, false); oldTxtH = FldGetTextHandle((FieldType *) GetObjectPtr(SubmenuField)); if ( oldTxtH == NULL ) oldTxtH = MemHandleNew(StrLen(array[counter])+1); FieldPtr = MemHandleLock(oldTxtH); StrCopy((char *)FieldPtr, array[counter]); MemHandleUnlock(oldTxtH); FldSetTextHandle((FieldType *) GetObjectPtr(SubmenuField),oldTxtH); CtlNewControl ((VoidPtr) &newForm, SubmenuButton, buttonCtl, "OK", MenuX+59, 70, 30, 10, stdFont , 0, true); openEvent.eType = frmOpenEvent; openEvent.data.frmOpen.formID = SubmenuForm; EvtAddEventToQueue (&openEvent); } thanks junyan > --- Junyan wrote: > hi. i would like to know what does these 2 fatal > alert means > 1) chunk under-locked You locked a handle, then you unlocked it, then you unlocked it again. You should not try to unlock it more times than you lock it. > 2) object not in form You are referring to an object that isn't in the form. (see below) > are there anything wrong with this coding? yes. typedef char iSubmenu[100]; iSubmenu array[MAXSIZE]; FldNewField ((VoidPtr) &newForm, SubmenuField, MenuX, MenuY, 155, 50, 0, 100 , true, true, false, true, leftAlign, true, false, false); fldptr=(FieldPtr)GetObjectPtr(SubmenuField); If you are using the GetObjectPtr() provided by CodeWarrior stationery, then you will see that it returns a pointer to an object in the currently active form. It is highly likely that &newForm is not the same form. (BTW, the first parameter to FldNewField must be a pointer to a pointer to a form. Is newForm a pointer to a form?) Furthermore, the docs for FldNewField() state that "the old form pointer value is not necessarily valid after this function returns." So, if you want to get a pointer to an object on the form to which you have just added a new field, you have to use the new form pointer value returned by this function. __________________________________________________ Do You Yahoo!? Yahoo! Sports - Coverage of the 2002 Olympic Games http://sports.yahoo.com -- For information on using the Palm Developer Forums, or to unsubscribe, please see http://www.palmos.com/dev/tech/support/forums/ -- For information on using the Palm Developer Forums, or to unsubscribe, please see http://www.palmos.com/dev/tech/support/forums/
