Seite 1 von 1

Klick auf ContainerGadget?

Verfasst: 01.10.2014 09:41
von es_91
Hi.

Kann ich abfragen, ob ein Klick auf ein ContainerGadget ausgeführt wurde?

Re: Klick auf ContainerGadget?

Verfasst: 01.10.2014 19:30
von Sicro

Code: Alles auswählen

Define Event, WindowHandle
Define MousePos.POINT

If OpenWindow(0, 500, 500, 800, 800, "")
  ContainerGadget(0, 10, 10, 500, 500, #PB_Container_Single)
  
  Repeat
    Event = WaitWindowEvent()
    
    If Event = #WM_LBUTTONUP
      GetCursorPos_(@MousePos)
      WindowHandle = WindowFromPoint_(PeekQ(@MousePos))
      If GadgetID(0) = WindowHandle
        Debug "ContainerGadget wurde angeklickt!"
      EndIf
    EndIf
  Until Event = #PB_Event_CloseWindow
EndIf

Re: Klick auf ContainerGadget?

Verfasst: 01.10.2014 19:45
von ts-soft
Und jetzt noch Crossplattform:

Code: Alles auswählen

EnableExplicit

Procedure MouseOverGadget(window, gadget)
  If (WindowMouseX(window) >= GadgetX(gadget)) And (WindowMouseX(window) <= (GadgetX(gadget) + GadgetWidth(gadget)))
    If (WindowMouseY(window) >= GadgetY(gadget)) And (WindowMouseY(window) <= (GadgetY(gadget) + GadgetHeight(gadget)))
      ProcedureReturn #True
    EndIf
  EndIf
EndProcedure

OpenWindow(0, #PB_Ignore, #PB_Ignore, 640, 480, "")
ContainerGadget(0, 50, 50, 200, 200, #PB_Container_Raised)

Repeat
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow
      Break
      
    Case #PB_Event_LeftClick
      If MouseOverGadget(0, 0)
        Debug "Container"
      EndIf
  EndSelect
ForEver

Re: Klick auf ContainerGadget?

Verfasst: 01.10.2014 19:51
von es_91
Wow, wunderbar, vielen Dank! :bounce:

Re: Klick auf ContainerGadget?

Verfasst: 01.10.2014 21:05
von NicTheQuick
Ich würde sogar statt einem <= nur ein < nehmen. Das >= wiederum stimmt aber so.

Re: Klick auf ContainerGadget?

Verfasst: 01.10.2014 21:32
von ts-soft
Nur weil Du es bist :twisted:

Code: Alles auswählen

EnableExplicit

Procedure MouseOverGadget(window, gadget)
  If (WindowMouseX(window) >= GadgetX(gadget)) And (WindowMouseX(window) < (GadgetX(gadget) + GadgetWidth(gadget)))
    If (WindowMouseY(window) >= GadgetY(gadget)) And (WindowMouseY(window) < (GadgetY(gadget) + GadgetHeight(gadget)))
      ProcedureReturn #True
    EndIf
  EndIf
EndProcedure

Procedure Event_LeftClick()
  If MouseOverGadget(0, 0)
    Debug "Container"
  EndIf  
EndProcedure

OpenWindow(0, #PB_Ignore, #PB_Ignore, 640, 480, "")

ContainerGadget(0, 50, 50, 200, 200, #PB_Container_Raised)
BindEvent(#PB_Event_LeftClick, @Event_LeftClick())

Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow

Re: Klick auf ContainerGadget?

Verfasst: 09.10.2014 18:21
von es_91
Nur die Lösung hat ein Problem. Was, wenn der Container versteckt ist? Dann sollte man ihn auch nicht klicken können...

Dafür noch ne Lösung?

Re: Klick auf ContainerGadget?

Verfasst: 09.10.2014 18:26
von ts-soft
Wer versteckt den Container?
Der sollte auch ein Flag setzen und auswerten können, oder?

Gruß
Thomas

PS: Zur not geht es auch mit API: IsWindowVisible_()

Re: Klick auf ContainerGadget?

Verfasst: 11.10.2014 20:15
von es_91
Jo, hast Recht, aber danke! :)