AGB  ·  Datenschutz  ·  Impressum  







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

DoubleBuffered in API

Ein Thema von Dax · begonnen am 16. Okt 2004 · letzter Beitrag vom 18. Okt 2004
Antwort Antwort
Seite 1 von 2  1 2      
Dax
(Gast)

n/a Beiträge
 
#1

DoubleBuffered in API

  Alt 16. Okt 2004, 19:22
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?
  Mit Zitat antworten Zitat
Benutzerbild von FAlter
FAlter

Registriert seit: 21. Jul 2004
Ort: Ostfildern
1.096 Beiträge
 
FreePascal / Lazarus
 
#2

Re: DoubleBuffered in API

  Alt 16. Okt 2004, 21:00
Zeichne es in eine Bitmap (geht auch mit API ) und dann die Bitmap auf den Bildschirm.
Felix Alter
  Mit Zitat antworten Zitat
Benutzerbild von Nonsense
Nonsense

Registriert seit: 23. Nov 2002
389 Beiträge
 
Delphi 5 Standard
 
#3

Re: DoubleBuffered in API

  Alt 16. Okt 2004, 21:06
Zitat von FAlter:
Zeichne es in eine Bitmap (geht auch mit API ) und dann die Bitmap auf den Bildschirm.
Ganz so einfach ist es nicht. Er braucht erst eine DC, d.h. es muss mit CreateCompatibleDC eine von PS.hDC (PS: TPAINTSTRUCT) kopiert werden. Das Bitmap, was im Endeffekt auf dem Bildschirm landen soll, kommt erst auf die hDCBuffer und dann auf die hDC.

Du musst also nach CreateCompatibleDC, CreateCompatibleBitmap und BitBlt suchen.
  Mit Zitat antworten Zitat
Benutzerbild von FAlter
FAlter

Registriert seit: 21. Jul 2004
Ort: Ostfildern
1.096 Beiträge
 
FreePascal / Lazarus
 
#4

Re: DoubleBuffered in API

  Alt 16. Okt 2004, 21:12
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.
Felix Alter
  Mit Zitat antworten Zitat
Benutzerbild von FAlter
FAlter

Registriert seit: 21. Jul 2004
Ort: Ostfildern
1.096 Beiträge
 
FreePascal / Lazarus
 
#5

Re: DoubleBuffered in API

  Alt 16. Okt 2004, 21:18
Kuck mal hier:

http://www.delphi-forum.de/topic_Wie...ichnen_74.html

ein fertiger code

Delphi-Quellcode:
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;
Und anstelle die Prozedur Zeichnen aufzurufen, einfach auf deine dctmp Zeichnen.
Felix Alter
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

Re: DoubleBuffered in API

  Alt 17. Okt 2004, 13:13
In der Code-Lib sollte es von mir dazu auch einen Beitrag geben.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#7

Re: DoubleBuffered in API

  Alt 18. Okt 2004, 10:07
Danke für die Antworten, aber diesen Code hatte ich schon. Leider funktioniert er mit den ClockUtils nicht richtig...
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#8

Re: DoubleBuffered in API

  Alt 18. Okt 2004, 10:13
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
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#9

Re: DoubleBuffered in API

  Alt 18. Okt 2004, 10:18
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...
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#10

Re: DoubleBuffered in API

  Alt 18. Okt 2004, 10:19
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
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 09:25 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