AGB  ·  Datenschutz  ·  Impressum  







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

canvas wird überschrieben

Ein Thema von me57 · begonnen am 18. Apr 2013 · letzter Beitrag vom 22. Apr 2013
Antwort Antwort
Seite 1 von 2  1 2      
me57

Registriert seit: 18. Apr 2013
8 Beiträge
 
#1

canvas wird überschrieben

  Alt 18. Apr 2013, 01:48
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 ...
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#2

AW: canvas wird überschrieben

  Alt 18. Apr 2013, 03:06
Du solltest das in einer Paintbox Zeichnen und den OnPaint Event entsprechend nutzen.
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#3

AW: canvas wird überschrieben

  Alt 18. Apr 2013, 03:06
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 ...
Spendiere deiner Zeichenmethode eine eigene private Procedure:
Delphi-Quellcode:
procedure TForm1.Zeichnen;
begin
     Form1.Canvas.MoveTo(10,500);
     Form1.Canvas.LineTo(300,500);
end;
Rufe in OnPaint deines Formulars diese Methode auf:
Delphi-Quellcode:
procedure TForm1.FormPaint(Sender: TObject);
begin
     Zeichnen;
end;
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.

Geändert von Perlsau (18. Apr 2013 um 03:10 Uhr) Grund: Technische Grundlagen ergänzt
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#4

AW: canvas wird überschrieben

  Alt 18. Apr 2013, 08:12
Spendiere deiner Zeichenmethode eine eigene private Procedure:
Delphi-Quellcode:
procedure TForm1.Zeichnen;
begin
     Form1.Canvas.MoveTo(10,500);
     Form1.Canvas.LineTo(300,500);
end;
Kleiner Einwand: sicherheitshalber sollte man nicht auf die benannte Instanz zugreifen. Falls man eine weitere Instanz anlegt, greift man im "Glücksfall" nur auf die falsche, im blödesten Fall auf eine nicht existente Instanz zu.
Delphi-Quellcode:
procedure TForm1.Zeichnen;
begin
     {self.}Canvas.MoveTo(10,500);
     {self.}Canvas.LineTo(300,500);
end;
So sollte es immer stimmen. Das "self" ist optional, da, wenn man es weglässt, automatisch auf self zugegriffen wird.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#5

AW: canvas wird überschrieben

  Alt 18. Apr 2013, 08:14
So sollte es immer stimmen. Das "self" ist optional, da, wenn man es weglässt, automatisch auf self zugegriffen wird.
Da hast du auch wieder recht
  Mit Zitat antworten Zitat
me57

Registriert seit: 18. Apr 2013
8 Beiträge
 
#6

AW: canvas wird überschrieben

  Alt 18. Apr 2013, 10:43
Danke an alle edlen Wissensspender - werd ich gleich umsetzen ...
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#7

AW: canvas wird überschrieben

  Alt 18. Apr 2013, 11:47
Also mit folgender Vorgehensweise hält man sich alle Möglichkeiten offen:
Delphi-Quellcode:
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;
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.
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);
  Mit Zitat antworten Zitat
me57

Registriert seit: 18. Apr 2013
8 Beiträge
 
#8

AW: canvas wird überschrieben

  Alt 18. Apr 2013, 11:54
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
  Mit Zitat antworten Zitat
me57

Registriert seit: 18. Apr 2013
8 Beiträge
 
#9

AW: canvas wird überschrieben

  Alt 18. Apr 2013, 12:17
.... ist aber wohl auch nicht die Lösung ... hm da ich da nicht die Auflösung habe ... max 1024x768 pix ...
  Mit Zitat antworten Zitat
me57

Registriert seit: 18. Apr 2013
8 Beiträge
 
#10

AW: canvas wird überschrieben

  Alt 18. Apr 2013, 12:20
also doch Form1.OnPaint FormPaint ist der Weg DANK hm muss ich also alles umbauen ...oki
  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 23:52 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