Seite 4 von 5

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

Verfasst: 25.05.2011 16:38
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:

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

Verfasst: 25.05.2011 16:43
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)

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

Verfasst: 25.05.2011 17:33
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:

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

Verfasst: 25.05.2011 17:46
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:

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

Verfasst: 26.05.2011 08:53
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

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

Verfasst: 26.05.2011 09:19
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.

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

Verfasst: 26.05.2011 09:24
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.

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

Verfasst: 26.05.2011 12:20
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.

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

Verfasst: 26.05.2011 14:28
von bobobo
Statt weißem Überzug

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

(zumindest ein wenig besser)

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

Verfasst: 26.05.2011 17:55
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. <)