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/)
-   -   Delphi Canvas-Flackern verhindern (https://www.delphipraxis.net/22027-canvas-flackern-verhindern.html)

Fellmer Lloyd 11. Mai 2004 14:13


Canvas-Flackern verhindern
 
Hallo DP!

Ich habe mir einen Editor Programmiert, mit dem ich oder der Endbenutzer die Eingabeformulare eines Programmes selbst gestalten kann.
Dazu gehört: Komponentenverbindungen verschieben (Label+Edit usw.), ein kleiner OI sowie das ausrichten an einem Raster, welcher im Faktor veränderbar ist.

Dieser Raster ist auch mein Problem. Ich zeichnen ihn auf ein Canvas einer TImage Komponente. Auf dieser Komponente(Image) werden auch die Komponenten(Edits usw.) verschoben.

Problem:
Wird eine Komponente über das Image gezogen, zeichnet es sich bei jeder Mausbewegung neu und das flackert ziemlich.

Gibt es dafür eine lösung?
Ich habe bereits versucht, anstatt einer Image-Komponente eine PaintBox zu verwenden, dort flackert es allerdings auch.
(Ich rufe dort die Funtion die das Raster zeichnet bei jeder bewegung neu auf).

Gruss Fellmer

AlphaBug 11. Mai 2004 14:19

Re: Canvas-Flackern verhindern
 
Hallo Fellmer Lloyd :hi:

versuch's doch mal mit einem TBitmap:

Bitmap in Prozedur erstellen
Image in das Bitmap kopieren
Das Raster auf das Bitmap zeichnen
Das Bitmap in das Image kopieren

alcaeus 11. Mai 2004 14:20

Re: Canvas-Flackern verhindern
 
Schalte die Option DoubleBuffered des Canvas ein.
Falls es danach immer noch flackert, zeichne die Ausgabe in ein Bitmap und nicht direkt auf den Canvas. Anschließend weist du es der Image-Componente mit
Delphi-Quellcode:
Image1.Graphic.Bitmap.Assign(Bitmap1);
zu.

dizzy 11. Mai 2004 16:42

Re: Canvas-Flackern verhindern
 
Zitat:

Zitat von alcaeus
Schalte die Option DoubleBuffered des Canvas ein.

Ist allerdings eine Eigenschaft von TForm, wenn ich mich net irre.
Also ins Form1.OnCreate:
Delphi-Quellcode:
DoubleBuffered := true;
Klappt bei mir ;)


Zitat:

Zitat von alcaeus
Delphi-Quellcode:
Image1.Graphic.Bitmap.Assign(Bitmap1);

Würde ich immer so machen!

Fellmer Lloyd 11. Mai 2004 16:56

Re: Canvas-Flackern verhindern
 
Danke, hat mit Bitmap.Assign funktioniert.

Jetzt funktioniert mein "kleiner" Editor wunderbar. :bounce1: :bounce2:


Alle Zeitangaben in WEZ +1. Es ist jetzt 07: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