Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   ScrollDC verschmiert ?? (https://www.delphipraxis.net/158669-scrolldc-verschmiert.html)

Whookie 25. Feb 2011 20:30

ScrollDC verschmiert ??
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo zusammen!

Ich schreibe gerade an einer Componente (ein TCustomControl Nachfolger) mit der ich einen gepufferten Endlos-Scroller (momentan nur von links nach rechts) realisieren möchte. Das ganze funktioniert auch grundsätzlich. Ich verwende eine Cache-Bitmap (ClientRect-Größe) die ich mit ScrollDC scrolle, dort füge ich dann ein (oder mehrere) neue Spalten ein.

Danach scrolle ich den Canvas des Controls und kopiere dann die neuen Daten von der Cache-Bitmap auf den Canvas des Controls.

Die ganze Bitmap gebe ich im WM_ERASEBKGND aus (hatte ich schon im Paint).

Ein Problem tritt erst auf, wenn ein anderes Fenster das Control so überdeckt, dass "hinter diesem Fenster hervorgescrollt" werden muss. Dann verschmiert das Bild (siehe Anhang) und ich habe bisher keine Möglichkeit gefunden das zu verhindern. Die Frage also, wo muss ich ansetzen, dass das scrollen auch dann funktioniert, wenn das enstpr. Fenster teilweise überdeckt wird?

Edit: Das ganze muss unter Windows XP laufen (in Windows 7 gibts den Effekt nicht)!

TIA

Whookie 26. Feb 2011 11:14

AW: ScrollDC verschmiert ??
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe jetzt auch noch ein kleines Testprojekt zusammengestellt. Zum Testen einfach das Programm compilieren und dann zum Beispiel mit dem Windows-Rechner oder einem anderen Programm das Fenster überlagern, sodass oben noch ein Teil der Kreise sichtbar bleibt und horizontal nur die linke Hälfte des Fensters überdecket ist. Mit jedem verschieben des darüberliegenden Fensters ändert sich auch das Verschmieren.

Vielleicht hat ja jemand eine Idee wie man das korrekt hinkriegt?

PS.: Wie im Sourcecoude angemerkt kommen die einzelnen Zeilen im eigentlichen Anwendungsfall nicht von einer Bitmap, sondern werden von einem anderen Programm übergeben.

EWeiss 26. Feb 2011 11:24

AW: ScrollDC verschmiert ??
 
Also bei mir verwischt nichts..
Alternativ kannst du aber noch in FormCreate

Delphi-Quellcode:
DoubleBuffered := True;

setzen

gruss

Whookie 26. Feb 2011 11:27

AW: ScrollDC verschmiert ??
 
DoubleBuffered hatte ich schon ohne Erfolg versucht. Ich muss vieleicht noch hinzufügen, dass das Problem nur in Windows XP (und da muss es auch laufen) auftritt, unter Windows 7 verschmiert auch bei mir nichts!

EWeiss 26. Feb 2011 11:29

AW: ScrollDC verschmiert ??
 
Zitat:

Zitat von Whookie (Beitrag 1084507)
DoubleBuffered hatte ich schon ohne Erfolg versucht. Ich muss vieleicht noch hinzufügen, dass das Problem nur in Windows XP auftritt, unter Windows 7 verschmiert auch bei mir nichts!

Jo sorry hab leider kein XP jetzt zur Hand..

gruss

Whookie 26. Feb 2011 16:23

AW: ScrollDC verschmiert ??
 
Liste der Anhänge anzeigen (Anzahl: 1)
So, nach ettlichen Versuchen habe ich nun eine Version, die zu funktionieren scheint. Vielleicht kann da auch mal jemand drüber schaun (Scroll_B) ob das der effizienteste Weg ist sowas zu implementieren?


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:04 Uhr.

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 by Thomas Breitkreuz