SetCursorPos_() auf Screen? [Gelöst]

Anfängerfragen zum Programmieren mit PureBasic.
Tompazi
Beiträge: 211
Registriert: 22.09.2007 15:38

SetCursorPos_() auf Screen? [Gelöst]

Beitrag 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
Zuletzt geändert von Tompazi am 01.07.2008 20:15, insgesamt 1-mal geändert.
Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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)
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Tompazi
Beiträge: 211
Registriert: 22.09.2007 15:38

Beitrag 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
Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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....
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Tompazi
Beiträge: 211
Registriert: 22.09.2007 15:38

Beitrag von Tompazi »

wie geht das mit dem GetKeyboardState_()?
Wie meinst du das mit KeyboardInkey und KeyboardPushed kombbination?

MfG Tompazi
Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
kswb73
Beiträge: 319
Registriert: 04.02.2008 16:51
Kontaktdaten:

Beitrag 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
Windows XP: PB 4.31, PB 4.4, PB 4.51
Open Suse 11.2: PB 4.4
Tompazi
Beiträge: 211
Registriert: 22.09.2007 15:38

Beitrag 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
Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Brügge
Beiträge: 359
Registriert: 28.05.2006 16:40
Wohnort: Rheine

Beitrag 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...
Abgeschlossene games: No Name Game (NNG) Download-Link:
http://web56.login-1.loginserver.ch/eas ... 2125104111
Antworten