Mousepointer über einem Windowes Screen auswechseln

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Kurzer
Beiträge: 1617
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Mousepointer über einem Windowes Screen auswechseln

Beitrag von Kurzer »

Huhu...

wie kann ich in PB die Grafik des Mousepointer ändern.

Ich möchte, das der Pointer sich ändert, sobald die Mouse über den
WindowedScreen Bereich meines Programmfensters geschoben wird.

Irgendwie habe ich da nix zu gefunden. :(

Gruß Markus
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.12 x64, OS: Win 11 24H2 x64, Desktopscaling: 150%, CPU: I7 12700 H, RAM: 32 GB, GPU: Intel(R) Iris(R) Xe Graphics | NVIDIA GeForce RTX 3070
Useralter in 2025: 57 Jahre.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

hab ich letztens erst gemacht, sitz aber im moment nich zuhause, also, ich probier mal, das so zusammenzustoppeln, ohne code...

du kannst mit WindowMouseX() und..Y() die mauskoordinaten über dem screen abfragen.
wenn die maus den screen verlässt, ist die rückgabe -1.

ShowCursor kannst du benutzen, um den originalen mauszeiger zu verstecken.
weiß jetzt nicht genau, war glaubich ne API, findest du aber auch über die forensuche...

also, wenn die maus im screen ist, orginal-zeiger verstecken und sprite anzeigen.

eigentlich recht easy... ;)
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Kurzer
Beiträge: 1617
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Beitrag von Kurzer »

Cool, dem geht! :allright: ;)

Code: Alles auswählen

Procedure ShowMouse()
  Protected X.l, Y.l
  Static Cursor.l = #True
  
  X = WindowMouseX(#MainWindow)
  Y = WindowMouseY(#MainWindow)

  If (X = -1 Or Y = -1) And Cursor = #False ; Wenn die Maus ausserhalb des Fenster ist...
    Cursor = #True : ShowCursor_(Cursor)
  Else
    If (X > ScreenWidth Or Y > ScreenHeight) And Cursor = #False
      Cursor = #True : ShowCursor_(Cursor)
    ElseIf ((X >= 0 And X < ScreenWidth) And (Y >= 0 And Y < ScreenHeight)) And Cursor = #True
      Cursor = #False : ShowCursor_(Cursor)
    EndIf
    If X > -1 And Y > -1 And X <= ScreenWidth Or Y <= ScreenHeight
      DisplayTransparentSprite(#MousePointer, X - 32, Y - 14)
    EndIf
  EndIf

EndProcedure
Und... meine erste API Funktion, die ich benutze. :lol:

Gruß Markus

PS: Was ich noch nicht wusste. Windows hat einen Counter für den ShowCursor! Wenn man also 2 mal den Cursor versteckt, muss man den auch 2 mal wieder Anzeigen lassen, bevor er auch wirklich wieder sichtbar ist!!!
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.12 x64, OS: Win 11 24H2 x64, Desktopscaling: 150%, CPU: I7 12700 H, RAM: 32 GB, GPU: Intel(R) Iris(R) Xe Graphics | NVIDIA GeForce RTX 3070
Useralter in 2025: 57 Jahre.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

cool :D

ich seh grad, du frags ab, ob X > ScreenWidth..

das kannste dir sparen, weil das nie passiert.

ich frag nur ab X<0 Or Y<0, wenn das true ist, ist die maus außerhalb, egal an welcher seite.

[edit]
ich überleg grad... X<0 müsste reichen... außerhalb ist außerhalb.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Kurzer
Beiträge: 1617
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Beitrag von Kurzer »

Kaeru Gaman hat geschrieben:ich seh grad, du frags ab, ob X > ScreenWidth..
das kannste dir sparen, weil das nie passiert.
Doch, weil das Fenster ist breiter als der darin befindliche WindowedScreen.
Und wenn die maus aus dem WScreen rauskommt, aber noch immer im Fenster ist, soll der normale Mauszeiger wieder zu sehen sein.

Gruß Markus
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.12 x64, OS: Win 11 24H2 x64, Desktopscaling: 150%, CPU: I7 12700 H, RAM: 32 GB, GPU: Intel(R) Iris(R) Xe Graphics | NVIDIA GeForce RTX 3070
Useralter in 2025: 57 Jahre.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

stimmt.. ok..

ich hatte es für nen WindowedScreen gemacht, der den gesamten fensterbereich eingenommen hat....


> Was ich noch nicht wusste. Windows hat einen Counter für den ShowCursor! Wenn man also 2 mal den Cursor versteckt, muss man den auch 2 mal wieder Anzeigen lassen, bevor er auch wirklich wieder sichtbar ist!!!

ist eigentlich logisch, weil die API ja von allen programmen benutzt werden kann.

wenn jetzt ein programm den cursor versteckt, und dann kommt ein zweites und versteckt ihn auch, soll er ja erst wieder sichtbar werden, wenn beide programme ihn wieder freigeben...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten