![]() |
canvas wird überschrieben
Hallo, bin hier ganz neu, nicht so ganz neu mit delphi..
also ich zeichne auf ein Formular mit z.B. canvas.lineto ... usw ..Fadenkreuz etc und andere Dinge .. wenn ich nun ein zweites Formular(fenster) in der Anwendung aufrufe werden die gezeichneten Linien mit dem Fenster wegradiert ... nicht so schön ... wie kann ich das unterbinden mit Lock und unlock oder sowas?? hab da noch keine Lösung ... |
AW: canvas wird überschrieben
Du solltest das in einer Paintbox Zeichnen und den OnPaint Event entsprechend nutzen.
|
AW: canvas wird überschrieben
Zitat:
Delphi-Quellcode:
Rufe in OnPaint deines Formulars diese Methode auf:
procedure TForm1.Zeichnen;
begin Form1.Canvas.MoveTo(10,500); Form1.Canvas.LineTo(300,500); end;
Delphi-Quellcode:
Begründung: Der ursprünglichen OnPaint-Methode deiner Formular-Instanz ist die Methode Zeichnen nicht bekannt, weshalb beim Repaint deines Formulars auch nur das wiederhergestellt wird, was eigentlich zum Formular gehört. Mit dem zusätzlichen Code in OnPaint erweiterst du praktisch die On-Paint-Methode deines Formulars, so daß bei einem Neuzeichnen des Formulars auch deine Linien wieder gezeichnet werden.
procedure TForm1.FormPaint(Sender: TObject);
begin Zeichnen; end; |
AW: canvas wird überschrieben
Zitat:
Delphi-Quellcode:
So sollte es immer stimmen. Das "self" ist optional, da, wenn man es weglässt, automatisch auf self zugegriffen wird.
procedure TForm1.Zeichnen;
begin {self.}Canvas.MoveTo(10,500); {self.}Canvas.LineTo(300,500); end; |
AW: canvas wird überschrieben
Zitat:
|
AW: canvas wird überschrieben
Danke an alle edlen Wissensspender - werd ich gleich umsetzen ...
|
AW: canvas wird überschrieben
Also mit folgender Vorgehensweise hält man sich alle Möglichkeiten offen:
Delphi-Quellcode:
So sollte man eigentlich immer vorgehen, ganz gleichgültig ob man auf dem Canvas des Formulars, einer Paintbox oder auf ein Image zeichnen möchte.
procedure TForm1.Zeichnen(ACanvas:TCanvas);
begin ACanvas.MoveTo(10,500); ACanvas.LineTo(300,500); end; procedure TForm1.FormPaint(Sender: TObject); begin Zeichnen(self.Canvas); end; Damit ist es auch kein Problem die gezeichneten Daten z.B. auf dem Printer.Canvas auszugeben. Empfehlenswert ist auch der Zeichenmethode zusätzlich die Anfangkoordinaten mitzugeben:
Delphi-Quellcode:
procedure TForm1.Zeichnen(ACanvas:TCanvas; x,y:Integer);
begin ACanvas.MoveTo(10+x,500+y); |
AW: canvas wird überschrieben
Hallo, habs mal versucht ... aber irgendwie mach ich irgendwas falsch ... ok...es geht wahrscheinlich auch nicht ohne ein Bitmap im Image-Objekt das funzt.
Hab ja vorher einfach auf das leere Formular mit Teflonbeschichtung gemalt ... hm also ohne dieses Bitmap-Image kann ein drüberliegendes Fenster als Radierer verwendet werden ...so war es bei mir .. Danke trotzdem |
AW: canvas wird überschrieben
.... ist aber wohl auch nicht die Lösung ... hm da ich da nicht die Auflösung habe ... max 1024x768 pix ...
|
AW: canvas wird überschrieben
also doch Form1.OnPaint FormPaint ist der Weg DANK hm muss ich also alles umbauen ...oki
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:48 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