Seite 1 von 2
Input3dEvent() Backspace
Verfasst: 16.10.2010 16:10
von kob
Hallo
Ich mache greade sachen mit der 3D Gui und da ist mir aufgefallen das
man in einem String gadget garnicht den text löschen kann.
Habe schon folgendes versucht :
Code: Alles auswählen
If KeyboardPushed(#PB_Key_Back)
InputEvent3D(MouseX(), MouseY(), MouseButton(#PB_MouseButton_Left),Chr(8))
Else
InputEvent3D(MouseX(), MouseY(), MouseButton(#PB_MouseButton_Left),KeyboardInkey())
EndIf
das geht aber auch nicht , selbst wenn ich auch in der else das KeyboardInkey() gegen Chr(8) astausche tut sich nix. Habe auch schon andere 'zeichen' ausprobiert , geht auch nicht. Weis jemand wie ich da mache das sich zeichen löschen lassen ?
Re: Input3dEvent() Backspace
Verfasst: 20.10.2010 22:19
von kob
Könnte sich mal jemand melden der nur ein blassen hauch hat woran das liegen könnte ?
währe echt nett
Re: Input3dEvent() Backspace
Verfasst: 21.10.2010 01:30
von PMV
http://www.purebasic.fr/english/viewtop ... 16&t=43917
Fals du kein Englisch kannst, Google-Translation
Sorry, aktuell keine Zeit und interesse, mich näher mit dem Problem zu befassen.
Bis ich so weit bin, gibs hoffentlich schon ne bessere integration von OGRE3D in PB.
*träum*
MFG PMV
Re: Input3dEvent() Backspace
Verfasst: 21.10.2010 07:10
von kob
danke das endlich einer was geschrieben hat THX
problem ist halt das man den scancode in ein string umwandeln muss
und das gestaltet sich doch etwas schwierig ^^ "[BS]" (kann Alt+08) nicht hier verwenden
geht nicht und das ist ja auch kein scan code oder ?
Re: Input3dEvent() Backspace
Verfasst: 21.10.2010 10:13
von #NULL
du könntest den text bei entsprechendem tastendruck doch direkt modifizieren (get/setText..), also z.b. bei backspace das letzte zeichen entfernen. das problem ist nur das du die aktuelle cursorposition nicht kennst. du könntest aber mit InputEvent3d() eine art tag einfügen und dann wieder auslesen an welcher position es eingefügt wurde, dann hast du auch die nötige cursor position. fragt sich nur ob dieser aufwand lohnt.
<edit>
hab's gerade probiert. funktioniert aber auch nicht so einfach. wenn man den modifizierten text einsetzt, also den ganzen gadgettext ersetzt, dann wird der cursor damit ans textende gesetzt und die vorherige position geht verloren

. mam müsste also auch noch den cursor wieder zurücksetzen. geht wahrscheinlich nur mit einem simulierten mausclick (cursortasten gehen ja auch nicht) und da wirds dann langsam albern.
Re: Input3dEvent() Backspace
Verfasst: 21.10.2010 15:11
von kob
Wird auserdem ziemlich doof wenn man sehr viele gadgets hat die nicht fortlaufend nummeriert sind.
kennt vieleicht einer von euch net funktionsfähige und gute GUI die man als alternative nehmen könte ?
Re: Input3dEvent() Backspace
Verfasst: 21.10.2010 17:15
von PMV
Es existieren einige neben CEGUI, sogar bereits mit OGRE3D, doch mal
davon abgesehen, das ich CEGUI allen anderen mir bekannten bevorzuge,
wirds wohl kaum möglich sein, ohne einen kompletten OGRE3D-Wrapper
diese zu verwenden. (was im übrigen auch für CEGUI gilt)
So lange es keine bessere implementierung von OGRE3D gibt, gibt es nur
die Alternative: eine andere 3D-Engine. Viel Auswahl bleibt da auch nicht,
wenn man nicht selber nen Wrapper schreiben will/ kann. Und in dem Fall
wäre OGRE3D mit CEGUI dann doch wieder eine Wahl.
MFG PMV
Re: Input3dEvent() Backspace
Verfasst: 22.10.2010 12:49
von kob
mhh schade
ich habe ein weg gefunden geschriebenen text rückgängig zu machen :
man muss ihn mit der maus makieren und was anderes schreiben ^^
jetzt fält mir aber schon wieder der nächste bug auf :
wenn ich auf das hintergrundfenster klicke verschwinden alle buttons
war ja klar das sowas nochmal kommt
gibt's da eine bekante lösung
wenn es nötig ist poste ich mal das
gesamte projekt ^^
Re: Input3dEvent() Backspace
Verfasst: 22.10.2010 14:47
von #NULL
kob hat geschrieben:wenn ich auf das hintergrundfenster klicke verschwinden alle buttons
ich hab keine erfahrung mit cegui, aber das klingt eher danach, als hättest du die buttons nicht als childs des window erstellt. wenn du das fenster weg bewegst, kannst du die buttons dann sehen?
noch ne idee zum stringgadget: vielleicht reicht es dir den cursor immer nur am text ende zu haben (also ans ende setzen bei jedem ändern des textes), dann hast du nicht mehr das problem mit der cursor position und kannst zumindest backspace benutzen. sieht nur unschön aus, weil das setzten und markieren mit der maus wirst du wohl nicht los werden (du bekommst in den fällen leider auch kein event_change oder _focus).
Re: Input3dEvent() Backspace
Verfasst: 22.10.2010 20:08
von PMV
Also bei mir is bis jetzt auch nix verschwunden, wenn ich nen Fenster verschoben hab oder darein geklickt hab.
MFG PMV