Text areas and text fields stuff

BlitzMax Forums/BlitzMax GUI Programming/Text areas and text fields stuff

Text fields look nicer because they have a thin border, instead of that ugly Windows 95-looking sunken border.

Text areas can have their color set, and be read-only.

Is there any chance a flag could be added like TEXTFIELD_READONLY?

While waiting for the READONLY flag you could may use a disabled TextField.
The only disadvantage is that that the foreground color defaults to gray, but beside that it may work for you.
Also there is a Label with simple and sunken border which is only 1 pixel and does perhaps what you are looking for.
I have attached a quick example:



SuperStrict
Import MaxGui.Drivers

'End of Header File


Local Window1:TGadget = CreateWindow:TGadget("Window1",240,117,221,168,Null,WINDOW_TITLEBAR|WINDOW_RESIZABLE |WINDOW_STATUS |WINDOW_CLIENTCOORDS )
	Local TextField1:TGadget = CreateTextField:TGadget(10,10,80,18,Window1:TGadget,Null)
		SetGadgetText( TextField1:TGadget,"TextField1")
	Local TextField2:TGadget = CreateTextField:TGadget(10,38,80,18,Window1:TGadget,Null)
		SetGadgetText( TextField2:TGadget,"TextField2")
		DisableGadget( TextField2:TGadget )
	Local Label1:TGadget = CreateLabel:TGadget("Label1",120,78,80,14,Window1:TGadget,Null)
	Local TextField3:TGadget = CreateTextField:TGadget(120,10,80,18,Window1:TGadget,Null)
		SetGadgetText( TextField3:TGadget,"TextField3")
		SetGadgetColor( TextField3:TGadget,112,145,222, True )
		SetGadgetTextColor( TextField3:TGadget,0,0,0 )
	Local TextField4:TGadget = CreateTextField:TGadget(120,38,80,18,Window1:TGadget,Null)
		SetGadgetText( TextField4:TGadget,"TextField4")
		DisableGadget( TextField4:TGadget )
		SetGadgetColor( TextField4:TGadget,206,202,55, True )
		SetGadgetTextColor( TextField4:TGadget,23,7,224 )
	Local TextArea1:TGadget = CreateTextArea:TGadget(10,81,80,45,Window1:TGadget,Null)
		SetTextAreaText( TextArea1:TGadget , "TextArea1" )
	Local Label3:TGadget = CreateLabel:TGadget("Label3",10,142,80,16,Window1:TGadget,LABEL_SUNKENFRAME)
		SetGadgetColor( Label3:TGadget,118,218,69, True )
		SetGadgetTextColor( Label3:TGadget,241,88,119 )
	Local Label4:TGadget = CreateLabel:TGadget("Label4",120,142,80,16,Window1:TGadget,LABEL_SUNKENFRAME)
	Local Label2:TGadget = CreateLabel:TGadget("Label2",120,108,80,18,Window1:TGadget,LABEL_FRAME)
		SetGadgetColor( Label2:TGadget,241,88,119, True )
		SetGadgetTextColor( Label2:TGadget,0,0,0 )

Repeat
	WaitEvent()
	Select EventID()
		Case EVENT_WINDOWCLOSE
			Select EventSource()
				Case Window1	Window1_WC( Window1:TGadget )
			End Select

		Case EVENT_GADGETACTION
			Select EventSource()
				Case TextField1	TextField1_GA( TextField1:TGadget )
				Case TextField2	TextField2_GA( TextField2:TGadget )
				Case TextField3	TextField3_GA( TextField3:TGadget )
				Case TextField4	TextField4_GA( TextField4:TGadget )
				Case TextArea1	TextArea1_GA( TextArea1:TGadget )
			End Select

	End Select
Forever

Function Window1_WC( Window:TGadget )
	DebugLog "Window Window1 wants to be closed"
'	HideGadget( Window:TGadget )

	End
End Function

Function TextField1_GA( TextField:TGadget )
	DebugLog "TextField TextField1 was modified"
	DebugLog "Text = "+ TextFieldText$( TextField:TGadget )
	
End Function

Function TextField2_GA( TextField:TGadget )
	DebugLog "TextField TextField2 was modified"
	DebugLog "Text = "+ TextFieldText$( TextField:TGadget )
	
End Function

Function TextField3_GA( TextField:TGadget )
	DebugLog "TextField TextField3 was modified"
	DebugLog "Text = "+ TextFieldText$( TextField:TGadget )
	
End Function

Function TextField4_GA( TextField:TGadget )
	DebugLog "TextField TextField4 was modified"
	DebugLog "Text = "+ TextFieldText$( TextField:TGadget )
	
End Function

Function TextArea1_GA( TextArea:TGadget )
	DebugLog "TextArea TextArea1 was modified"
	
End Function



How about using SetGadgetFilter():

Import MaxGui.Drivers

Strict 

Global window:TGadget = CreateWindow("My Window",30,20,320,200)
Global textfield:TGadget =CreateTextField(4,4,120,22,window)

SetGadgetText( textfield,"A textfield gadget" )

' Make read-only
SetGadgetFilter( textfield, ReadOnlyCallback )

While WaitEvent()
	Print CurrentEvent.ToString()
	Select EventID()
	Case EVENT_GADGETACTION
		Select EventSource()
			Case textfield
				Print "textfield updated"
		End Select
	Case EVENT_WINDOWCLOSE
		End
	End Select
Wend

Function ReadOnlyCallback(event:TEvent,context:Object)
	Return 0	' Never allow edit.
EndFunction