Nochmals Thema Mauseinbindung (Titel geändert)

Anfängerfragen zum Programmieren mit PureBasic.
PB42
Beiträge: 243
Registriert: 13.10.2005 03:21

Nochmals Thema Mauseinbindung (Titel geändert)

Beitrag 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
Zuletzt geändert von PB42 am 11.12.2005 16:51, insgesamt 1-mal geändert.
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

Beitrag 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
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
Benutzeravatar
Ynnus
Beiträge: 855
Registriert: 29.08.2004 01:37
Kontaktdaten:

Beitrag 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.
Zuletzt geändert von Ynnus am 11.12.2005 03:07, insgesamt 1-mal geändert.
Benutzeravatar
spacewalker
Beiträge: 48
Registriert: 15.07.2005 15:22
Wohnort: Stuttgart

Beitrag 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)
Ich liebe Asche und Rauch meiner Zigaretten.
PB42
Beiträge: 243
Registriert: 13.10.2005 03:21

Beitrag 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
PB42
Beiträge: 243
Registriert: 13.10.2005 03:21

Beitrag 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
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

Beitrag 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:
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
Benutzeravatar
spacewalker
Beiträge: 48
Registriert: 15.07.2005 15:22
Wohnort: Stuttgart

Beitrag 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.
Ich liebe Asche und Rauch meiner Zigaretten.
Benutzeravatar
Ynnus
Beiträge: 855
Registriert: 29.08.2004 01:37
Kontaktdaten:

Beitrag 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.
PB42
Beiträge: 243
Registriert: 13.10.2005 03:21

Beitrag 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
Antworten