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
-
- 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)
-
- 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)
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
- HeX0R
- Beiträge: 3040
- 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