13. maj 2003 - 19:38Der er
11 kommentarer og 1 løsning
Double Buffering af TForms Canvas i BCB 4
Jeg er igang med et program som næsten udelukkende hele tiden opdaterer Form1->Canvas (Form1 er hovedformen) på den ene eller den anden måde, og det gør jo at billedet flimrer ret kraftigt. Jeg ved dette kan fjernes via Double Buffering - men jeg ved ikke hvordan jeg laver denne buffering, så hvis nogen kan hjælpe vil det være alle tiders :)
Hmmm jeg må indrømme at jeg ikke kan se hvorfor det ikke virker, da jeg gør det samme som du gør i dit eksempel (der btw. ikke er lavet i BCB :D) Det her burde da virke ?
Graphics::TBitmap *bimp = new Graphics::TBitmap(); bimp->Canvas->Brush->Color = clWhite; bimp->Canvas->Rectangle(0,0,100,100); Form1->Canvas->Draw(0,0,bimp);
Her er btw. hvad hjælp filen siger om TBitmap->Canvas:
Canvas allows drawing on the bitmap by providing a TCanvas object for this purpose. Drawing on the canvas effectively modifies the underlying bitmap image pixels. Any canvas operation is valid on a bitmapnot just Draw and StretchDrawincluding line drawing, rectangles, and circles. The bitmap object is passed as a parameter to these methods.
Det ser ud til at man skal smide bitmap objektet med som parameter til rectangle, ellipse etc. Men parameterlisten til de 2 er jo bare int,int,int,int så det fatter jeg ik helt :/
Men hmm det løste ikke problemet at gøre følgende (ligger i OnPaint-eventen for formen):
bitmap->Canvas->Rectangle(0,ForskydningY, rumX, rumY+ForskydningY); for (int i = 0; i < plads; i++) ting[i]->paint(); // tegner div. objekter på bitmap FrmMain->Canvas->Draw(0,0,bitmap);
det flimrer stadigvæk - så nu er spørgsmålet bare hvad jeg gør forkert ?
Nåja jeg kalder Repaint hver gang jeg flytter på et objekt, måske det er der problemet ligger ? (Dvs. for hver pixel jeg flytter et objekt så kalder den repaint())
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.