Sanduhr nur auf Fenster sichtbar, nicht auf Buttons usw.

Anfängerfragen zum Programmieren mit PureBasic.
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 »

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.
Gruß, Frank
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

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

Beitrag 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
Bild
Win11 Pro 64-Bit, PB_6.11b1
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

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

Beitrag 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:
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

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

Beitrag 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
Bild
Win11 Pro 64-Bit, PB_6.11b1
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

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

Beitrag 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. <)
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

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

Beitrag 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
Bild
Win11 Pro 64-Bit, PB_6.11b1
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 »

Wieso simpler? Was spricht gegen meine Einzeilen-Lösung? :mrgreen:
Gruß, Frank
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

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

Beitrag 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:
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

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

Beitrag 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
Bild
Win11 Pro 64-Bit, PB_6.11b1
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 »

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.
Gruß, Frank
Antworten