Flackerndes Text-Gadget

Anfängerfragen zum Programmieren mit PureBasic.
Andi
Beiträge: 79
Registriert: 27.05.2008 17:29
Wohnort: Berlin

Re: Flackerndes Text-Gadget

Beitrag von Andi »

Klasse - kein Flackern mehr! :allright: Vielen Dank!
PB + B4X = greatest tools on earth
Win 10 | PB 5.72
Benutzeravatar
silbersurfer
Beiträge: 175
Registriert: 06.07.2014 12:21

Re: Flackerndes Text-Gadget

Beitrag von silbersurfer »

Freut mich das es klappt... :D
Intel Quad Core 3,2 Ghz - GTX 1060 - BlitzBasic Plus 1.48 , PureBasic 5.70 LTS / Aktuelles Projekt PureCommander
Benutzeravatar
hjbremer
Beiträge: 822
Registriert: 27.02.2006 22:30
Computerausstattung: von gestern
Wohnort: Neumünster

Re: Flackerndes Text-Gadget

Beitrag 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  
Purebasic 5.70 x86 5.72 X 64 - Windows 10

Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
Benutzeravatar
silbersurfer
Beiträge: 175
Registriert: 06.07.2014 12:21

Re: Flackerndes Text-Gadget

Beitrag 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 :)
Intel Quad Core 3,2 Ghz - GTX 1060 - BlitzBasic Plus 1.48 , PureBasic 5.70 LTS / Aktuelles Projekt PureCommander
Andi
Beiträge: 79
Registriert: 27.05.2008 17:29
Wohnort: Berlin

Re: Flackerndes Text-Gadget

Beitrag von Andi »

:allright:
PB + B4X = greatest tools on earth
Win 10 | PB 5.72
Benutzeravatar
Helle
Beiträge: 566
Registriert: 11.11.2004 16:13
Wohnort: Magdeburg

Re: Flackerndes Text-Gadget

Beitrag 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.
Benutzeravatar
hjbremer
Beiträge: 822
Registriert: 27.02.2006 22:30
Computerausstattung: von gestern
Wohnort: Neumünster

Re: Flackerndes Text-Gadget

Beitrag 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
Purebasic 5.70 x86 5.72 X 64 - Windows 10

Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Re: Flackerndes Text-Gadget

Beitrag 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...?
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
silbersurfer
Beiträge: 175
Registriert: 06.07.2014 12:21

Re: Flackerndes Text-Gadget

Beitrag 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
Intel Quad Core 3,2 Ghz - GTX 1060 - BlitzBasic Plus 1.48 , PureBasic 5.70 LTS / Aktuelles Projekt PureCommander
Antworten