Hello all,

I get this error message when I call FldDrawField() after setting a new text in a 
field.

"During a regular checkup, Palm OS Emulator determined that the dynamic heap chunk 
with header
address 0x00005058 got corrupted. The "hOffset" field of the chunk header did not 
reference a
memory location within a master pointer block."
The "Continue" and the "Debug" buttons are gray out, so the only thing I can do is 
"Reset". 

This is the snip code to set new text field, do you see anything wrong in the code? 
Any idea or suggestion is very appreciated.

tnn

/***************************************************************************/
/*                                                                         */
/*  FUNCTION:    SetFieldText, taken from utils.c in SimpleScan example    */
/*                                                                         */
/*  DESCRIPTION:Perform all necessary actions to set a Field control's     */
/*              text and redraw, if necesary.  Allocates a text handle.    */
/*                                                                         */
/*                                                                         */
/*  PARAMETERS: nFieldID(in) - The resource ID of the field.               */
/*              pSrcText(in) - The text to copy into field.                */
/*              nMaxSize(in) - Max size that the field can grow            */
/*                             including nullChr                           */
/*              bRedraw(in)  - Should the text be redrawn now?             */
/*                                                                         */
/*  RETURNED:   None                                                       */
/*                                                                         */
/***************************************************************************/
void SetFieldText(UInt16 nFieldID, const Char* pSrcText, Int16 nMaxSize, Boolean 
bRedraw)
{
   MemHandle hFieldText;
   Char*  pFieldText;
   FieldPtr pField;
   Int16 len;
   UInt32 curSize;

   pField = (FieldPtr)GetObjectPtr(nFieldID);
   if(!pField)
      return;

   hFieldText = FldGetTextHandle(pField);
   if(!hFieldText) {
      hFieldText = MemHandleNew(nMaxSize);
   // If already allocated, make sure it can handle nMaxSize already.
   // If not, realloc that buffer
   } else {
      curSize = MemHandleSize(hFieldText);
      if(curSize < nMaxSize)
         MemHandleResize(hFieldText, nMaxSize);
   }

   if( hFieldText ) {
      len = StrLen(pSrcText);
      pFieldText = (Char*)MemHandleLock(hFieldText);
      if (len > nMaxSize - 1) {
         StrNCopy( pFieldText, pSrcText, nMaxSize-1);
         pFieldText[nMaxSize-1] = nullChr;
      } else {
         StrCopy(pFieldText, pSrcText);
      }
      MemHandleUnlock(hFieldText);
      FldSetTextHandle(pField,(MemHandle)hFieldText);
      FldSetTextAllocatedSize(pField,nMaxSize);
      FldSetMaxChars( pField, nMaxSize-1);
      FldRecalculateField( pField, true );
      if(bRedraw)
         FldDrawField( pField );
   }
}

In the contrustor, the text field is set
usable
editable
underline
single line
not dynamic size
left justified
max characters: 64

This is the function call

Char authorstr[41] = "Thunguyet nguyen";
SetFieldText(RecordAuthorField, authorstr, 41);

Do I have to set dynamic size for the field because I have to set different text (with 
different
length) for the field? Is that my problem?


__________________________________________________
Do You Yahoo!?
Yahoo! Autos - Get free new car price quotes
http://autos.yahoo.com


-- 
For information on using the Palm Developer Forums, or to unsubscribe, please see 
http://www.palmos.com/dev/support/forums/

Reply via email to