Palm OS/C/Field 编程
外观
字段可被描述为对此 PilRC
FORM ID MainForm AT (2 2 156 156) BEGIN FIELD ID ArtistField AT (4 14 160-8 14) NONEDITABLE FIELD ID ServerField AT (4 PREVTOP 160-8 14) UNDERLINED END
如果文本字段可以接收焦点却不能接收任何输入,则应用程序就可能错误地处理了keyDown事件,因此该事件永远也无法传送到FrmDispatchEvent(最终到达事件循环中的命令链)
虽然有字段编辑MemHandle(例如数据库记录)很容易(使用FldSetTextHandle),但更改文本字段中的文本的参与度却更高
void FldChangeText( FieldType *field, char *format, ...) { MemHandle fieldChunk; char *fieldStore; UInt32 roomNeeded; Err e; char text[ 99]; va_list args; // format the text va_start( args, format); StrVPrintF( text, format, args); va_end( args); roomNeeded = StrLen(text) + sizeof(NUL); // get the handle for the string and unlock it by removing it from the field fieldChunk = FldGetTextHandle( field); FldSetTextHandle( field, NULL); if ( NULL == fieldChunk) { fieldChunk = MemHandleNew( roomNeeded); if ( NULL == fieldChunk) goto tidyUp; } else { // resize the chunk if necessary if ( MemHandleSize( fieldChunk) < roomNeeded) { e = MemHandleResize( fieldChunk, roomNeeded); if ( e != errNone) goto tidyUp; } } // lock the chunk, write to it and unlock it fieldStore = MemHandleLock( fieldChunk); StrCopy( fieldStore, text); MemHandleUnlock( fieldChunk); tidyUp: // update the text in the field FldSetTextHandle( field, fieldChunk); FldDrawField( field); }