Seite 2 von 2

Re: Flackerndes Text-Gadget

Verfasst: 05.08.2014 13:25
von Andi
Klasse - kein Flackern mehr! :allright: Vielen Dank!

Re: Flackerndes Text-Gadget

Verfasst: 05.08.2014 13:35
von silbersurfer
Freut mich das es klappt... :D

Re: Flackerndes Text-Gadget

Verfasst: 05.08.2014 13:46
von hjbremer
Das Flackern kommt durch das neuzeichnen zustande und war schon immer so. Bei einigen Rechnern sieht man es auf anderen nicht. Hängt wohl mit der Graka zusammen.

2 weitere Lösungen

mit Api

Code: Alles auswählen

Declare TimerCallBack(hWnd,Msg,wParam,lParam)
Font12b.l = LoadFont(#PB_Any, "Arial", 12, #PB_Font_Bold)

#window = 0
#text = 0

OpenWindow(#window, 0, 0, 200, 100, "es flackert", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
TextGadget(#text, 30, 40, 140, 30, "", #SS_CENTERIMAGE|#SS_CENTER|#SS_SUNKEN) ;<-- der Rahmen muß sein
SetGadgetFont(#text, FontID(Font12b))


SetTimer_(WindowID(#window), 77, 500, @TimerCallBack()) ;Wiederholzeit=500 ms; Identifier=77


Repeat
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow
      End
  EndSelect   
ForEver


Procedure TimerCallBack(hWnd,Msg,wParam,lParam)
   
   Static i
   
   i = i + 1
   
   Select Msg             
      Case #WM_TIMER
         If wparam = 77
            SendMessage_(GadgetID(#text), #WM_SETREDRAW, #False, 0) 
            SetGadgetText(#text, Str(i) + ". Durchlauf")                        
            SendMessage_(GadgetID(#text), #WM_SETREDRAW, #True, 0) 
            InvalidateRect_(GadgetID(#text), 0, #False)
         EndIf
   EndSelect

   ProcedureReturn #PB_ProcessPureBasicEvents
      
EndProcedure  
oder mit CanvasGadget

Code: Alles auswählen

Declare TimerCallBack(hWnd,Msg,wParam,lParam)

Global Font12b = LoadFont(#PB_Any, "Arial", 12, #PB_Font_Bold)

#window = 0
#text = 0

OpenWindow(#window, 0, 0, 200, 100, "es flackert", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
CanvasGadget(#text, 30, 40, 140, 30, #PB_Canvas_Border)

SetTimer_(WindowID(#window), 77, 500, @TimerCallBack()) ;Wiederholzeit=500 ms; Identifier=77


Repeat
   Select WaitWindowEvent()
      Case #PB_Event_CloseWindow
         End
   EndSelect   
ForEver


Procedure TimerCallBack(hWnd,Msg,wParam,lParam)
   
   Static i
   
   i = i + 1
   
   Select Msg             
      Case #WM_TIMER
         If wparam = 77
            
            
            If StartDrawing(CanvasOutput(#text))
               Box(0,0,140,30, #Yellow)  ; and a green box
               
               DrawingFont(FontID(Font12b))                
               DrawingMode(#PB_2DDrawing_Transparent)
               
               FrontColor(#Black) 
               DrawText(10,5,Str(i) + ". Durchlauf")
                              
               StopDrawing()
            EndIf
                       
            
         EndIf
   EndSelect
   
   ProcedureReturn #PB_ProcessPureBasicEvents
   
EndProcedure  

Re: Flackerndes Text-Gadget

Verfasst: 05.08.2014 14:01
von silbersurfer
deine Api lösung hjbremer ist noch ein tick besser als meine, da du ja nur das Gadget Manual Refresht
und nicht das ganze Fenster, cool kommt bei mir mit in meine Samlung :)

Re: Flackerndes Text-Gadget

Verfasst: 05.08.2014 14:11
von Andi
:allright:

Re: Flackerndes Text-Gadget

Verfasst: 05.08.2014 16:54
von Helle
Aus Jux noch die Dummy-Lösung :mrgreen: :

Code: Alles auswählen

Declare TimerCallBack()
Font12b.i = LoadFont(#PB_Any, "Arial", 12, #PB_Font_Bold)

#window = 0
#text = 0
#text1 = 1
#Dummy = 2

OpenWindow(#window, 0, 0, 200, 100, "es flackert nicht", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)

TextGadget(#text, 10, 40, 180, 20, "")
SetGadgetFont(#text, FontID(Font12b))
TextGadget(#text1, 10, 60, 180, 20, "")
SetGadgetFont(#text1, FontID(Font12b))

TextGadget(#Dummy, 0, 0, 1, 1, "")

AddWindowTimer(#window, 77, 500)

BindEvent(#PB_Event_Timer, @TimerCallBack(), #window, 77)


Repeat
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow
      End
  EndSelect   
ForEver


Procedure TimerCallBack()
   
   Static i
   
   i = i + 1

   SetGadgetText(#Dummy, "") 

   SetGadgetText(#text, Str(i) + ". Durchlauf")
   SetGadgetText(#text1, Str(i+1) + ". Durchlauf + 1")
EndProcedure  
Habe ich so gemacht in der Vor-Canvas-Zeit.

Re: Flackerndes Text-Gadget

Verfasst: 05.08.2014 18:13
von hjbremer
Helle hat geschrieben: Habe ich so gemacht in der Vor-Canvas-Zeit.
Cool
hört sich an wie; Anno Domini Nostri Jesu Christi 1845

Re: Flackerndes Text-Gadget

Verfasst: 05.08.2014 20:15
von Danilo
Helle hat geschrieben:Habe ich so gemacht in der Vor-Canvas-Zeit.
Was ist da jetzt der Trick? Du setzt ein Gadget an 0,0 mit der Größe 1,1 und setzt dann immer wieder diesen GadgetText auf "",
mit dem Resultat das die anderen Gadgets nicht flackern?
Macht irgendwie keinen Sinn für mich, habe ich noch nie gesehen, aber auch das flackern (das ich nicht habe)
macht von der WinAPI-Programmierung her m.M.n. keinen Sinn. Da muss doch irgend etwas bei PB intern nicht stimmen...?

Re: Flackerndes Text-Gadget

Verfasst: 05.08.2014 22:21
von silbersurfer
Danilo schrieb
Was ist da jetzt der Trick? Du setzt ein Gadget an 0,0 mit der Größe 1,1 und setzt dann immer wieder diesen GadgetText auf "",
mit dem Resultat das die anderen Gadgets nicht flackern?
Macht irgendwie keinen Sinn für mich
Ich habe das gefühl wenn er es so macht wird das Fenster Refresht, aber da er durch den null String nichts ändert Flackert das fenster nicht
danach kommen die anderen Strings die von dem Refresh wahrscheinlich nicht mehr betroffen sind.. denn es Flackert nicht mehr
Ist jetzt nur so ein Bauch gefühl aber anders kann ich mir das auch nicht erklären