AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Double Buffered Bug

Ein Thema von Blamaster · begonnen am 24. Jan 2010 · letzter Beitrag vom 1. Feb 2010
Antwort Antwort
Seite 2 von 3     12 3      
Blamaster

Registriert seit: 20. Jul 2007
230 Beiträge
 
#11

Re: Double Buffered Bug

  Alt 1. Feb 2010, 10:47
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
  Mit Zitat antworten Zitat
Alaitoc

Registriert seit: 24. Okt 2008
263 Beiträge
 
Delphi 7 Enterprise
 
#12

Re: Double Buffered Bug

  Alt 1. Feb 2010, 12:00
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.
  Mit Zitat antworten Zitat
Blamaster

Registriert seit: 20. Jul 2007
230 Beiträge
 
#13

Re: Double Buffered Bug

  Alt 1. Feb 2010, 13:15
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
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#14

Re: Double Buffered Bug

  Alt 1. Feb 2010, 13:23
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.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Alaitoc

Registriert seit: 24. Okt 2008
263 Beiträge
 
Delphi 7 Enterprise
 
#15

Re: Double Buffered Bug

  Alt 1. Feb 2010, 13:32
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.
  Mit Zitat antworten Zitat
Blamaster

Registriert seit: 20. Jul 2007
230 Beiträge
 
#16

Re: Double Buffered Bug

  Alt 1. Feb 2010, 13:47
@ 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
  Mit Zitat antworten Zitat
Teekeks

Registriert seit: 19. Okt 2008
Ort: Dresden
765 Beiträge
 
FreePascal / Lazarus
 
#17

Re: Double Buffered Bug

  Alt 1. Feb 2010, 14:30
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...
Peter
"Div by zero Error" oder auch: "Es geht auch ohne Signatur!".
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#18

Re: Double Buffered Bug

  Alt 1. Feb 2010, 14:34
Sekunde.
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?

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).
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Blamaster

Registriert seit: 20. Jul 2007
230 Beiträge
 
#19

Re: Double Buffered Bug

  Alt 1. Feb 2010, 18:25
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.
  Mit Zitat antworten Zitat
Teekeks

Registriert seit: 19. Okt 2008
Ort: Dresden
765 Beiträge
 
FreePascal / Lazarus
 
#20

Re: Double Buffered Bug

  Alt 1. Feb 2010, 18:34
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.
Peter
"Div by zero Error" oder auch: "Es geht auch ohne Signatur!".
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:37 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz