[GELÖST] MaxGUI - Cursorposition in TextField?

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

 

CO2

ehemals "SirMO"

Betreff: [GELÖST] MaxGUI - Cursorposition in TextField?

BeitragSo, Sep 01, 2013 21:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
ich habe mir eine Art Befehlsleiste erstellt. Der Benutzer eine Eine Liste von "Befehlen" sowie die Befehlsleiste (TextField). Momentan hänge ich die Commands einfach hintereinander, d.h. Klickt der Benutzer auf einen Befehl in der Befehlsliste, so wird dieser einfach an die momentan in der Befehlsleiste stehenden Befehle "angehängt", egal, wo der Cursor steht. Ich habe bereits die gesamte MaxGUI-Hilfe durchgesehen, jedoch gibt es Cursor-Position-Bestimmungs-Befehle nur für TextAreas.
Habe ich eine andere Möglichkeit, die Cursorposition zu bestimmen?
mfG, CO²

Sprachen: BlitzMax, C, C++, C#, Java
Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti
  • Zuletzt bearbeitet von CO2 am Di, Sep 03, 2013 2:10, insgesamt einmal bearbeitet

Thunder

BeitragSo, Sep 01, 2013 22:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenns keine bessere Lösung gibt, kannst du mit einem Gadget-Filter arbeiten. Du müsstest am besten direkt eine Datenstruktur über SetGadgetFilter übergeben, wo dann die Cursorposition aktualisiert werden kann, denn die globale Variable ist unschön. Aber es ist nur ein Beispiel:

BlitzMax: [AUSKLAPPEN]
Strict
Framework brl.blitz
Import brl.eventqueue
Import maxgui.drivers


Global cursor
Local win:TGadget = CreateWindow("", 0, 0, 200, 100, Null, WINDOW_TITLEBAR | WINDOW_CENTER)
Local feld:TGadget = CreateTextField(10, 10, 170, 20, win)

SetGadgetFilter feld, textfield_callback, Null

Repeat
WaitEvent
Select EventID()
Case EVENT_WINDOWCLOSE
End
EndSelect
Forever



Function textfield_callback(e:TEvent, o:Object)
If e.id = EVENT_KEYDOWN Then
If e.data = 37 And cursor > 0 Then cursor :- 1
If e.data = 39 And cursor < TextFieldText(TGadget(e.source)).length Then cursor :+ 1
ElseIf e.id = EVENT_KEYCHAR Then
If e.data = 8 And cursor > 0 Then
cursor :- 1
Else
cursor :+ 1
EndIf
EndIf
Print "Cursor: "+cursor
Return 1
EndFunction


Ich hab es jetzt nicht allzu ausführlich getestet, aber es sollte funktionieren und sich ausbauen lassen, wenn nicht. Der Vorteil an der Methode ist, dass es MaxGUI ist, also auch plattformunabhängig, wie du richtig gesehen hast gibt es nämlich keine Funktionen speziell für TextFields. Möglich wäre es, dass sich doch irgendwo in den MaxGUI-Datenstrukturen diese Informationen verbergen.
 

CO2

ehemals "SirMO"

BeitragDi, Sep 03, 2013 2:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Besten Dank, funktioniert einwandfrei Wink
mfG, CO²

Sprachen: BlitzMax, C, C++, C#, Java
Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group