Delphi-PRAXiS
Seite 2 von 3     12 3      

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 1. Feb 2010 10:47

Re: Double Buffered Bug
 
Hi, keiner eine Idee mehr ?

Ich habe selber nochmal etwas probiert.

Folgende Möglichkeiten:

Double Buffered = false -> Programm läuft auf allen Systemen, Anzeige flackert
Double Buffered = true -> Programm läuft auf allen Systemen, allerdings Anzeigefehler bei Checkboxen, Buttons, usw. im Zusammenhang mit Xp Style
Double Buffered = true + Themefix aus dem Anhang im 1.Post, läuft ohne Anzeigefehler mit Xp Style, schließt sich auf manchen Systemen sofort nach dem starten automatisch.

Irgendwie sind das alles keine optimalen Optionen.

Was für Lösungen gibt es nun ? Lässt sich evtl. das Double Buffered nur für die Paintbox nutzen ? Ggf. auf die Graphic32 Kompos zurückgreifen die ja um einiges schneller sein solle und das Double Buffered selber übernimmt ? Fehler im Themefix beheben damit es auf allen System läuft ?

Mfg Blamaster

Alaitoc 1. Feb 2010 12:00

Re: Double Buffered Bug
 
Das mit dem schwarzen Rahmen liegt an ParentBackground, diese Eigenschaft muss
soweit ich mich erinnere beim Button oder wo auch immer auf False gesetzt werden.

MfG Alaitoc

PS: Wurde soweit ich weiß auch schon öfters im Forum unter dem Suchbegriff "DoubleBuffered" besprochen.

Blamaster 1. Feb 2010 13:15

Re: Double Buffered Bug
 
Hi,

ich hatte hier im forum schon gesucht.

Allerdings will nichts so wirklich klappen. Die Paintbox ansich hat keine DoubleBuffered eigenschaft, so das ich nicht nur diese auf DoubleBuffered = true setzen kann.

Die Buttons z.b. haben keine ParenBackground eigenschaft die man auf false setzen könnte.

Die Paintbox auf ein Panel zu legen und das Panel auf DoubleBuffered = true zu setzen, brachte auch keinen Erfolg außer das die Paintbox flackert.

Mfg Yannic

Medium 1. Feb 2010 13:23

Re: Double Buffered Bug
 
Zitat:

Zitat von Blamaster
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.

Das fette ist dein Problem. Erledige das nicht in der Paintbox, sondern gleich mit auf dem internen Bitmap, und mach als einzige Zeichenoperation auf die PaintBox das StretchDraw(). Dann solltest du getrost DoubleBuffered vergessen können.

Alaitoc 1. Feb 2010 13:32

Re: Double Buffered Bug
 
Also ich glaube ParentBackground musste auf False gesetzt werden bei den Panels oder Forms wo die Buttons drauf liegen.
Zumindest habe ich keinerlei Probleme damit in meinem aktuellen Projekt.

MfG Alaitoc

Bsp: Hauptformular mit Panel, auf Panel liegt ein Button und Parentbackground vom Panel ist auf False. Gibt keinerlei Probleme wenn ich dann DoubleBuffered anwende.

Blamaster 1. Feb 2010 13:47

Re: Double Buffered Bug
 
@ Alitoc

Danke so hat es jetzt geklappt.

@ Medium

Das Problem ist nur das es das Programm so nicht hergibt ohne sich die Kompletten Daten für den Hintergrund der bmp komplett neu berechnen zu lassen. Außerdem dürfen die nachträglichen Elemente auch nicht mit gestrecht werden.

Das würde so mehr Probleme produzieren als das es welche löst.

Mfg Yannic

Teekeks 1. Feb 2010 14:30

Re: Double Buffered Bug
 
Du verstehst Medium falsch: er meint du sollst alles was du auf deiner Paintbox jetzt rumdüdelst, sollst du auf einem nicht angezeigten Bitmap machen und dieses danach einfach nur auf die Paintbox ausgeben...

Medium 1. Feb 2010 14:34

Re: Double Buffered Bug
 
Sekunde.
Zitat:

Zitat von Blamaster
1. Timer löst Onpaint Ereignis der Paintbox auf, diese holt sich die Hintergrund Bmp und lädt sie[...]

Wo macht es den Unterschied, ob dieses Hintergrundbitmap nun auf den PaintBox Canvas, oder ein zweites Bitmap in der Größe der PaintBox ge-stretch-drawed wird? Wieso muss bei Variante 2 was neu berechnet werde, bei 1 aber nicht? :gruebel:

Edit: Roter Kasten is Montags auch noch nich so fit, hm? Ich glaub der Teekeks hat recht, auch wenn ich grad nicht verstehe wie du mich verstanden hast :)

Edit2: Das mit dem komplett erst "offline" (also unsichtbar) Zeichnen, und in einem Schwupps ausgeben ist übrigens auch die gängige Praxis. DoubleBuffered ist eine Krücke um dies auf einem Umweg zu erreichen. Besser gleich selber sauber bauen, spart mittelfristig einen Haufen Nerven (und Zeit).

Blamaster 1. Feb 2010 18:25

Re: Double Buffered Bug
 
Hi,

dann versuch ich mich nochmal besser auszudrücken.

1. Hintergrund wird einmal in eine Bitmap gezeichnet und dann der Paintbox übergeben.

Nun sollen noch verschiedene Time Lines gezeichnet werden die sich alle 20ms über den timer ändern. Der Hintergrund soll dabei aber dennoch konstant bleiben.

Nun mein Problem. Wenn ich die Timeline direkt auf das Hintergrund Bitmap zeichne, dann würde sich ja nach jedem Timerintervall die Timeline einfach ein stück weiter rechts zeichnen die vorige Timeline allerdings nicht gelöscht werden. So ergibt sich unter der Annahme die Timeline ist blau dann ein langer blauer balken.

Nun ist die Frage was passiert wenn ich das Hintergrund Bitmap an die Paintbox übergebe und dann eine zweite Bitmap drüber lege und nur diese zweite Bitmap jedes mal geleert und die neue Timeline eingezeichnet wird.

Teekeks 1. Feb 2010 18:34

Re: Double Buffered Bug
 
Dann:
Grundbild wie bisher als Bitmap haben und dann noch ein weiteres wo du folgendes machst:
1. Hintergrund drauf kopieren
2. Deine Linien draufzeichnen
3. Das ganze der Paintbox übergeben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:16 Uhr.
Seite 2 von 3     12 3      

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