[futurebasic] Re: [FB] [FB^3] Appearance Text Edit in FB^3

Message: < previous - next > : Reply : Subscribe : Cleanse
Home   : October 2000 : Group Archive : Group : All Groups

From: Alain Pastor <apastor@...>
Date: Mon, 09 Oct 2000 15:22:49 +0200

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 ----------