![]() |
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
|
AW: canvas wird überschrieben
Schau nochmal #2 :wink:
|
AW: canvas wird überschrieben
grübeldübel grübeldübel ...
ich will natürlich mit externen Daten und den Mauskoordinaten arbeiten ... wie sollen die denn in Formpaint kommen ?? global will ich nich .. zu ville ...hm |
AW: canvas wird überschrieben
Wie wär es denn mit einem Objekt für die Daten? Die Zeichenroutine arbeitet dann das von außen gefüllte Objekt ab. Oder das Objekt malt sich selber in einen Bitmap-Canvas und die Paintroutine mach dann nur noch ein Draw des Bitmaps.
|
AW: canvas wird überschrieben
Guck mal hier:
![]() Es ist performanter, wenn man auf ein Bitmap im Speicher zeichnet. |
AW: canvas wird überschrieben
Ja danke auch hier ... mir ist auch eingefallen daß ich vor 8 Jahren mal sowas wie ein Kreativ-Programm in Delphi als Remake meines immer noch schönen Pascal - Programms
gestartet hatte ... damals funzte das ganz gut ... weil eben das Bitmap auf das ich malte nicht größer war als erlaubt wegen der damaligen Grafikkarte. Wenn ich heute das Programm starte und das Image auf meine gewünschte Größe setze funzt gar nix mehr ... ich muß hier aber beifügen ...:ich arbeite noch antiquarisch mit Delphi Prof. 4 vielleicht ist das heute nicht mehr der Fall heutige Version 10? |
AW: canvas wird überschrieben
Über welche Größe reden wir hier denn? IMHO sind Windows Bitmaps auf 65536x65536 begrenzt, egal welche Delphi Version, und mindestens ab WinXP. Was heisst zudem "garnichts mehr"? Darstellungsfehler? Zugriffsfehler? Hangs? Mit derart schwammigen Aussagen wie du sie machst kann man leider nichts anfangen.
|
AW: canvas wird überschrieben
Ok - alles geht jetzt so wie ich mir das vorstelle. Habe in einem neuen Formular ein leeres Image. Auf dessen Canvas wird gezeichnet. Überlagernde Fenster haben keinen
Einfluß mehr ...Auch mit großem Image (1900x1600) kein Problem ... da war wohl noch was anderes falsch gelaufen ... Vielen Dank nochmal für den Schubs .. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:50 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