Hallo,
ich habe Repeat:Forever laufen und dazwischen halt die üblichen Gadget-Abfragen...
Bei welchen Stellen muss ich jetzt While WindowEvent():Wend verwenden damit ev. Gadget-Umschaltungen (Hide/Show) flüssig ablaufen?
Manchmal ist bei sowas noch vllt eine 0,25 Sekunden lange Verzögerung.
Deshalb die Frage nach welchen Operationen While WindowEvent():Wend Sinn macht und wo es "nichts" bringt.
Danke!
While WindowEvent():Wend
While WindowEvent():Wend
PB 6.21 | Win 11
- HeX0R
- Beiträge: 3042
- Registriert: 10.09.2004 09:59
- Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3 - Kontaktdaten:
"Sinn" macht es eigentlich nirgends.
Wenn irgendwas nicht flüssig läuft, solltest du dein Eventhandling noch mal überarbeiten.
Wenn irgendwas nicht flüssig läuft, solltest du dein Eventhandling noch mal überarbeiten.
{Home}.:|:.{Codes}.:|:.{Downloads}.:|:.{History Viewer Online}.:|:.{Bier spendieren}
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
genau.
While WindowEvent():Wend ist ein böser, böser Eventfresser,
und sollte nach möglichkeit nur angewandt werden,
wenn du ganz genau weißt was du tust und wenn es absolut nicht anders geht.
in einem normalen Eventloop hat er nichts, garnichts zu suchen, weil er dann auch Userevents frißt.
die Gadgetumschaltung sollte vom normalen WaitWindowEvent() getätigt werden.
falls du eine ständig durchlaufende Eventschleife mit WindowEvent() : Delay(Timeout) hast,
kann dadurch eine verzögerung entstehen, weil das Delay immer wartet.
In dem Falle ist ein WaitWindowEvent(Timeout) besser, weil das nur dann verzögert, wenn kein event anliegt.
außerdem ist es mit einem Timeout möglich, die Veränderungen der Gadgets nur durchzuführen,
wenn kein Event anliegt also der Rückgabewert #Null ist.
diese Verfahrensweise verhindert, dass sich Events aufstauen können
wenn mehrere Umschaltungen pro Loopdurchgang stattfinden.
While WindowEvent():Wend ist ein böser, böser Eventfresser,
und sollte nach möglichkeit nur angewandt werden,
wenn du ganz genau weißt was du tust und wenn es absolut nicht anders geht.
in einem normalen Eventloop hat er nichts, garnichts zu suchen, weil er dann auch Userevents frißt.
die Gadgetumschaltung sollte vom normalen WaitWindowEvent() getätigt werden.
falls du eine ständig durchlaufende Eventschleife mit WindowEvent() : Delay(Timeout) hast,
kann dadurch eine verzögerung entstehen, weil das Delay immer wartet.
In dem Falle ist ein WaitWindowEvent(Timeout) besser, weil das nur dann verzögert, wenn kein event anliegt.
außerdem ist es mit einem Timeout möglich, die Veränderungen der Gadgets nur durchzuführen,
wenn kein Event anliegt also der Rückgabewert #Null ist.
diese Verfahrensweise verhindert, dass sich Events aufstauen können
wenn mehrere Umschaltungen pro Loopdurchgang stattfinden.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
So habe den ganzen Code jetzt davon gesäubert.
Das Problem mit den Verzögerungen tritt eigentlich nur noch da auf:
1) Fenster ist unsichtbar, Gadgets sind bereits drauf, Fenster wird eingeblendet...
2) Container-Gadget wird unsichtbar gemacht und drunterliegendes sichtbar
Da erscheint ohne While/Wend dann eine "Lücke"...
Das Problem mit den Verzögerungen tritt eigentlich nur noch da auf:
1) Fenster ist unsichtbar, Gadgets sind bereits drauf, Fenster wird eingeblendet...
2) Container-Gadget wird unsichtbar gemacht und drunterliegendes sichtbar
Da erscheint ohne While/Wend dann eine "Lücke"...
PB 6.21 | Win 11
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
wenn 1) zum programmstart auftritt, dann kannst du VOR der Haupt-Event-Schleife vor dem Sichtbarmachen aber nach dem Gadgeterstellen einen Fresser einsetzen.
für 2) gibt es bestimmt eine bessere Lösung, es ist eher ungewöhnlich/unpraktisch, eine gruppe Gadgets durch nen Container zu verdecken.
für 2) gibt es bestimmt eine bessere Lösung, es ist eher ungewöhnlich/unpraktisch, eine gruppe Gadgets durch nen Container zu verdecken.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
Fresser?Kaeru Gaman hat geschrieben:wenn 1) zum programmstart auftritt, dann kannst du VOR der Haupt-Event-Schleife vor dem Sichtbarmachen aber nach dem Gadgeterstellen einen Fresser einsetzen.

Ungewöhnlich? Ich habe es nur aus Platzgründen so gemacht:Kaeru Gaman hat geschrieben: für 2) gibt es bestimmt eine bessere Lösung, es ist eher ungewöhnlich/unpraktisch, eine gruppe Gadgets durch nen Container zu verdecken.
Container 1: Fortschrittsanzeige usw.
Container 2: Settings + "Go"-Button (direkt über Container 1)
Nach Klick auf den "Go"-Button wird Container 2 unsichtbar gemacht... Container 1 wird dann automatisch sichtbar... nach Beendigung wird wieder Container 2 sichtbar gemacht.
Nach diesen HideGadget()-Befehlen waren halt komische Hänger drin wo zwischen den Wechsel der Container lediglich der graue Hintergrund zu sehen war.
PB 6.21 | Win 11
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
> Fresser?
na, den Eventfresser latürnich.
also, ich würde container1 unsichtbar machen, wenn 2 sichtbar ist.
Gadgets haben nativ keine z-order, es ist sozusagen purer zufall,
dass container1 wirklich verdeckt wird.
probier erstmal aus, ob das vielleicht schon das problem verringert.
wenn nicht...
also wenn du auf einen click reagierst um die gadgets zu tauschen,
kannst du direkt nach dem tausch bevor du die eventschleife wieder betrittst einen Fresser einbaun.
aber im Grunde kann es sich nur um zwei bis sechs events handeln, da ist komisch dass es verzögert.
hast du den den anderen Rat beherzigt, und dafür gesort,
dass deine schleife bei anliegenden events wirklich ohne verzögerung durchlaufen kann?
na, den Eventfresser latürnich.
also, ich würde container1 unsichtbar machen, wenn 2 sichtbar ist.
Gadgets haben nativ keine z-order, es ist sozusagen purer zufall,
dass container1 wirklich verdeckt wird.
probier erstmal aus, ob das vielleicht schon das problem verringert.
wenn nicht...
also wenn du auf einen click reagierst um die gadgets zu tauschen,
kannst du direkt nach dem tausch bevor du die eventschleife wieder betrittst einen Fresser einbaun.
aber im Grunde kann es sich nur um zwei bis sechs events handeln, da ist komisch dass es verzögert.
hast du den den anderen Rat beherzigt, und dafür gesort,
dass deine schleife bei anliegenden events wirklich ohne verzögerung durchlaufen kann?
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.