Maus über Gadget ?
Maus über Gadget ?
Hi,
hab gleich noch ne Frage.
Wie kann ich rauskriegen über welchem Gadget die der Mauszeiger gerade
befindet, ohne erst eine Taste zu drücken ?
Thatsanee
			
			
									
									hab gleich noch ne Frage.
Wie kann ich rauskriegen über welchem Gadget die der Mauszeiger gerade
befindet, ohne erst eine Taste zu drücken ?
Thatsanee
Mrs. Thatsanee
PB 4 - PB 3.94
						PB 4 - PB 3.94
- 
				Rokur
 - Beiträge: 167
 - Registriert: 29.12.2005 09:58
 - Computerausstattung: Intel Core2 Quad (4x2,4 GHz), 4096 MB RAM, GForce 8800GTX 786 MB
Windows XP 32 Bit, PureBasic 4.40 (x86) 
Frage in der Hauptschleife bei jedem Durchlauf die Koordinaten der Maus ab (WindowMouseX() und WindowMouseY()) und prüfe ob diese innerhalb der Gadget-Koordinaten liegen (MausX >= GadgetX und MausX <= GadgetX+GadgetBreite und MausY >= GadgetY und MausY <= GadgetY+GadgetHöhe).
			
			
									
									WinXP 32 Bit, PureBasic 4.40 (x86)
						- 
				Rokur
 - Beiträge: 167
 - Registriert: 29.12.2005 09:58
 - Computerausstattung: Intel Core2 Quad (4x2,4 GHz), 4096 MB RAM, GForce 8800GTX 786 MB
Windows XP 32 Bit, PureBasic 4.40 (x86) 
Hab da mal was gebastelt:
			
			
									
									Code: Alles auswählen
EnableExplicit
Enumeration 0 Step 1 ;Gadgets, zur Verdeutlichung explizit nummeriert
  #Start ;kein Gadget, dient nur als Startwert der Aufzählung
  #btnOk
  #btnCancel
  #txtInfo
  #strGadget
  #chk1
  #chk2
  #opt1
  #opt2
  #cal
  #Ende ;kein Gadget, dient nur als Endwert der Aufzählung
