Seite 1 von 2

Geflimmer!

Verfasst: 04.11.2005 12:22
von PB42
Hallo,

die Ergebnisanzeige des folgenden (stark gekürzten) Codes flimmert, solange die Maus über dem Fenster ist, und nur dann! Wie kommt das? Danke.

PB42

Code: Alles auswählen

OpenWindow(0,0,0,606,300,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"") And CreateGadgetList(WindowID(0)) 

TextGadget(13,50,118,506,30,"",#PB_text_border|#PB_TEXT_center)

If LoadFont(0,"arial",12)
EndIf
SetGadgetFont(#PB_Default,FontID())
ButtonGadget(14,446,41,110,22,"Berechnen")

Repeat
  Delay(5)
  eventID = WindowEvent()
  GadgetID = EventGadgetID()
  Select GadgetID

  Case 14
  If f.f = 0
  f.f = 0.2
  EndIf
  g.f = (a + b + c) * d.f
  h.f = g.f * f.f
  If LoadFont(1,"arial",12)
  EndIf
  SetGadgetFont(#PB_Default,FontID())
  TextGadget(13,50,118,506,30,"Ergebnis",#PB_text_border|#PB_TEXT_center)

  EndSelect

Until WaitWindowEvent()=#PB_Event_CloseWindow 

Verfasst: 04.11.2005 12:40
von PB42
Das Geflimmer hat aufgehört! Ich habe in dem Code unter "Repeat" das "WindowEvent" durch "WaitWindowEvent" ersetzt und den Delay entfernt. Das war's.

PB42

Verfasst: 04.11.2005 13:01
von AND51
Probiers nochmal mit dem code vorher, allerdings mit dem Unterschied, dass du das Delay() nicht am Anfang der Repeatschleife setzt, sondern dahinter. Dann sollte es auch gehen. Die Verzögerung muss mind. 1 ms betragen.

Verfasst: 04.11.2005 13:12
von DarkDragon
OMG:

Code: Alles auswählen

  eventID = WindowEvent()
...
Until WaitWindowEvent()=#PB_Event_CloseWindow
Wasn das für ne Logik? ;)

Code: Alles auswählen

  eventID = WindowEvent()
...
Until eventID=#PB_Event_CloseWindow

Verfasst: 04.11.2005 13:12
von PB42
@AND51 Bringt keinen Unterschied, aber macht ja nichts, das Problem ist ja nun gelöst.

PB42

Verfasst: 04.11.2005 13:19
von PB42
Hallo DarkDragon,

oh Danke, das war ein Schreibfehler von mir, aber das hat keinen Einfluß auf den Flimmer-Effekt.

PB42

Verfasst: 04.11.2005 13:31
von AND51
DarkDragon hat geschrieben:OMG:

Code: Alles auswählen

  eventID = WindowEvent()
...
Until WaitWindowEvent()=#PB_Event_CloseWindow
Wasn das für ne Logik? ;)[/code]
Oh, das hatte ich übersehen, hatte den Code nur überflogen...

Verfasst: 04.11.2005 14:14
von Pelagio
@PB42

Ein Problem, welches das Flimmern in erster Linie (meiner Meinung nach) hervorruft ist, das du innerhalb deiner Repeatschleife, bei jedem Durchlauf den Font() und auch das TextGadget-Steuerelement neu setzt, erstellst.

Verfasst: 04.11.2005 15:17
von freedimension
Das Problem ist auch, dass die gesamte Ereignisbehandlung unvollständig ist. Wo wird hier die eventID überprüft, wo der Typ? So schlägt jedes Ereignis, egal welches, immer gleich voll durch, egal ob es mit dem Gadget zu tun hat oder nicht.

Verfasst: 04.11.2005 15:19
von Kiffi
Pelagio hat geschrieben:Ein Problem, welches das Flimmern in erster Linie (meiner
Meinung nach) hervorruft ist, das du innerhalb deiner Repeatschleife, bei
jedem Durchlauf den Font() und auch das TextGadget-Steuerelement neu
setzt, erstellst.
jau, folgende Zeilen sollten vor der Repeat-Schleife stehen

Code: Alles auswählen

If LoadFont(1,"arial",12)
EndIf
SetGadgetFont(#PB_Default,FontID())
TextGadget(13,50,118,506,30,"Ergebnis",#PB_text_border|#PB_TEXT_center) 
Grüße ... Kiffi