Cursor nur überm Fenster ??

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Then
Beiträge: 284
Registriert: 06.09.2004 13:26
Wohnort: Siegen

Cursor nur überm Fenster ??

Beitrag 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 
  
PB 6.10LTs / Windows 11 64Bit (i9/32GB/ 1TB-SSD+4TB-HDD/3060GTX12GB) / 2x27" Multitouch

... ich mache dazu keine Aussage, weil ich mich damit selbst belasten könnte !
Axolotl
Beiträge: 278
Registriert: 31.12.2008 16:34

Re: Cursor nur überm Fenster ??

Beitrag 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 


Using PureBasic latest stable version and current alpha/beta (x64) on Windows 11 Home
Benutzeravatar
Then
Beiträge: 284
Registriert: 06.09.2004 13:26
Wohnort: Siegen

Re: Cursor nur überm Fenster ??

Beitrag 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 ?
PB 6.10LTs / Windows 11 64Bit (i9/32GB/ 1TB-SSD+4TB-HDD/3060GTX12GB) / 2x27" Multitouch

... ich mache dazu keine Aussage, weil ich mich damit selbst belasten könnte !
Axolotl
Beiträge: 278
Registriert: 31.12.2008 16:34

Re: Cursor nur überm Fenster ??

Beitrag 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.
Using PureBasic latest stable version and current alpha/beta (x64) on Windows 11 Home
Benutzeravatar
Then
Beiträge: 284
Registriert: 06.09.2004 13:26
Wohnort: Siegen

Re: Cursor nur überm Fenster ??

Beitrag von Then »

Habe es auch nicht als Kritik aufgefasst. 👍

ich bin gleich daheim und teste das mal, mal sehen, was ich schaffe, danke !
PB 6.10LTs / Windows 11 64Bit (i9/32GB/ 1TB-SSD+4TB-HDD/3060GTX12GB) / 2x27" Multitouch

... ich mache dazu keine Aussage, weil ich mich damit selbst belasten könnte !
Axolotl
Beiträge: 278
Registriert: 31.12.2008 16:34

Re: Cursor nur überm Fenster ??

Beitrag 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. 
Using PureBasic latest stable version and current alpha/beta (x64) on Windows 11 Home
Antworten