Cursor in nächstes Feld setzen

Übersicht BlitzBasic BlitzPlus

Neue Antwort erstellen

Sereyanne

Betreff: Cursor in nächstes Feld setzen

BeitragFr, Mai 11, 2012 19:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Und gleich noch eine Frage Very Happy

Wenn ich ein Fenster hab mit mehreren TextFields, dann kann ich ja ganz normal mit der Tab-Taste immer eins weiter schalten. Wenn ich nun aber auch mit Enter eins weiter springen möchte oder mit den Pfeiltasten hoch und runter schalten möchte, wie krieg ich das integriert?

Gibt es da einen BB-Befehl, den ich noch nicht kenne, oder muss ich basteln?

Danke im Voraus
Sereyanne

ozzi789

BeitragFr, Mai 11, 2012 19:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Eingaben abfangen, und mittels ActiveGadget zum nächstne Textfield springen (zuvor die irgendwie organisieren, vlt mittels einem Type / Dim)
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5

Sereyanne

BeitragFr, Mai 11, 2012 20:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Ahja, danke, den kannte ich wirklich noch nicht.

Aber warum funktioniert der nicht, wenn ich schon im TextField bin?

schnelles Beispiel:
Code: [AUSKLAPPEN]
f EventSource()=betragwert1 Then
   If KeyHit(156) Then ;Return-Taste vom Ziffernblock
      ActivateGadget abzug1
   EndIf
EndIf

Setze ich den Code woanders hin in die Main, läufts. Aber ich will ja von Feld zu Feld springen....

ozzi789

BeitragFr, Mai 11, 2012 21:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Puh, das ist ein gehacke geworden...

Funktioniert momentan "bloss" mit der Enter Taste, ein Fakebutton ist die einzige möglichkeit ein Enter abzufangen in einem Textfield.

Man könnte die Keyhits auch via user32 (?) abfangen und dann zB Pfeiltasten verwenden.

Code: [AUSKLAPPEN]
;ozzi789
;11/05/2012
;move from textfield to textfield with enter key

;.lib "user32.dll"
;GetFocus%():"GetFocus"


Global window,textfield_counter=-1,textfield_current,enter_button
Type textfield
   Field id
   Field tfhandle
End Type


window = CreateWindow("Window", 0, 0, 300, 300, 0, 1)
enter_button = CreateButton ("",3000,3000,0,0,window,4)


tf1=create_textfield(10,10,100,18,window)
tf2=create_textfield(10,30,100,18,window)
tf3=create_textfield(10,50,100,18,window)
tf4=create_textfield(10,70,100,18,window)



Repeat



   
      If WaitEvent(1)=$803 Then End
   
   do_the_magic()

         

Forever


Function do_the_magic()
   Local current_marked
   If WaitEvent(1)=$401 Then
       If EventSource()=enter_button
               current_marked=0
               ;get active one
               For t.textfield=Each textfield
                  If getfocus()= QueryObject(t\tfhandle, 1)
                     current_marked=t\id
                  EndIf
               Next
               ;if its the last one, go for the first one
               If current_marked+1>textfield_counter Then current_marked=-1
               ;get the handle
               For t.textfield=Each textfield
                  If t\id=current_marked+1
                     textfield_current_handle=t\tfhandle
                  EndIf
               Next
                  ;active it
               ActivateGadget(textfield_current_handle)
      End If
   EndIf

End Function


Function create_textfield(x,y,w,h,win)
   tf_handle=CreateTextField(x,y,w,h,win)
   
   
   t.textfield = New textfield
      t\tfhandle=tf_handle
      textfield_counter=textfield_counter+1
      t\id=textfield_counter
   Return tf_handle
End Function
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5

Sereyanne

BeitragSa, Mai 12, 2012 18:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Wow, hätte nicht gedacht, dass das doch so ein Aufwand ist. Shocked Danke für deine Mühe!

Eigentlich war das mit der Enter-Taste ja auch nur ein Test. Jetzt muss ich mich mal durch deinen Code wurschteln und schauen, wie ich die hoch- und runter-Pfeiltasten da eingebaut bekomme..... Cool

ozzi789

BeitragSa, Mai 12, 2012 20:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie schon erwähnt, klappt nur mittels einem versteckten Button mit dem Flag 4.
Mit den Pfeiltasten kriegst du das wie folgend hin:
-Fange alle Keyhits ab (mittels WinAPI , findest du hier im Forum)
-Falls nun eine Pfeiltaste war, prüfe ob dein Fenster aktiv ist (ActiveWindow)
-All diese Abfragen kannst du bei "If EventSource()=enter_button " einbauen

Falls du nicht klarkommst, frag ruhig, aber probier es zuerst selbst Wink

Grüsse
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5

Midimaster

BeitragMi, Dez 19, 2012 10:50
Antworten mit Zitat
Benutzer-Profile anzeigen
also unter BMax gibt es da ja noch die Funktion TextFilter(), die direkt in Textfields eingehängt werden kann. Damit werden alle Tastendrücke die an das Textfield gehen auch durch diese Funktion gesendet, wo man sie dann abfangen oder ändern kann.

Vielleicht wäre das ja auch eine Möglichkeit auf BlitzPlus?
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe

Neue Antwort erstellen


Übersicht BlitzBasic BlitzPlus

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group