Klick auf ContainerGadget?

Anfängerfragen zum Programmieren mit PureBasic.
es_91
Beiträge: 410
Registriert: 25.01.2011 04:48

Klick auf ContainerGadget?

Beitrag von es_91 »

Hi.

Kann ich abfragen, ob ein Klick auf ein ContainerGadget ausgeführt wurde?
Benutzeravatar
Sicro
Beiträge: 964
Registriert: 11.08.2005 19:08
Kontaktdaten:

Re: Klick auf ContainerGadget?

Beitrag 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
Bild
Warum OpenSource eine Lizenz haben sollte :: PB-CodeArchiv-Rebirth :: Pleasant-Dark (Syntax-Farbschema) :: RegEx-Engine (kompiliert RegExes zu NFA/DFA)
Manjaro Xfce x64 (Hauptsystem) :: Windows 10 Home (VirtualBox) :: Neueste PureBasic-Version
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Klick auf ContainerGadget?

Beitrag 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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
es_91
Beiträge: 410
Registriert: 25.01.2011 04:48

Re: Klick auf ContainerGadget?

Beitrag von es_91 »

Wow, wunderbar, vielen Dank! :bounce:
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Klick auf ContainerGadget?

Beitrag von NicTheQuick »

Ich würde sogar statt einem <= nur ein < nehmen. Das >= wiederum stimmt aber so.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Klick auf ContainerGadget?

Beitrag 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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
es_91
Beiträge: 410
Registriert: 25.01.2011 04:48

Re: Klick auf ContainerGadget?

Beitrag 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?
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Klick auf ContainerGadget?

Beitrag 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_()
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
es_91
Beiträge: 410
Registriert: 25.01.2011 04:48

Re: Klick auf ContainerGadget?

Beitrag von es_91 »

Jo, hast Recht, aber danke! :)
Antworten