Seite 1 von 2

SetCursorPos_() auf Screen? [Gelöst]

Verfasst: 01.07.2008 18:07
von Tompazi
Wie kann ich den Cursor auf meinem auf die richtige Position setzen?
So wird der Cursor zwar gesetzt aber nicht auf meinem Screen.

Code: Alles auswählen

InitSprite()
InitMouse()
InitKeyboard()

OpenScreen(800,600,32,"Test")
SetCursorPos_(400,300) ;; GEHT Nicht -.-

Repeat : ClearScreen($000000)
 ExamineMouse() 
  X = MouseX()
  Y = MouseY()
 StartDrawing(ScreenOutput())
  Circle(X,Y,10,$FFFFFF)
 StopDrawing()
 FlipBuffers()
 ExamineKeyboard()
Until KeyboardPushed(1)
MfG Tompazi

EDIT: Noch was, Ich will mit sowas wie KeyboardInkey() eine Tastenabfrage machen wo wenn Escape gedrückt wird ich 1 (Debug #PB_Key_EscapE) zurück bekomme. Allerdings kommt bei KeyboardInkey() ein String. wie geht das dann?

lG Tompazi

Verfasst: 01.07.2008 18:37
von Kaeru Gaman
a)
schon mal in die Hilfe geschaut, bei den Mouse-Commands...?

MouseLocate(x, y)

b)
auch für die Keyboard-Lib gibts einen Hilfe-Abschnitt...

KeyboardPushed(#PB_Key_Escape)

Verfasst: 01.07.2008 18:43
von Tompazi
a) Danke :)

b) ich hab mich falsch ausgedrückt es wird irgendeine Taste gedrückt und ich will, dass dan der Wert wie zum bsp für Space 57 zurück gegeben wird.
oder muss ich für jede einzelne Taste eine abfrage machen.

if KeyboardPushed(#PB_Key_Escape)
Wert = 1
Elseif ... .BÄHH

Das muss doch einfacher gehen *hope*

MfG Tompazi

Verfasst: 01.07.2008 19:00
von Kaeru Gaman
b)
ach soo...

nein, sowas ist leider nicht unterstützt.
die KeyboardLib für den Screen ist relativ begrenzt.

du kannst ja eine kombination von KeyboardInkey und KeyboardPushed benutzen,
um deine Tabelle zu erstellen.
die tasten, die einen ASC-Wert haben, holst du über KeyboardInkey,
und die Sondertasten über KeyboardPushed.

...wenn du nur unter Windows arbeitest, kannst du dir auch von der API eine Tabelle holen mit GetKeyboardState....

Verfasst: 01.07.2008 19:15
von Tompazi
wie geht das mit dem GetKeyboardState_()?
Wie meinst du das mit KeyboardInkey und KeyboardPushed kombbination?

MfG Tompazi

Verfasst: 01.07.2008 19:22
von Kaeru Gaman
a)
GetKeyboardState_() füllt dir einen 256byte-buffer mit dem aktuellen tastaturstatus.
präzises erzählt dir die MSDN...

schau auch mal in diesen thread:
http://www.purebasic.fr/german/viewtopic.php?t=16972
bei dem beispiel würde ich vorerst auf die Bit-shiftereien verzichten,
und einfach mal gucken, wie die Tabelle zurückgegeben wird und was man drauf aufbaun kann.


b)
zuerst würd ich nochmal gucken, was KeyboardInkey wirklich zurückliefert.
wenn es Sonderzeichen auch verarbeitet, sollte es dir für ESC ein Chr(27) liefern.
dann brauchst du u.U. gar keine Kombination basteln.

wenn nicht, kannst du ja checken, was für ein String zurückgegeben wird,
und wenn er leer ist aber trotzdem eine taste gedrückt wurde,
dann gehst du halt zusätzlich über KeyboardPushed.
oder du machst das umgekehrt, erst auf ANY prüfen, und wenn eine taste gedrückt wurde,
die sonderzeichen durchackern, und wenn es keines war, nimmst du den string.

Verfasst: 01.07.2008 20:02
von kswb73
warum nimmst du nicht einfach eine Schleife?

Hier mal ein Beispiel. In der Variable Key wird aktuell gedrückte Taste gespeichert.

Code: Alles auswählen

For a=1 To 255
  if KeyboardPushed(a)
  Key=a
  endif
next a
Warum 255? Meines Wissen nach ist das die höchste Tastennummer (kann sein, dass das nicht stimmt.)
Das ganze könntest du dann ganz normal auswerten.

Code: Alles auswählen

if key=#PB_Key_Escape
...
endif

Verfasst: 01.07.2008 20:14
von Tompazi
Danke
lol
ich hab das gerade gemacht will herschreiben das ichs geschafft habe und dann stehts Exakt so da wie ich geschrieben habe..
jedenfalls Danke.

MfG Tompazi

Verfasst: 01.07.2008 22:30
von Kaeru Gaman
@kswb

ja ist richtig mit den 0-255...
ist evtl. sogar die gleiche tabelle wie die die von GetKeyboardState() zurückgegeben wird...

jetzt bleibt mir nur die Frage....

wenn diese Art genügt, warum dann nicht grundsätzlich mit KeyboardPushed() arbeiten?

ach und btw...
bei diesem code wird nur die höchstnummerierte gedrückte taste angegeben,
weil die schleife durchlaufen wird bis zum ende.
wenn man ein break einsetzt, dann wird nur die erste zurückgegeben.
irgendwelche kombinationen von tasten können so nicht erfasst werden.

Verfasst: 02.07.2008 08:27
von Brügge
machste so:

Code: Alles auswählen

taste$ = ""
  for i = 0 to 255
    if keyboardpushed(i)
      taste$ = taste$+str(i)+" : "
    endif
  next i
dann siehste alle tasten die gedrückt werden...