![]() |
DoubleBuffered in API
Wie genau setzte ich TWinControl.DoubleBuffered mit API-Funktionen um? Ich probiere hier schon seit Stunden, aber Windows wehrt sich noch immer erfolgreich gegen meine Versuche.
Hat jemand einen fertigen Code dazu? |
Re: DoubleBuffered in API
Zeichne es in eine Bitmap (geht auch mit API :thumb: ) und dann die Bitmap auf den Bildschirm.
|
Re: DoubleBuffered in API
Zitat:
Du musst also nach CreateCompatibleDC, CreateCompatibleBitmap und BitBlt suchen. |
Re: DoubleBuffered in API
Wieso? Er muss nur das machen, was sonst TBitmap und TCanvas übernehmen. Dass das komplizierter ist, ist klar. Aber die gleiche Vorgehensweise und sorgar schneller. Und die Suchbegriffe hätte er wohl auch selbst herausgefunden, nachdem er die Vorgehensweise weiß. (Dazu ist die Win32.hlp praktisch, zum Suchbegriffe finden.)
PS: Außerdem ein zu häufiges Zeichnen des gleichen vermeiden. Die Erst-in-Bitmap-zeichnen-Methode hilft nämlich nicht, wenn man etwas bei jedem Maus-Über-Control-Bewegen neuzeichnet. |
Re: DoubleBuffered in API
Kuck mal hier:
![]() ein fertiger code
Delphi-Quellcode:
Und anstelle die Prozedur Zeichnen aufzurufen, einfach auf deine dctmp Zeichnen.
var
dc,dctmp:HDC; bitmap:HBITMAP; begin dc:=GetDC(windowhandle); bitmap:=CreateCompatibleBitmap(dc,windowwidth,windowheight); dctmp:=CreateCompatibleDC(dc); SelectObject(dctmp,bitmap); //-->Alles ZEICHNEN zeichnen(dctmp); //<--Alles ZEICHNEN bitblt(dc,0,0,windowwidth,windowheight,dctmp,0,0,srccopy); DeleteDC(dctmp); DeleteObject(bitmap); ReleaseDC(windowhandle,dc); end; |
Re: DoubleBuffered in API
In der Code-Lib sollte es von mir dazu auch einen Beitrag geben.
|
Re: DoubleBuffered in API
Danke für die Antworten, aber diesen Code hatte ich schon. Leider funktioniert er mit den
![]() |
Re: DoubleBuffered in API
Hi,
verwende doch den Code der VCL aus TWinControl.WMPAINT bzw. TWinControl.WMEraseBkgnd Das müsste eigentlich auch mit anderen Controls gehen, da dort nur API-Aufrufe getätigt werden. mfG mirage228 |
Re: DoubleBuffered in API
Ich lehne die Benutzung der VCL in den ClockUtils vehement ab, weil es einfach zu viel ist. Wenn jemand ein kleines Programm rausbringen will, das einfach die Uhr überschreibt, sind ihm um die 500 KB wohl zu viel aufwand...
|
Re: DoubleBuffered in API
Du sollst ja nicht die VCL selbst benutzen. Aber eventuell findest Du in der Borland Implementierung von DoubleBuffered (im Quelltext) ja ein paar Ansätze bzw. ganze API-Codestücke, die Du verwenden könntest.
mfG mirage228 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:02 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-2025 by Thomas Breitkreuz