Seite 1 von 1

Probleme bei EventHandling

Verfasst: 09.08.2011 11:17
von canrap
Hallo liebe PureBoard-Com,

ich verzweifel so langsam, ich bin seit neustem mit PureBasic am spielen, hab früher mit VB6 und .Net programmiert, aber nach langem lesen bin ich fest davon überzeugt nicht mehr von PureBasic abzuweichen, die Sprache gefällt mir ungemein. :)

Allerdings hab ich schon die ersten Probleme :(.. Ich wollte mal ein bisschen mit den Gadgets spielen und mir einen eigenen Button mit Hovereffekt programmieren, klappt auch soweit, nur das er einfach das Event 514 nicht berücksichtigt.

Mein Source:

Code: Alles auswählen

If y>200 And y<254 And x>100 And x<154 
      If changed2 = 0     
        changed2 = 1
        SetGadgetState(3,Image2)
        If Event = 514
          Debug "Button geklickt"
        EndIf
      EndIf
Else
      If changed2=1
        changed2=0
        SetGadgetState(3,Image1)
      EndIf
EndIf
Den Source hab ich so in etwas geänderter Weise hier aus dem Forum, allerdings wenn ich dann auf mein ImageGadget klicke akzeptiert er das Event = 514 nicht, bzw. beachtet er es nicht. Ändere ich die 514 auf 512 klappt es wunderbar sobald ich übers Gadget fahre, aber bei 514 und nem Klick streikt er, obwohl (bei Ausgabe der Events) bei jedem Klick die 514 im Debugger erscheint.

Nun meine Frage woran das liegen könnte, arbeitet PB da irgendwie anders.. oder.. ja ich hab einfach keinen blassen Schimmer mehr.

Das ich schon an sowas scheiter.. :(

Ansonsten schonmal Danke fürs Helfen und noch einen schönen Tag :P

Re: Probleme bei EventHandling

Verfasst: 09.08.2011 11:49
von kswb73
Meine Theorie ist folgende:
x und y sind deine Mausposition. In changed2 speicherst du den derzeitigen Zustand des Gadgets. 0=Maus nicht über dem Gadget, 1=über dem Gadget. Nun prüfst du wenn die Maus über dem Gadget ist ob changed2=0 ist, also ob die Maus vorher nicht über dem Gadget war. Dann setzt du gadget2=1. Durch die Abfrage willst du offenbar die Programmgeschwindigkeit erhöhen, denn nur wenn vorher die Maus nicht über dem Gadget wird, wird das Bild gewechselt.
Nun hast du aber auch die Abfrage für dein Event in der If-Abfrage. Das bedeutet Event muss 514 sein, wenn die Maus über das Gadget fährt. Da dies offensichtlich ein Mausklick ist, müsstes du im gleichen Moment klicken, wie die Maus über das Gadget fährt. Korrekt wäre also:

Code: Alles auswählen

    If y>200 And y<254 And x>100 And x<154
          If changed2 = 0  ;Diesen Teil nur einmal
            changed2 = 1
            SetGadgetState(3,Image2) 
          EndIf
          If Event = 514 ;Diesen Teil immer (wenn die Maus über dem Gadget ist)
            Debug "Button geklickt"
          EndIf
    Else
          If changed2=1
            changed2=0
            SetGadgetState(3,Image1)
          EndIf
    EndIf
Tipp: Verwende Konstanten. Das macht dein Programm lesbarer.

Re: Probleme bei EventHandling

Verfasst: 09.08.2011 11:52
von canrap
Argh >.< Vielen lieben Dank, das ich darauf nich gekommen bin..

Re: Probleme bei EventHandling

Verfasst: 09.08.2011 12:00
von Kiffi
@canrap: Könnte sein, dass das neue CanvasGadget (in Bezug auf Hover & Co) was
für Dich ist: http://www.purebasic.fr/english/viewtop ... 66#p356366

Grüße ... Kiffi

Re: Probleme bei EventHandling

Verfasst: 09.08.2011 12:03
von c4s
Wenn du das ImageGadget() deaktivierst (per DisableGadget()), kannst du alle Maus-Events abfangen. So ungefähr:

Code: Alles auswählen

Select WaitWindowEvent()
	Case #WM_MOUSEMOVE
		; Maus wird bewegt
	Case #WM_LBUTTONDOWN
		; Klick der linken Maustaste
Schau dir aber unbedingt die Beta von PureBasic 4.60 mal an, denn dort gibt es das neue CanvasGadget(), welches deinen bzw. den obigen Ansatz nochmal um einiges vereinfacht. Im englischen Forum hat beispielsweise einander einen funktionsfähigen Code für eigene Buttons mit dem CanvasGadget() gepostet: http://www.purebasic.fr/english/viewtop ... 12&t=46885

Edit: Kiffi hat bereits auf den selben Thread verlinkt. <)