Sanduhr nur auf Fenster sichtbar, nicht auf Buttons usw.

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

Bei mir gibt ja auch Pfeil mit Sahne äh Sanduhr bzw. Ring:
Bild

Aber das heißt ja nur, wenn eine Hintergrundaktivität stattfindet.
Wenn ein Delay oder irgendein Vorgang nicht im Hintergrund durchgeführt wird, dann wird ja das komplette Fenster bzw. Programm angehalten und es heißt somit für Windows, dass das Fenster zurzeit nicht reagiert, weil kein Event im Fenster stattfindet, weil du ja das Fenster mit Delay (kann auch ein Vorgang sein) stoppst. Und daher auch die automatische Cursor-Änderung auf #IDC_WAIT. Aber das hat überhaupt nichts mit der API-Zeile zu tun.
Ich hab mal den Code jetzt ausnahmsweise unter Windows XP getestet. Vielleicht liegt es daran, aber das gleiche Ergebnis wie hier unter Windows 7.
Ich frag mich echt, wieso bei dir die Cursor-Änderung nicht automatisch stattfindet, wenn dein Fenster für 5 Sekunden nicht reagiert. Bei mir war es schon immer so, dass wenn ein Fenster gestoppt wird, dass es nicht für Windows reagiert und dass der Mauscursor sich automatisch ändert. Warum das bei dir so ist, keine Ahnung. :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
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

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

Beitrag von Bisonte »

um es demonstrativ auf die Spitze zu treiben, einfach das WindowEvent nicht mehr abfragen...
und schon kommt der waitcursor...

Code: Alles auswählen

OpenWindow(0, #PB_Ignore, #PB_Ignore, 640, 480, "minicode",0)
Repeat : Forever
Ist ein völlig normales Windowsverhalten. Sollte das bei dir nicht so sein, ist irgendwas bösartiges an deiner
Installation nicht in Ordnung. (Wobei ich davon noch nichts gehört habe)
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Benutzeravatar
rolaf
Beiträge: 3843
Registriert: 10.03.2005 14:01

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

Beitrag von rolaf »

Ich glaub wir drehen uns im Kreis. Bei meinem "Code" gibts ja kein Fenster. Aber jetzt gut. Sanduhr Mit oder Ohne kostet dasselbe wie Pommes rot/weiss. :mrgreen:
Huch, hab auf einmal Hunger... :lurk:

Bösigkeiten gibts nicht auf meinen PiCi. :allright:
:::: WIN 10 :: PB 5.73 :: (x64) ::::
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 »

Der Mauszeiger hält natürlich immer nur bis zum nächsten Abholen der Messages vom System. Dort restauriert ihn das System wieder auf den Ursprungszustand.
Aber für Warteoperationen, für die meine Codezeile ja gedacht war, funktioniert er generell, wie dieser Code beweist:

Code: Alles auswählen

OpenWindow(0, #PB_Ignore, #PB_Ignore, 640, 480, "minicode")
ButtonGadget(1, 8, 8, 120, 20, "Warten...")

Repeat 
  event = WaitWindowEvent()
  If Event = #PB_Event_Gadget
    
    Select EventGadget()
      Case 1
        SetCursor_(LoadCursor_(0, #IDC_WAIT))
        For a = 1 To 10000000
        Next
        
    EndSelect
    
  ElseIf event = #PB_Event_CloseWindow
    Break
  EndIf
  
Until 1 = 0
Und um das an Thomas Code zu demonstrieren:

Code: Alles auswählen

OpenWindow(0, #PB_Ignore, #PB_Ignore, 640, 480, "minicode")
SetCursor_(LoadCursor_(0, #IDC_WAIT))
For a = 1 To 10000000
Next
Also, die Cursorschaltung funkt immer bis zum nächsten WaitWindowEvent()... :mrgreen:
Gruß, Frank
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 »

Frabbing hat geschrieben:Aber für Warteoperationen, für die meine Codezeile ja gedacht war, funktioniert er generell
jap. Ich habe in einem meiner Tools einen langlaufenden Prozess (2 bis 5 Sekunden).
In dieser Zeit durchlaufe ich nicht die Event-Schleife. Habe bisher noch keine Lust gehabt,
diesen Prozess in einen Thread auszulagern. Daher passt Deine Lösung hier sehr gut.

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

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

Beitrag von edel »

Kiffi hat geschrieben:
Frabbing hat geschrieben:Aber für Warteoperationen, für die meine Codezeile ja gedacht war, funktioniert er generell
jap. Ich habe in einem meiner Tools einen langlaufenden Prozess (2 bis 5 Sekunden).
In dieser Zeit durchlaufe ich nicht die Event-Schleife. Habe bisher noch keine Lust gehabt,
diesen Prozess in einen Thread auszulagern. Daher passt Deine Lösung hier sehr gut.

Grüße ... Kiffi
Laut Petzold kann man das auch durchaus so machen, er raet aber auch bei längeren Wartezeiten zu einem extra Thread.
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 »

Ich bin auch der Meinung, ich finds nicht so schön, wenn die Anwendung bei einem Vorgang nicht mehr reagiert, weil nach einer bestimmten Zeit die Anwendung automatisch "ausgeblendet" wird. D.h. dass der Inhalt des Fensters nicht mehr neu gezeichnet werden kann und man sieht nur ein weißer Hintergrund. (Ist nur der Fall, wenn der Vorgang länger als 3-5 Sekunden dauert.)
Wenn der Vorgang aber nur 1-2 Sekunden dauert, dann ist es für mich noch in Ordnung. :wink: Aber wenns in der Regel länger dauert, würde ich solche Sachen auch immer in einem Thread auslagern.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

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

Beitrag von Bisonte »

Laut Petzold kann man das auch durchaus so machen, er raet aber auch bei längeren Wartezeiten zu einem extra Thread.
Wenn ich als Nutzer eines Programms sehe, dass das Programm nen "weißen Überzug" (Win7) bekommt,
dann schiess ich das ab, weil die Vermutung eines Absturzes naheliegt. Und ich denke, was ich mache,
machen andere auch, nur viel schneller ;)

Also schliess ich mich dem Statement an.
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

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

Beitrag von bobobo »

Statt weißem Überzug

http://www.purebasic.fr/german/viewtopi ... 13#p291013

(zumindest ein wenig besser)
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Benutzeravatar
thminz
Beiträge: 84
Registriert: 25.05.2011 16:01
Computerausstattung: Windows XP, Intel Pentium 4 mit 3,2 Ghz, 2 GB RAM, 500 GB, ATI Radeon HD 4200
Wohnort: Köln

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

Beitrag von thminz »

Der User edel hat Recht. Wenn ich so was könnte würde ich so was auch eher so machen statt das Program unnötig zu belasten. :) :allright: Ich mag das auch nicht wenn das Programm nicht mehr ansprechbar ist wenn es zu lange dauert mit dem arbeiten. <)
Immer Aktuelle Purebasic Version!!
Antworten