EndEnumeration
OpenWindow(0,0,0,400,400,"Gadget unter der Maus",#PB_Window_ScreenCentered|#PB_Window_MinimizeGadget)
ButtonGadget(#btnOk, 5, 370, 80, 20, "OK")
ButtonGadget(#btnCancel, 90, 370, 80, 20, "Abbrechen")
TextGadget(#txtInfo, 5, 5, 130, 20, "Gadget unter der Maus: ")
StringGadget(#strGadget, 140, 5, 255, 20, "", #PB_String_ReadOnly)
CheckBoxGadget(#chk1, 210, 30, 80, 20, "Test 1")
CheckBoxGadget(#chk2, 210, 50, 80, 20, "Test 2")
OptionGadget(#opt1, 5, 220, 80, 20, "Option 1") : SetGadgetState(#opt1,1)
OptionGadget(#opt2, 5, 240, 80, 20, "Option 2")
CalendarGadget(#cal, 5, 30, 200, 180, Date())
Procedure ShowGadget()
  Protected i, x, y, gefunden, text.s
  gefunden = #False
  x = WindowMouseX(0)
  y = WindowMouseY(0)
  text = ""
  ;alle Gadgets durchlaufen
  For i = #Start+1 To #Ende-1
    ;prüfen ob sich die Maus über dem Gadget befindet
    If x >= GadgetX(i) And x <= GadgetX(i)+GadgetWidth(i) And y >= GadgetY(i) And y <= GadgetY(i)+GadgetHeight(i)
      text + Str(i)
      Select i
        Case #btnOk
          text + " = OK-Knopf"
        Case #btnCancel
          text + " = Abbrechen-Knopf"
        Case #cal
          text + " = Der Kalender"
        Case #chk1, #chk2
          text + " = eine der Checkboxen"
        Default
          text + " = Namenloses Gadget"
      EndSelect
      gefunden = #True
    EndIf
    SetGadgetText(#strGadget,text)
  Next i
EndProcedure
Repeat
  Define event.l = WaitWindowEvent()
  While event ;restliche Events in der Queue verarbeiten, bevor ShowGadget() aufgerufen wird
    Select event
      Case #PB_Event_CloseWindow
        End
    EndSelect
    event = WindowEvent()
  Wend
  
  ShowGadget()
ForEver
WinXP 32 Bit, PureBasic 4.40 (x86)
						- 
				Kaeru Gaman
 - Beiträge: 17389
 - Registriert: 10.11.2004 03:22
 
- HeX0R
 - Beiträge: 3055
 - Registriert: 10.09.2004 09:59
 - Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3 - Kontaktdaten:
 
Code: Alles auswählen
EnableExplicit
Enumeration
	#btnOk
	#btnCancel
	#txtInfo
	#strGadget
	#chk1
	#chk2
	#opt1
	#opt2
	#cal
	#Ende ;kein Gadget, dient nur als Endwert der Aufzählung
EndEnumeration
OpenWindow(0, 0, 0, 400, 400, "Gadget unter der Maus", #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget)
CreateStatusBar(0, WindowID(0))
ButtonGadget(#btnOk, 5, 350, 80, 20, "OK")
ButtonGadget(#btnCancel, 90, 350, 80, 20, "Abbrechen")
TextGadget(#txtInfo, 5, 5, 130, 20, "Gadget unter der Maus: ")
StringGadget(#strGadget, 140, 5, 255, 20, "", #PB_String_ReadOnly)
CheckBoxGadget(#chk1, 210, 30, 80, 20, "Test 1")
CheckBoxGadget(#chk2, 210, 50, 80, 20, "Test 2")
OptionGadget(#opt1, 5, 220, 80, 20, "Option 1") : SetGadgetState(#opt1, 1)
OptionGadget(#opt2, 5, 240, 80, 20, "Option 2")
CalendarGadget(#cal, 5, 30, 200, 180, Date())
Procedure main()
	Protected Gadget, CursorPos.POINT
	Repeat
		Select WaitWindowEvent()
			Case #PB_Event_CloseWindow
				Break
			Case #WM_MOUSEMOVE
				GetCursorPos_(@CursorPos)
				Gadget = #Null
				If MapWindowPoints_(0, WindowID(0), @CursorPos, 1)
					Gadget = ChildWindowFromPoint_(WindowID(0), PeekQ(@CursorPos))
					If Gadget = WindowID(0)
						Gadget = 0
					EndIf
					If Gadget
						StatusBarText(0, 0, "Gadget# " + Str(GetDlgCtrlID_(Gadget)))
					EndIf
				EndIf
				If Not Gadget
					StatusBarText(0, 0, "")
				EndIf
		EndSelect
	ForEver
EndProcedure
main()
{Home}.:|:.{Codes}.:|:.{Downloads}.:|:.{History Viewer Online}.:|:.{Bier spendieren}
						- 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
 
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.

						Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Hi,
ich mache sowas immer mit einer CallBack.
Gruß Donald
			
			
									
									ich mache sowas immer mit einer CallBack.
Code: Alles auswählen
Procedure WindowCallBack(hwnd, msg, wParam, lParam)
  ReturnValue = #PB_ProcessPureBasicEvents
  Select wParam
    Case GadgetID(1)
      ; Deine Anweisung
    Case GadgetID(2)
      ; Deine Anweisung
      ;
      ; usw.
      ;
    Default
      Debug wParam  ; Zeigt alle GadgetIDs an.
  EndSelect
ProcedureReturn ReturnValue
EndProcedure
; Aktivieren mit 
SetWindowCallback(@WindowCallBack())
Gruß Donald
DONALD 
  www.PureBasic-Donald.de gibt es im Moment nicht mehr
PureBasic - jaPBe - PureVisonXP - TailBite
						PureBasic - jaPBe - PureVisonXP - TailBite
Ist schon etwas länger her
FF 
			
			
									
									Code: Alles auswählen
Structure udtPoint
  StructureUnion
    pos.Point
    value.q
  EndStructureUnion
EndStructure
  
  *hWin.long = OpenWindow(#PB_Any,#PB_Ignore,#PB_Ignore,640,480,"",#WS_SYSMENU|#WS_SIZEBOX)
 
  CreateGadgetList(*hWin\l)
  ButtonGadget(0,10,10,100,100,"Blub1")
  ButtonGadget(1,10,110,100,100,"Blub2")
 
  CreateStatusBar(0,*hWin\l)
  AddStatusBarField(90)
 
  Repeat
    uMsg = WaitWindowEvent() 
   
    If #WM_MOUSEMOVE = uMsg
     
      x = DesktopMouseX()
      y = DesktopMouseY()
     
      Select WindowFromPoint_(y<<32 | x)
        Case GadgetID(0)
          StatusBarText(0, 0, "Blub1")
        Case GadgetID(1)
          StatusBarText(0, 0, "Blub2")
        Default
          StatusBarText(0, 0, Str(x) + ":" + Str(y))
      EndSelect
     
    EndIf
   
  Until uMsg = #WM_CLOSE
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
						Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive