Seite 1 von 1

Cursor nur überm Fenster ??

Verfasst: 02.09.2025 12:21
von Then
Hi ich habe einen eigenen Cursor gemalt :lol: und den will ich einblenden in meinem Programm. Auf dem nackten Fenster geht es, aber über nem ListIconGadget wird es wieder ein Pfeil. Auf Buttons auch, nur deaktivierte Buttons lassen meinen Zeiger zu. Muss da noch was hin, damit der Cursor dauerhaft umgestellt bleibt ??

Code: Alles auswählen

OpenWindow(0,0,0,200,200,"",#PB_Window_BorderLess)
 SetClassLong_(WindowID(0), #GCL_HCURSOR, LoadCursorFromFile_("Hand.cur")) 
 ListIconGadget(1,5,5,150,100,"",100,#PB_ListIcon_AlwaysShowSelection|#PB_ListIcon_FullRowSelect|#PB_ListIcon_GridLines)
   AddGadgetColumn(1,1,"",20)
  ButtonGadget(2,5,110,80,30,"ENDE")
  ButtonGadget(3,90,110,80,30,"ENDE")
  DisableGadget(3,1)
  
 Repeat
  Delay(1)
  Event = WindowEvent()
  If Event=#PB_Event_Gadget
   Select EventGadget() 
    Case 2
     End
   EndSelect
 EndIf
ForEver 
  

Re: Cursor nur überm Fenster ??

Verfasst: 02.09.2025 14:38
von Axolotl
Hi, du änderst den Mauszeiger für die Klasse Window. Soll der Zeiger auch für andere Klassen geändert werden, dann must du das auch aufrufen.
Evtl. so.
BTW: Ich habe noch ein paar (wichtige) Änderungen gemacht. Sollteste Dir mal anschauen, auch wenn es nur ein Testbeispiel ist.

Code: Alles auswählen

EnableExplicit 
Define hCursor 

OpenWindow(0,0,0,200,200,"",#PB_Window_BorderLess)

  hCursor = LoadCursor_(0, #IDC_HAND)     : Debug "  hCursor == " + hCursor 
  
; SetClassLong_(WindowID(0), #GCL_HCURSOR, LoadCursorFromFile_("Hand.cur")) 
 ListIconGadget(1,5,5,150,100,"",100,#PB_ListIcon_AlwaysShowSelection|#PB_ListIcon_FullRowSelect|#PB_ListIcon_GridLines)
   AddGadgetColumn(1,1,"",20)
  ButtonGadget(2,5,110,80,30,"ENDE")
  ButtonGadget(3,90,110,80,30,"ENDE")
  DisableGadget(3,1)

  If hCursor 
    SetClassLongPtr_(WindowID(0), #GCL_HCURSOR, hCursor)  ; Window Class 
    SetClassLongPtr_(GadgetID(1), #GCL_HCURSOR, hCursor)  ; ListIcon Gadget Class 

  EndIf 
  
 Repeat
;   Delay(1)
;   Event = WindowEvent()
  Select WaitWindowEvent() 
    Case #PB_Event_CloseWindow ; I know borderless window, but this is always a good idea.... 
      Break 
    Case #PB_Event_Gadget
     Select EventGadget() 
      Case 2
       Break 
     EndSelect
  EndSelect
ForEver 



Re: Cursor nur überm Fenster ??

Verfasst: 03.09.2025 11:12
von Then
Hi, danke für die Anmerkungen. Es handelt sich bei mir eben nur um einen Ausschnitt aus meinem Code. Borderless und Delay(1) hat bei mir schon einen Sinn gehabt 😊 aber egal, dennoch immer gut, wenn man auf Kleinigkeiten hingewiesen wird.

Muss ich nun die Hand (soll meine eigene werden) bei jedem Gadget "angemeldet" werden ? Gibts da nix Globales ?

Re: Cursor nur überm Fenster ??

Verfasst: 03.09.2025 11:35
von Axolotl
Mein Verständnis: Nicht bei jedem Gadget, sondern bei jeder "Gadget-Klasse".
Aber Versuch macht klug.
Wahrscheinlich geht es auch mit Subclass u.s.w. Das ist dann aber auch nicht "einfacher".
P.S.: Natürlich wollte ich nichts kritisieren.... es sind (immer) nur gut gemeinte Hinweise.

Re: Cursor nur überm Fenster ??

Verfasst: 03.09.2025 12:55
von Then
Habe es auch nicht als Kritik aufgefasst. 👍

ich bin gleich daheim und teste das mal, mal sehen, was ich schaffe, danke !

Re: Cursor nur überm Fenster ??

Verfasst: 03.09.2025 14:54
von Axolotl
Es geht wohl auch so, allerdings musst du dann trotzdem den "Klassen-Mauszeiger" (in Windows == Cursor) auf #NULL ändern.
Das habe ich aber nicht ausprobiert.

Code: Alles auswählen

hPrevCursor = SetCursor_(hCursor) ; hCursor == NULL the cursor is removed from the screen. 
; ... 
SetCursor_(hPrevCursor)   ; set cursor back to original 

; Remark: 
;  If your application must set the cursor while it is in a window, make sure the class cursor for the 
;  specified window's class is set to NULL. If the class cursor is not NULL, the system restores the 
;  class cursor each time the mouse is moved.