Extended Textfield

Übersicht BlitzMax, BlitzMax NG Codearchiv & Module

Neue Antwort erstellen

 

klepto2

Betreff: Extended Textfield

BeitragMi, Aug 09, 2006 23:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Dies ist ein kleines Stück Code, welches entstanden ist, um jemandem im englischen Forum zu helfen. Vielleicht nutzt er hier ja auch jemanden.
Es handelt sich hierbei um ein TextField (eher eine modifizierte TextArea)
welches sowohl Enter registriert und ein Event mit dem eingegebenen Text sendet als auch ein Event sendet, wenn man auf Tab drückt. Dabei wechselt der Cursor automatisch zum nächsten TextField. Leider ist der Code nicht kommentiert und etwas schnell zusammengeschustert.

Code: [AUSKLAPPEN]

SuperStrict

Type TExtTextField
   Global Group:TList = New TList
   Field Gadget:TGadget
   Field ChangeonEnter:Int = False

   
   
   Function Create:TExtTextField(X:Int , Y:Int , Width:Int , Parent:TGadget, COE:Int = True)
      Local TF:TExtTextField = New TExtTextField
      TF.Gadget = CreateTextArea(X , Y , Width , 20 , Parent)
      SetGadgetFilter(TF.Gadget , TExtTextField.Filter)
      TF.ChangeonEnter = COE
      TF.Gadget.context = TF
      TExtTextField.Group.Addlast(TF.Gadget)
      Return TF
   End Function
   
   Function filter:Int(event:TEvent,context:Object)
      Select event.id
         Case EVENT_KEYDOWN
            If event.data=9 Then Return 0
            If event.data=13 Return 0
         Case EVENT_KEYCHAR
            If event.data = KEY_ENTER Then
               If TExtTextField(TGadget(Event.source).context).ChangeonEnter = True Then
                  Local SLink:TLink = TExtTextField.Group.FindLink(event.source)
               If SLink.NextLink() <> Null Then
                  Local TField:TGadget = TGadget(SLink.NextLink().Value() )
                  ActivateGadget(TField)
               Else
                  Local TField:TGadget = TGadget(TExtTextField.Group.FirstLink().Value() )
                  ActivateGadget(TField)
               EndIf
            EndIf
               Local MyEVent:TEvent = CreateEvent(EVENT_GADGETDONE , event.source , 13 , 0 , 0 , 0 , TextAreaText(TGadget(event.source) ) )
               EmitEvent MyEvent
               Return 0
            EndIf
            If event.data = KEY_TAB Then
               Local SLink:TLink = TExtTextField.Group.FindLink(event.source)
               If SLink.NextLink() <> Null Then
                  Local TField:TGadget = TGadget(SLink.NextLink().Value() )
                  ActivateGadget(TField)
               Else
                  Local TField:TGadget = TGadget(TExtTextField.Group.FirstLink().Value() )
                  ActivateGadget(TField)
               EndIf
               Local MyEVent:TEvent = CreateEvent(EVENT_GADGETLOSTFOCUS , event.source , 9 , 0 , 0 , 0 , "Tabbed")
               EmitEvent MyEvent
               Return 0
            EndIf
      End Select
      Return 1
   End Function
   


End Type

Local Main:TGadget = CreateWindow("Test" , 0 , 0 , 400 , 400)
Local TF:TExtTextField = TExtTextField.Create(40 , 40 , 200 , Main)
Local TF2:TExtTextField = TExtTextField.Create(40 , 80 , 200 , Main)



While True
   WaitEvent
   Print CurrentEvent.ToString()
   Select EventID()
      Case EVENT_WINDOWCLOSE
         End
   End Select
Wend


PS.: mit dem letzten Parameter kann man einstellen ob auch bei einem Enter der Focus zum nächsten TextField gewechselt werden soll.
Matrix Screensaver
Console Modul für BlitzMax
KLPacker Modul für BlitzMax

HomePage : http://www.brsoftware.de.vu

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Codearchiv & Module

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group