Seite 1 von 1

Mouseevents im ImageGadget...

Verfasst: 25.07.2006 14:32
von Ghosty1967
Hallo Leutz...

Problem: Ich habe ein ImageGadget mit einer Grafik. Ist die Maus über diesem Gadget und die linke Maustaste wird gedrückt, soll die Grafik des ImageGadgets geändert werden. Lasse ich die Maus wieder los oder verlasse das ImageGadget mit der Maus, soll die ursprüngliche Grafik wieder dargestellt werden.

Kennt jemand eine Lösung dazu und kann mir enentuell nen Schnipsel dazu schreiben... wäre sehr dankbar !

Thx... Ghosty

Verfasst: 27.07.2006 15:31
von Falko
Ich habe jetzt zwar keine professionelle Lösung, aber so könnte man
es auch erreichen. Der Nachteil. Beim Klick auf dem rechten Mousebutton
wird das zweite Bild angezeigt und wird erst wieder beim Linksklick
auf das erste Bild umgestellt. Sonst wird beim Linksklick das Bilder
abwechselnd gezeigt.

Die bessere Lösung wäre wohl mit einem CallbackWindow, indem mann
dort alle Windows-Messages für die Buttons auswertet.

PB4-Code:

Code: Alles auswählen

If OpenWindow(0, 0, 0, 245, 105, "ImageGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
    If LoadImage(0, "up.bmp")  And LoadImage(1,"Down.bmp")  
      ImageGadget(0,  10, 10, 100, 83, ImageID(1))           
    EndIf
    
    Repeat
    Event=WaitWindowEvent() 
    
    Select Event 
      Case 13100;  
        ImageGadget(0,  10, 10, 100, 83, ImageID(0))
      Case #WM_LBUTTONUP 
        ImageGadget(0,  10, 10, 100, 83, ImageID(1))
    EndSelect
    
    Until event = #PB_Event_CloseWindow
EndIf
Grüße Falko

Verfasst: 31.07.2006 07:27
von Ghosty1967
Na, das ist doch schonmal was, mit dem ich weiter arbeiten kann. An ein
Callback habe ich auch schon einmal gedacht, aber bisher habe ich noch
keine konkrete Idee zur Umsetzung...

Nochmals danke für die Antwort.

Verfasst: 31.07.2006 10:04
von edel
Schau dir mal folgende Befehle und Flags an :

WINAPI -> MSDN :

#WM_MOUSEMOVE
#WM_LBUTTONDOWN
#WM_LBUTTONUP

SetCapture
ReleaseCapture
SetWindowLong (mit #gwl_wndproc)
CallWindowProc
PtInRect (hat in pb 3 parameter [handle,x,y])

@Falko
Es gibt SetGadgetState.

Verfasst: 31.07.2006 10:27
von Kiffi
eine weitere (wie ich finde sehr schöne) Möglichkeit, ist die, die
EasyVENT-Routinen von srod zu verwenden:

Code: Alles auswählen

Enumeration
  #myWindow
  #myImageGadget
EndEnumeration

Declare myImageGadget_OnMouseDown(*sender.PB_Sender)
Declare myImageGadget_OnMouseUp  (*sender.PB_Sender)

OpenWindow(#myWindow, #PB_Ignore, #PB_Ignore, 200, 200, "ImageGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)

CreateGadgetList(WindowID(#myWindow))

LoadImage(0, "d:\up.bmp")
LoadImage(1, "d:\down.bmp") 

ImageGadget(#myImageGadget,  5, 5, 190, 190, ImageID(1))           

SetEventHandler(GadgetID(#myImageGadget), #OnMouseDown, @myImageGadget_OnMouseDown())
SetEventHandler(GadgetID(#myImageGadget), #OnMouseUp,   @myImageGadget_OnMouseUp())

Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow

End

Procedure myImageGadget_OnMouseDown(*sender.PB_Sender)
  SetGadgetState(#myImageGadget, ImageID(0))
  ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure

Procedure myImageGadget_OnMouseUp(*sender.PB_Sender)
  SetGadgetState(#myImageGadget, ImageID(1))
  ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
Grüße ... Kiffi

Verfasst: 31.07.2006 13:39
von Kaeru Gaman
EasyVENT hört sich interessant an, scheint aber ne LIB zu sein.

ist die OpenSource? habs mir noch nicht gezogen...

Verfasst: 31.07.2006 13:46
von Kiffi
Kaeru Gaman hat geschrieben:EasyVENT hört sich interessant an, scheint aber ne LIB zu sein.
nope, ist keine Lib, is'n Include und auf jeden Fall sehr empfehlenswert.

Grüße ... Kiffi

Verfasst: 31.07.2006 13:48
von Kaeru Gaman
> is'n Include

wundaprächtig. dann werd ichs mir mal saugen. danke für den hinweis. :allright: