I wrote: > CLEAR LOCAL MODE > LOCAL FN buildTextEdit > DIM err AS LONG > DIM textEditH AS HANDLE > DIM textH AS HANDLE > DIM WndPtr AS windowPtr > DIM theStr AS STR255 > DIM myRect AS RECT > > WndPtr = WINDOW(_wndPointer) : IF WndPtr = _nil THEN EXIT FN > textH = FN NewHandle(0) : IF textH = _nil THEN EXIT FN > > theStr = "Hello world! I am Appearance compliant." > > LONG IF FN PtrAndHand(@theStr[1],textH,theStr[0]) = _noErr > err = FN SetThemeWindowBackground(WndPtr,_kThemeActiveDialogBackgroundBrush,_true) > myRect.left = 20 > myRect.top = 20 > myRect.right = 380 > myRect.bottom = 180 > textEditH = FN NewControl(WndPtr,myRect,"",_true,0,0,0,_kControlEditTextProc,2) > err = FN SetControlData(textEditH,0,_kControlEditTextTextTag,FN > GetHandleSize(textH),[textH]) > END IF > DisposeHandle(textH) > END FN > Hi again Ken, It appears that it is even simpler than that (sorry I haven't got the Appearance documentation), but it seems that the SetControlData call doesn't require a handle but just the start of your text in memory and its length so you can write the function like this as well: CLEAR LOCAL MODE LOCAL FN buildTextEdit DIM err AS LONG DIM textEditH AS HANDLE DIM WndPtr AS windowPtr DIM theStr AS STR255 DIM myRect AS RECT WndPtr = WINDOW(_wndPointer) : IF WndPtr = _nil THEN EXIT FN theStr = "Hello world! I am Appearance compliant." err = FN SetThemeWindowBackground(WndPtr,_kThemeActiveDialogBackgroundBrush,_true) myRect.left = 20 myRect.top = 20 myRect.right = 380 myRect.bottom = 180 textEditH = FN NewControl(WndPtr,myRect,"",_true,0,0,0,_kControlEditTextProc,2) err = FN SetControlData(textEditH,0,_kControlEditTextTextTag,theStr[0],@theStr[1]) END FN This makes even easier my suggestion to build the function so that it accepts a parameter be it an address of a FB string or a handle. Starting with your demo, here is a reworked version. It asks for a text file at startup, load it into a handle and randomly inserts whether a string or the text pointed by the handle. Please adjust code for e-mail line breaks. */ '------------ Begin FB^3 Code -------------------- /* This demo builds an Appearance Manager-compliant Text Edit field on a color theme background and places a small text string into the field. Ken Shmidheiser Somerset, KY 10-9-00 */ INCLUDE "Tlbx Appearance.Incl" BEGIN GLOBALS DIM gToggle AS SHORT DIM gTestH AS HANDLE DIM gTestStr AS STR255 END GLOBALS CLEAR LOCAL DIM fileH AS HNDL DIM id AS INT DIM @ ref AS INT DIM fName AS STR63 LOCAL FN ReadFileToHandle LONG IF gTestH = _nil fName = FILES$(_fOpen,"TEXT",,ref) LONG IF fName[0] OPEN "I", 1, fName, , ref fileH = FN NewHandleClear(LOF(1,1)) LONG IF fileH HLock(fileH) READ FILE 1,[fileH],FN GetHandleSize(fileH) HUnlock(fileH) END IF CLOSE 1 END IF XELSE fileH = gTestH END IF END FN = fileH LOCAL FN initialize WINDOW-1,"Appearance Compliant Text Edit Field Demo",(0,0)-(400,250),_docNoGrow gTestStr = "I am a Plain Jane FB^3 EDIT FIELD." EDIT FIELD 10, gTestStr,(20,20)-(380,180),_framed EDIT FIELD 0 BUTTON 1,1,"Quit",(330,210)-(380,230),_shadow BUTTON 2,1,"Implement Appearance Manager Window",(20,210)-(315,230),_push WINDOW 1 gTestH = FN ReadFileToHandle END FN CLEAR LOCAL MODE LOCAL FN buildTextEdit(memAddress AS LONG) DIM err AS LONG DIM AS LONG textLen,textStart DIM textEditH AS HANDLE DIM WndPtr AS windowPtr DIM myRect AS RECT WndPtr = WINDOW(_wndPointer) : IF WndPtr = _nil THEN EXIT FN LONG IF FN HGetState(memAddress) > - 1 textLen = FN GetHandleSize(memAddress) IF textLen > _maxint THEN textLen = _maxint textStart = [memAddress] XELSE textLen = |memAddress| textStart = memAddress + 1 END IF err = FN SetThemeWindowBackground(WndPtr,_kThemeActiveDialogBackgroundBrush,_true) myRect.left = 20 myRect.top = 20 myRect.right = 380 myRect.bottom = 180 textEditH = FN NewControl(WndPtr,myRect,"",_true,0,0,0,_kControlEditTextProc,2) err = FN SetControlData(textEditH,0,_kControlEditTextTextTag,textLen,textStart) END FN LOCAL FN doDialog DIM evnt% DIM id% DIM return$ evnt% = DIALOG(0) id% = DIALOG(evnt%) SELECT CASE evnt% CASE _wndClose SELECT id% CASE 1 DisposeHandle(gTestH) END END SELECT CASE _btnClick SELECT id% CASE 1 END CASE 2 LONG IF gToggle = _false EDIT FIELD CLOSE 1 LONG IF MAYBE FN buildTextEdit(@gTestStr) XELSE IF gTestH THEN FN buildTextEdit(gTestH) ELSE BEEP END IF BUTTON CLOSE 1 BUTTON 1,1,"Quit",(330,210)-(380,230),_kControlBevelButtonNormalBevelProc BUTTON CLOSE 2 return$ = "Press to return to regular FB^3 window" BUTTON 2,1,return$,(20,210)-(315,230),_kControlBevelButtonNormalBevelProc gToggle = _true xelse WINDOW CLOSE 1 FN initialize gToggle = _false END IF END SELECT END SELECT END FN LOCAL FN doMenu DIM menuID% DIM itemID% menuID% = MENU(_menuID) itemID% = MENU(_itemID) SELECT CASE menuID% SELECT itemID% CASE 1 CASE 2 END END SELECT END SELECT MENU END FN APPLE MENU "(Appearance Compliant Text Edit Field Demo..." MENU 1,0,_enable,"File" MENU 1,1,_disable,"-" MENU 1,2,_enable,"Quit/Q" ON DIALOG FN doDialog ON MENU FN doMenu FN initialize DO HANDLEEVENTS UNTIL 0 END '---------- End Code ----------