Mousedown() in Waitevent() Schleife

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

 

X0r

Betreff: Mousedown() in Waitevent() Schleife

BeitragMo, Jul 17, 2006 23:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn man z.B in einer Waitevent() Schleife prüft, wann eine Maustaste gedrückt gehalten wird, funktioniert das nicht. Ist ja auch klar, da er immer erst auf einen Maus Bewegungs oder Klick Event wartet.
Aber wie kann ich es nun so machen, dass ich in einer waitevent() schleife prüfen kann, ob ich gerade eine Maustaste gedrückt halte?

Byteemoz

BeitragDi, Jul 18, 2006 6:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Du kannst z.B. einen Timer benutzen:
Code: [AUSKLAPPEN]
Graphics 400, 300

CreateTimer 50

Repeat
   WaitEvent()
   
   Select EventID()
      Case EVENT_MOUSEDOWN
         Print "Taste gedrueckt: " + EventData()

      Case EVENT_MOUSEUP
         Print "Taste losgelassen: " + EventData()

      Case EVENT_TIMERTICK
         If MouseDown(1) Print "Taste gehalten: 1"
         If MouseDown(2) Print "Taste gehalten: 2"
         If MouseDown(3) Print "Taste gehalten: 3"
   EndSelect
   
Until AppTerminate()


-- Byteemoz
MaxIDE Community Edition: Summary | Bugs | Feature Requests | CVS Repository | Thread
 

X0r

BeitragDi, Jul 18, 2006 12:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Ach man. Stimmt. Wie konnte ich das nur vergessen Embarassed Embarassed


Noch eine Frage: Gibt es in BM sowas wie Getcolor, Wo mit man die Farbwerte von einem Pixel auf einer Koordinate zurückgeben kann?

Byteemoz

BeitragDi, Jul 18, 2006 12:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Direkter Zugriff auf den Backbuffer ist meines Wissens nicht möglich aber du könntest den Umweg über eine Pixmap nehmen:
Code: [AUSKLAPPEN]
Function GetPixelColor:Int(x:Int, y:Int)
   Local pix:TPixmap = GrabPixmap(x, y, 1, 1)
   Return pix.ReadPixel(0, 0)
EndFunction
-- Byteemoz
MaxIDE Community Edition: Summary | Bugs | Feature Requests | CVS Repository | Thread
  • Zuletzt bearbeitet von Byteemoz am Di, Jul 18, 2006 13:44, insgesamt einmal bearbeitet
 

X0r

BeitragDi, Jul 18, 2006 13:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Pixmap coordinates out of bounds, sagt BM.
Aber warum readpixel auf x,y??
Müsste das nicht 1,1 sein?
Denn wenn man z.B macht:

local pix.TPixmap = GrabPixmap(20, 20, 1, 1)
Dann ist seine width und height 1.
x und y sind 20.

Und bei readpixel(pix,x=20,y=20) würde das dann "außerhalb" der Pixmap sein, oder?

Byteemoz

BeitragDi, Jul 18, 2006 13:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Stimmt, sorry. Hab's korrigiert...
MaxIDE Community Edition: Summary | Bugs | Feature Requests | CVS Repository | Thread
 

X0r

BeitragSa, Jul 22, 2006 0:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok, Danke.
 

X0r

BeitragDo, Jul 27, 2006 22:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn man ein window gadget erstellt, dann klappt das nicht mehr.

Wie muss man das dann mache?

Ich mal überlegt und:

Code: [AUSKLAPPEN]

window:TGadget=CreateWindow("Window",100,100,800,500,0,WINDOW_TITLEBAR | WINDOW_RESIZABLE | WINDOW_MENU | WINDOW_STATUS | WINDOW_ACCEPTFILES )

canvas=CreateCanvas(1,1,200,200,window)

CreateTimer 50




Repeat
   WaitEvent()
   
   Select EventID()
case EVENT_WINDOWCLOSE
end
      Case EVENT_MOUSEDOWN
         Print "Taste gedrueckt: " + EventData()
pressing=1
      Case EVENT_MOUSEUP
         Print "Taste losgelassen: " + EventData()
pressing=0
   End Select
   
If pressing=1 Then
Print "Taste gehalten: 1"
EndIf





forever






Hat jemand eine elegantere Lösung?

FOODy

BeitragDo, Jul 27, 2006 23:11
Antworten mit Zitat
Benutzer-Profile anzeigen
BRL.PolledInput:
Code: [AUSKLAPPEN]
Rem
Currently only called by Graphics/bglCreateContext.
Private for now, as it really needs a source:object parameter.
End Rem
Function EnablePolledInput( source:Object=Null )
   [...] ' CODE
End Function


Einfach EnablePolledInput aufrufen.
Dann kannste normal MouseDown(), KeyDown(), etc verwenden.
 

Dreamora

BeitragFr, Jul 28, 2006 3:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Das was da ist würde schon funktionieren. Aber du musst den Canvas noch selektieren (der mouse event funktioniert nur innerhalb von canvas oder panel das active geflaggt ist)
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

X0r

BeitragFr, Jul 28, 2006 17:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja eben. Für den canvas brauche ich das auch. Wink

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group