Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Double Buffered Bug (https://www.delphipraxis.net/146641-double-buffered-bug.html)

Blamaster 24. Jan 2010 10:12


Double Buffered Bug
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,

Delphi 7 hat einen Bug bei der Nutzung von Double Buffered. Beispielsweise Buttons oder Checkboxes werden dann mit schwarzer Umrandung angezeigt.

http://img694.imageshack.us/img694/8582/bugx.png

Daraufhin hatte jemand hier aus dem Board ein BugFix dafür geschrieben (leider ist mir der Nick entfallen), welches auch gut funktioniert.

Nun hat sich allerdings rausgestellt, dass sich das Programm durch das BigFix auf manchen Rechnern nicht starten lässt, sondern nur kurz aufblitzt und sich danach direkt wieder schließt.

Ein Zusammenhang zwischen den Os Versionen lässt sich nicht feststellen. Manchmal funktioniert es beispielsweise unter Windows Xp Home Service Pack 3 und manchmal unter dem gleiben Os nicht.

Gneuaso taucht der Fehler auch bein Win Vista und Win7 auf.

Das eingesetzte Bugfix habe ich mal angehängt.

Ich hoffe jemand kann mir helfen das Problem zu lösen.

Mfg Blamaster

himitsu 24. Jan 2010 10:29

Re: Double Buffered Bug
 
Hast du DoubleBuffered auf den Button angewendet oder NUR auf die Form?

Wenn die Ausgabe gepuffert wird, dann wird diese erstmal in ein internes Bitmap gezeichnet und danach erst alles zusammen ausgegeben.
Nun kennt das Bitmap des "Buttons" nicht den Hintergrund, weswegen alles "Durchsichtige" natürlich Schwarz bleibt. (leeres Bitmap = schwarz)

Blamaster 24. Jan 2010 11:14

Re: Double Buffered Bug
 
Hi,

DoubleBuffered = true ist auf das ganze Form angewendet.

Mfg Blamaster

markus5766h 24. Jan 2010 11:20

Re: Double Buffered Bug
 
Hallo :
Wenn Du die Komponenten (Buttons ...) mit DoubleBuffered := True versiehst und nicht die Form,
verschwindet auch der unschöne Randeffekt:

Delphi-Quellcode:
Form1.DoubleBuffered := False;
Button1.DoubleBuffered := True;

Blamaster 24. Jan 2010 11:42

Re: Double Buffered Bug
 
Hi,

das Problem ist eiegntlich das ich eine Paintbox habe auf die recht schnell geszeichnet wird und ohne das DoubleBuffered = true fängt die an zu flackern.

Gibt es da eine andere lösung als das ganze Form auf DoubleBuffered = true zu setzen ?

himitsu 24. Jan 2010 11:46

Re: Double Buffered Bug
 
Puffere selber:
Zeichne in ein Bitmap
und kopiere dieses Bitmap dann auf die Paintbox.

hat auch noch 'nen anderen Vorteil:
Wenn du das Bitmap auch nochmal in OnPaint der PaintBox kopierst, wird das Bild nachdem es verdeckt wurde, wiederhergestellt, ohne daß du alles nochmal dort zeichnen mußt.

Blamaster 24. Jan 2010 13:11

Re: Double Buffered Bug
 
Hi,

nichts großartig anderes mache ich aber bereits:

Delphi-Quellcode:
PB.Canvas.StretchDraw(Rect(0, 0, PB.Width, PB.Height), _WavePicture.Graphic);
Lädt das _WavePicture.Graphic Bild in die Paintbox.

In einem Timer steht noch ein PB.Refresh.

Trotzdem flackert ohne das DoubleBuffered = true das Bild.

Blamaster 24. Jan 2010 18:53

Re: Double Buffered Bug
 
Keiner mehr eine Idee ?

Mfg Blamaster

Luckie 24. Jan 2010 18:56

Re: Double Buffered Bug
 
Warum ein Timer? Du bekommst doch eine Nachricht, wenn es neu gezeichnet werden muss. Les mal hier: http://www.michael-puff.de/Artikel/W...tioniert.shtml und bitte bis ganz zu ende lesen. Und hier noch mal für lese Faule: http://www.michael-puff.de/Developer...enBitmap.shtml

Blamaster 28. Jan 2010 15:49

Re: Double Buffered Bug
 
Hi,

der Timer dazu um sich ändernde Daten auf die PaintBox zu zeichnen.

Der vorgang sieht also momentan so aus.

1. Timer löst Onpaint Ereignis der Paintbox auf, diese holt sich die Hintergrund Bmp und lädt sie, nun werden noch ein paar sachen auf die PaintBox mit dem bmp hintergrund gezeichnet.

Mit dem dobulebuffered Theme Fix geht es ja ansich auch ganz gut, nur ebend nicht auf allen Systemen. Kann man anhand der angehängten Datei erkennen wieso das programm auf manchen System sirekt nach dem start ohne Fehlermeldung wieder schließt ?


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:57 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz