Seite 1 von 2

Nochmals Thema Mauseinbindung (Titel geändert)

Verfasst: 11.12.2005 02:41
von PB42
Hallo, ich muß nochmal mit dem blöden Beispiel mit den Klaviertasten nerven, denn es geht mir darum, daß der Source reagiert, wenn ich mit der Maustaste auf die erste weiße Taste von links klicke: Dann soll sich rein übungshalber eine weitere weiße Taste ganz rechts bilden, wobei es mir wie gesagt nur ums Prinzip geht, WIE die Maus eingebunden wird, und zwar so, daß die SOWOHL auf Grafik Wirkung zeigt, ALS AUCH auf Buttons, sobald selbige hinzugewfügt werden. Ich müßte wohl irgendwie #PB_EventType_LeftClick verwenden, aber die PB-Hilfe schweigt sich ja schön aus, wie das verwendet wird. Weiß das jemand? Danke. Nochmals der Source und mein bisheriger Anastz, wobei ich weiß, daß es so nicht gehen kann, aber deshalb frage ich ja:

Code: Alles auswählen

InitSprite()
InitMouse()
OpenWindow(0,0,0,800,600,#PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget,"")
OpenWindowedScreen(WindowID(0), 0, 0, 700, 200, 0, 0, 0)

Repeat
eventID = WaitWindowEvent()
EventType()      

    StartDrawing(ScreenOutput())
    FrontColor(255,255,255)   
    Box(0,0,50,200)
    Box(51,0,50,200)
    Box(102,0,50,200)
    Box(153,0,50,200)
    Box(204,0,50,200)
    Box(255,0,50,200)
    Box(306,0,50,200)
    Box(357,0,50,200)
    
    FrontColor(0,0,0)
    Box(32,0,36,130)
    Box(83,0,35,130)
    Box(134,0,35,130)
    
    Box(235,0,35,130)
    Box(286,0,35,130)  
  StopDrawing()  
  
  
  If WindowMouseX() > 0 And WindowMouseX() < 50 And WindowMouseY() > 0 And WindowMouseY() < 200
  StartDrawing(ScreenOutput())
  FrontColor(255,255,255)
  Box(408,0,50,200)
  StopDrawing()
  EndIf 
   
Until eventID = #PB_EventCloseWindow
PB42

Verfasst: 11.12.2005 02:54
von scholly
moin, moin, PB42...

Ich kann Dir nicht konkret helfen, aber ich hab eben mal über C.A.V nach "#PB_EventType_LeftClick" gesucht und 14 Treffer bekommen.
Vielleicht ist da ja was bei, was Dir weiterhilft.

guhts nächtle...
scholly

Verfasst: 11.12.2005 03:02
von Ynnus
Ich frage mich gerade, wieso da kein flipbuffers() drinn ist. Brauch man das jetzt plötzlich bei windowedScreens nicht mehr? Ansonsten kannst du dein Linksklick-Event mittels der WinAPI so realisieren:

(eventID = #WM_LBUTTONDOWN)

Einfach in deine IF einbinden zur Abfrage ob die Maus innerhalb des Bereiches ist.

EDIT: Und komischerweise hängt sich das Programm auf wenn ich irgendwo ein ExamineMouse() einbauen will... :?
Liegt das jetzt an PB und WindowsScreens? Bei normalen Screens hat das bisher noch nie Probeme gemacht.

Verfasst: 11.12.2005 03:03
von spacewalker
Hi!
So, aus dem stehgriff...
Du wertest den wert, der von EventType() gegeben wird, gar nicht aus.
eigentlich sillte es z.b.

Code: Alles auswählen

Select EventType()
             case...
         EndSelect
heissen.
ausserdem, so wie ich das sehe, ist das ein screen wo du EventType() abfragst. Meines wissens nach geht das nicht - benutze WindowEvent() = 514 oder so, debuge mal die rueckgaben.Wenn du schon einen screen benutst, dann nach ExamineMouse()

und dann nach MouseButton(Mausknopf)

Verfasst: 11.12.2005 03:04
von PB42
Moin Moin scholly! C.A.V kenn ich nicht, was ist das? Würd ich gerne wissen, aber falls Du schon schläfst, laß Dich nicht stören.

PB42

Verfasst: 11.12.2005 03:10
von PB42
Hallo Spacewalker,

examineMouse() scheidet ja gerade aus, weil ich damit dann nur über der Grafik arbeiten kann, anstatt überall, also auch auf Buttons, sobald vorhanden.

PB42

Verfasst: 11.12.2005 03:14
von scholly
PB42 hat geschrieben:C.A.V kenn ich nicht, was ist das?
Ist ein tool, mit dem man das Code-Archiv durchforsten kann. Ist in dem Paket mit drin. Hat man mir letztens zum einbinden ins tool-menü empfohlen.
sorry, mir fallen die Augen zu, aber wenn Du nach CAV oder C.A.V suchst, findest Du bestimmt den Link zu dem großen Code-Archiv.

schnarch...
scholly :wink:

Verfasst: 11.12.2005 03:19
von spacewalker
nun, sobald du innerhalb eines screens zeichnest, sind die buttons e ungueltig, Wenn du aber mit "normalen" windowevents UND parallel mit dem screen arbeiten willst, hilft nur winapi oder z.b. WindowEvent() = 514, check das aber bitte noch ab, welche nummer die ereigniss ausloest.
dann kannst aber immer noch mit WindowMouseX() und WindowMouseY()
die koordinaten zurueckrechnen, ohne das sagen zu verlieren.

Verfasst: 11.12.2005 03:20
von Ynnus
PB42 hat geschrieben:Hallo Spacewalker,

examineMouse() scheidet ja gerade aus, weil ich damit dann nur über der Grafik arbeiten kann, anstatt überall, also auch auf Buttons, sobald vorhanden.

PB42
Buttons brauchen keine explizite Abfrage der Maus sondern da nimmt man als Event PB_Event_Gadget und setzt dad dann so ein:

Code: Alles auswählen

   Repeat
     EventID = WaitWindowEvent()
     
     Select EventID
     
       Case #PB_Event_Gadget
         Select EventGadgetID()
           Case 1 : Debug "Schalter 1 angeklickt!"
           Case 2 : Debug "Schalter 2 angeklickt!"
           Case 3 : Debug "Schalter 3 angeklickt!"
         EndSelect
       
       Case #PB_Event_Menu
         Select EventMenuID()
           Case 1 : Debug "Menü-Eintrag 1 angeklickt!"
           Case 2 : Debug "Menü-Eintrag 2 angeklickt!"
           Case 3 : Debug "Menü-Eintrag 3 angeklickt!"
         EndSelect
     
     EndSelect
(Auszug aus der PB-Hilfe)

Wenn du für andere Bereiche oder allgemein für einen Mausklick ein Event haben willst, musst du das entweder mit ExamineMouse und den zugehörigen Mousebutton(1/2) machen oder mit der oben geposteten WinAPI Konstanten als Event. GIbt sicher auch noch andere Möglichkeiten, aber das ist jetzt mal das was mir so auf die Schnelle einfällt.

Verfasst: 11.12.2005 03:26
von PB42
Hallo Ynnus,

Meilenstein, würd ich sagen, erstmal Danke! An Flipbuffers() hatte ich nicht gedacht und der API-Befehl funktioniert, aber.... da ist trotzdem noch ein Haken, denn mal angenommen, ich lasse testhalber doch den API-Befehl weg, dann kommt ja ganz rechts die weiße Taste auch dann schon, wenn ich mit der Maus über die erste weiße Taste von links gehe, OHNE die Maus geklickt zu haben. Warum aber verschwindet dann die weiße Taste ganz rechts nicht sofort wieder, wenn ich mit dem Mauszeiger die erste weiße Taste wieder verlasse? Nochmals der Code:

Code: Alles auswählen

InitSprite()
InitMouse()
OpenWindow(0,0,0,800,600,#PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget,"")
OpenWindowedScreen(WindowID(0), 0, 0, 700, 200, 0, 0, 0)

Repeat
eventID = WaitWindowEvent()
EventType()     

    StartDrawing(ScreenOutput())
    FrontColor(255,255,255)   
    Box(0,0,50,200)
    Box(51,0,50,200)
    Box(102,0,50,200)
    Box(153,0,50,200)
    Box(204,0,50,200)
    Box(255,0,50,200)
    Box(306,0,50,200)
    Box(357,0,50,200)
    
    FrontColor(0,0,0)
    Box(32,0,36,130)
    Box(83,0,35,130)
    Box(134,0,35,130)
    
    Box(235,0,35,130)
    Box(286,0,35,130)  
  StopDrawing()
  FlipBuffers()  
  
  If WindowMouseX() > 0 And WindowMouseX() < 50 And WindowMouseY() > 0 And WindowMouseY() < 200
  StartDrawing(ScreenOutput())
  FrontColor(255,255,255)
  Box(408,0,50,200)
  StopDrawing()
  EndIf
    

Until eventID = #PB_EventCloseWindow
PB42