Seite 5 von 5

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

Verfasst: 26.05.2011 23:13
von Frabbing
Genau, die Sanduhr ist auch nur dazu gedacht, wenige Sekunden zu überbrücken. Dauert es wissentlich länger, sollte man wirklich eine andere Lösung finden.

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

Verfasst: 26.05.2011 23:41
von Falko
Ist zwar nicht die beste Lösung, aber ich würde es z.B. so probieren, damit die IF-Anweisung auch
darauf reagieren kann.

Code: Alles auswählen

If OpenWindow(0, 0, 0, 240, 110, "Änderung des Cursors", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  
    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) <= GadgetID(0)
          SetCursor_(HourGlassCursor)
        EndIf
      EndIf
    Until WindowEvent = #PB_Event_CloseWindow

    DestroyCursor_(HourGlassCursor)
  
EndIf

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

Verfasst: 26.05.2011 23:49
von RSBasic
@Falko
Den Code hatten wir schon: http://www.purebasic.fr/german/viewtopi ... 50#p210250
Und ob "= GadgetID(0)" oder "<= GadgetID(0)" spielt keine Rolle, da wir uns auf den Code von Frabbing beziehen und nicht von Shardik. :wink:

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

Verfasst: 26.05.2011 23:58
von Falko
RSBasic hat geschrieben:...da wir uns auf den Code von Frabbing beziehen und nicht von Shardik
Welchen Code von Frabbing?

Sorry, für den netten Versuch. Jetzt sehe ich, das auf Buttons der Pausenring nicht gewünscht ist. <)

Gruß, Falko

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

Verfasst: 27.05.2011 00:04
von RSBasic
Einfach ein Beitrag weiter runter scrollen: http://www.purebasic.fr/german/viewtopi ... 02#p290902
Darum gehts die ganze Zeit. Ist ja jetzt sowieso erledigt, da wir jetzt wissen, wozu das ganze gut sein soll.
Der andere Code, den Shardik damals im Jahre 2008 vorgeschlagen hat, funktioniert ja auch vorher schon. <)

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

Verfasst: 27.05.2011 09:16
von Falko
RSBasic hat geschrieben:
ts-soft hat geschrieben:
Frabbing hat geschrieben:Poste mal einen Mini-Code dazu

Code: Alles auswählen

OpenWindow(0, #PB_Ignore, #PB_Ignore, 640, 480, "minicode")
SetCursor_(LoadCursor_(0, #IDC_WAIT))
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
Das funktioniert bei mir auch nicht.

Versuchs damit:

Code: Alles auswählen

EnableExplicit

Define EventID

If OpenWindow(0,0,0,500,400,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  
  SetClassLongPtr_(WindowID(0),#GCL_HCURSOR, LoadCursor_(0, #IDC_WAIT))
  
  Repeat
    EventID=WaitWindowEvent()
    If EventID = #PB_Event_CloseWindow
      End
    EndIf
  ForEver
EndIf

Hier noch etwas simpler, auch wenn RSBasic hier alles gelöst hat :mrgreen:

Code: Alles auswählen

OpenWindow(0, #PB_Ignore, #PB_Ignore, 640, 480, "minicode")
hcursor.l = LoadCursor_(0,#IDC_WAIT)
holdcursor.l = SetCursor_(hcursor)
Delay(2000)
retval = SetCursor_(holdcursor)
hcursor = LoadCursor_(0,#IDC_ARROW)
holdcursor = SetCursor_(hcursor)
Delay(2000)
retval = SetCursor_(holdcursor)
hcursor = LoadCursor_(0,#IDC_CROSS   )
holdcursor = SetCursor_(hcursor)
Delay(2000)
retval = SetCursor_(holdcursor)
Gruß Falko

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

Verfasst: 27.05.2011 13:24
von Frabbing
Wieso simpler? Was spricht gegen meine Einzeilen-Lösung? :mrgreen:

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

Verfasst: 27.05.2011 13:32
von RSBasic
Falko hat geschrieben:auch wenn RSBasic hier alles gelöst hat :mrgreen:
Nö, das habe ich nicht. Mein Code auf Seite 3, den du zitiert hast, benutzt ja nen anderen API-Befehl und das war ja hier nicht gefragt. :D Daher habe ich hier nichts gelöst, sondern nur meine Meinung gesagt. :mrgreen:

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

Verfasst: 27.05.2011 13:37
von Falko
Ich habe ja auch nur meine Meinung vertreten :mrgreen:
Da bei mir der alte Code von Shardik nicht lief, hatte ich den
angepasst. Denn die API ChildWindowFromPoint ist wohl in ihren Parametern
geändert worden, oder?

Der Einzeiler ist natürlich die simpelste Form. :wink:

Aber wie man sieht, viele Wege führen nach Rom. <)

Gruß, Falko

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

Verfasst: 28.05.2011 23:48
von Frabbing
Denn die API ChildWindowFromPoint ist wohl in ihren Parametern
geändert worden, oder?
Nein. Man muss nur beachten, dass der zweite Parameter kein Zeiger auf eine Struktur ist, sondern die Struktur selbst. Sind also drei Parameter.
Das ist eher untypisch.