Gadget´s flackern

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Benutzeravatar
unix
Beiträge: 361
Registriert: 15.02.2005 19:25
Wohnort: Zwischen Coburg und Bamberg :-)
Kontaktdaten:

Gadget´s flackern

Beitrag von unix »

Hallo erstmal ich hab mir nen Window gemalt also nen Skinned Window erstellt mit volgenden Befehlen:

Code: Alles auswählen

  hBmp.l = ImageID(0)
  hBrush1.l = CreateSolidBrush_( RGB($D4, $D0, $C8) ) 
  hBrush2.l = CreatePatternBrush_(hBmp)            ; Erzeugung einer Brush mit der Bitmap von oben 
  SetClassLong_(hwnd, #GCL_HBRBACKGROUND, hBrush2) ; Setzen des Fensterhintergrundes auf diese Brush 
  InvalidateRect_(hwnd, #Null, #True)              ; Neuzeichnen des Fensters anregen 
  SetWindowRgn_(hwnd, hRgn1, #True)                ; "Beschneiden" des Fensters auf die neuen Maße 
  DeleteObject_( hRgn1 )                           ; Löschen aller temporären GDI-Objekte 
  DeleteObject_( hBrush1 ) 
  DeleteObject_( hBrush2 ) 
Das dürfte ja ein Begriff sein nun wenn ich das Fenster neu anzeigen lassen will flackern meine Gadgets die ich zusätzlich mit einbaue Delay haben keine Wirkung meine Hauptschleife:

Code: Alles auswählen

 Repeat    
  EventID = WindowEvent()   
  Mouse\X = WindowMouseX(0)
  Mouse\Y = WindowMouseY(0)  
  Select EventID 
   Case #WM_PAINT 
    PaintWindowBackground() ;Das malt das Window
    While WindowEvent() : Wend
  EndSelect
  If EventID Or Mouse\X = -1 Or Mouse\Y = -1 ;Das brauche ich das keine Grafik hängen bleibt
   PaintWindowBackground() 
   While WindowEvent() : Wend
  EndIf
  Delay(50)
  Sleep_(1) 
 Until EventID = #PB_Event_CloseWindow 
kann mir jemand helfen?
Gibt es evtl. noch eine andere Methode um ein Fenster zu "Skinnen" ist ein etwas komisches Design.

Danke!!
Hier steht normalerweise die Putzfrau drin,
die hat aber Urlaub.
MfG : Unix
Benutzeravatar
PureLust
Beiträge: 1145
Registriert: 21.07.2005 00:02
Computerausstattung: Hab aktuell im Grunde nur noch 'nen Lenovo Yoga 2 Pro im Einsatz.
Wohnort: am schönen Niederrhein

Beitrag von PureLust »

Versuch mal statt WindowEvent() und einem Delay(50) (unkontrollierte Delays sind nie gut in einer Event-Schleife) den Befehl WaitWindowEvent() mit einem TimeOut von 50ms.

Also:

Code: Alles auswählen

 Repeat    
  EventID = WaitWindowEvent(50)    ;<============= TimeOut von 50ms
  Mouse\X = WindowMouseX(0) 
  Mouse\Y = WindowMouseY(0)  
  Select EventID 
   Case #WM_PAINT 
    PaintWindowBackground() ;Das malt das Window 
    While WindowEvent() : Wend 
  EndSelect 
  If EventID Or Mouse\X = -1 Or Mouse\Y = -1 ;Das brauche ich das keine Grafik hängen bleibt 
   PaintWindowBackground() 
   While WindowEvent() : Wend 
  EndIf 
  ; Delay(50)     ;<============= weg damit
  ; Sleep_(1)     ;<============= weg damit
 Until EventID = #PB_Event_CloseWindow
Flackern sollten die Gadgets dann allerdings immer noch - nur kürzer.
Um das Flackern dann ganz weg zu bekommen, versuch's mal mit SmartWindowRefresh().

Gruß und viel Erfolg, PL
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
Benutzeravatar
unix
Beiträge: 361
Registriert: 15.02.2005 19:25
Wohnort: Zwischen Coburg und Bamberg :-)
Kontaktdaten:

Beitrag von unix »

Das gleiche flackert immernoch.
Vl. ein Befehlssatz für StringGadget Schreiben denn eingenlich benötige ich nur Text und StringGadget

[EDIT]

Hab ne lösung bau mir selber nen StringGadget das kann ich wenigstens auf mein Skin Optimieren
Hier steht normalerweise die Putzfrau drin,
die hat aber Urlaub.
MfG : Unix
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Gute Idee

PS: Kommata erhöhen den Lesefluß: http://de.wikipedia.org/wiki/Kommata
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Mal auf ein Image und zeigt es an. Flickerfree! Bild
Windows 10 Pro, 64-Bit / Outtakes | Derek
Antworten