Sanduhr nur auf Fenster sichtbar, nicht auf Buttons usw.

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Shardik
Beiträge: 746
Registriert: 25.01.2005 12:19

Beitrag von Shardik »

Delle hat geschrieben:Problem: Die Sanduhr ist zwar sichtbar auf dem Fenster, allerdings NICHT wenn man über Buttons, Webgadgets oder Container fährt.
Beispiel für das Ein- und Ausblenden des Sanduhr-Cursors über einem ButtonGadget:

Code: Alles auswählen

If OpenWindow(0, 0, 0, 240, 110, "Änderung des Cursors", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  If CreateGadgetList(WindowID(0))
    ButtonGadget(0, 10, 10, 115, 90, "Sanduhr-Cursor über diesem ButtonGadget einschalten", #PB_Button_MultiLine)

    HourGlassCursor = LoadCursor_(0, #IDC_WAIT) 
    SetClassLong_(WindowID(0),#GCL_HCURSOR, HourGlassCursor)

    Repeat
      WindowEvent = WaitWindowEvent()

      Select WindowEvent
        Case #PB_Event_Gadget
          If EventGadget() = 0
            If ChangeCursorAboveGadget
              ChangeCursorAboveGadget = #False
              SetGadgetText(0, "Sanduhr-Cursor über diesem ButtonGadget einschalten")
            Else
              ChangeCursorAboveGadget = #True
              SetGadgetText(0, "Sanduhr-Cursor über diesem ButtonGadget ausschalten")
            EndIf
          EndIf
      EndSelect

      If ChangeCursorAboveGadget
        GetCursorPos_(CursorPos.POINT) 
        MapWindowPoints_(0, WindowID(0), @CursorPos, 1) 

        If ChildWindowFromPoint_(WindowID(0), CursorPos\x, CursorPos\y) = GadgetID(0)
          SetCursor_(HourGlassCursor)
        EndIf
      EndIf
    Until WindowEvent = #PB_Event_CloseWindow

    DestroyCursor_(HourGlassCursor) 
  EndIf
EndIf
Benutzeravatar
Frabbing
Beiträge: 160
Registriert: 15.02.2007 21:31
Kontaktdaten:

Re: Sanduhr nur auf Fenster sichtbar, nicht auf Buttons usw.

Beitrag von Frabbing »

Sanduhr (modernere Windows benutzen den rotierenden Ring) setzen geht mit etwas API für Windows so:

Code: Alles auswählen

SetCursor_(LoadCursor_(0, #IDC_WAIT))
Zurücksetzen auf normalen Pfeil mit:

Code: Alles auswählen

SetCursor_(LoadCursor_(0, #IDC_ARROW))
:D
Gruß, Frank
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: Sanduhr nur auf Fenster sichtbar, nicht auf Buttons usw.

Beitrag von ts-soft »

@Frank
Seit wann gehörst Du zu den Grabschändern :lol:
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
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Sanduhr nur auf Fenster sichtbar, nicht auf Buttons usw.

Beitrag von Kiffi »

ts-soft hat geschrieben:@Frank
Seit wann gehörst Du zu den Grabschändern :lol:
mir ist's recht, weil ich aktuell sowas gut gebrauchen
kann und mir jetzt die Recherche erspare. :D

Danke @Frank!

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
Frabbing
Beiträge: 160
Registriert: 15.02.2007 21:31
Kontaktdaten:

Re: Sanduhr nur auf Fenster sichtbar, nicht auf Buttons usw.

Beitrag von Frabbing »

Kiffi hat geschrieben:mir ist's recht, weil ich aktuell sowas gut gebrauchen
kann und mir jetzt die Recherche erspare. :D

Danke @Frank!

Grüße ... Kiffi
Genau, ich hatte nämlich auch danach gesucht.
@Thomas: Deine mögliche Lösung war eben nicht zufriedenstellend... :mrgreen:
Gruß, Frank
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: Sanduhr nur auf Fenster sichtbar, nicht auf Buttons usw.

Beitrag von ts-soft »

Wenns denn so funktionieren würde :mrgreen:
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
Benutzeravatar
rolaf
Beiträge: 3843
Registriert: 10.03.2005 14:01

Re: Sanduhr nur auf Fenster sichtbar, nicht auf Buttons usw.

Beitrag von rolaf »

ts-soft hat geschrieben:Wenns denn so funktionieren würde :mrgreen:
geht doch, bei dir nicht thomas "barbapapa"? :wink:
:::: WIN 10 :: PB 5.73 :: (x64) ::::
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Sanduhr nur auf Fenster sichtbar, nicht auf Buttons usw.

Beitrag von Kiffi »

ts-soft hat geschrieben:Wenns denn so funktionieren würde :mrgreen:
funktioniert bei mir einwandfrei.

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
Frabbing
Beiträge: 160
Registriert: 15.02.2007 21:31
Kontaktdaten:

Re: Sanduhr nur auf Fenster sichtbar, nicht auf Buttons usw.

Beitrag von Frabbing »

Funktioniert bei mir bestens. SetCursor ist ein globaler Schalter für den Mauszeiger. Sollte in jedem Fenster/Control funktionieren, dessen Class keinen eigenen Cursor einsetzt:
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.
In der Warten-Zeit das Hauptfenster kurzfristig disablen, verhindert jegliche Umschaltung.

Offtopic: Barbarpapa trifft es ziemlich genau... :mrgreen:
Gruß, Frank
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: Sanduhr nur auf Fenster sichtbar, nicht auf Buttons usw.

Beitrag von ts-soft »

hab sogar den Classcursor auf 0 gesetzt, sehe trotzdem nur meinen Standard-Cursor.
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
Antworten