Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Canvas Problem: 'Leinwand/Bild erlaubt kein Zeichnen' (https://www.delphipraxis.net/146704-canvas-problem-leinwand-bild-erlaubt-kein-zeichnen.html)

sarte 25. Jan 2010 20:31


Canvas Problem: 'Leinwand/Bild erlaubt kein Zeichnen'
 
Hallo Leute,
ich hab schon danach gegoogle aber keine für mich passende Lösung gefunden.
Ich hoffe ihr könnt mir schnell helfen.
Hab 3 Units:
1. die Form
2. Klasse TDiagramm
3. Koordinaten für Canvas TPunkt

Hab jetzt gedacht, dass ich einfach eine Privatevariable "Canvas: TCanvas;" erstelle bei TForm, die auch noch Create
und dann dem Constructor von TDiagramm überliefere, damit er dann die Methoden von Canvas hat und dann auch noch auf der Form
malen kann.
So sieht es ungefähr aus:

Delphi-Quellcode:
--------------Unit1---------------------------
procedure TForm1.FormCreate(Sender: TObject);
var
  I: Integer;
begin
  Canvas := TCanvas.Create;
  Diagramm := TDiagramm.Create(Canvas);

  Diagramm.Zeichnen(Punkte,clRed); //Punkte ist nur ein Array vom Typ TPunkt, ist nicht wichtig...
end;
--------------Unit 2---------------------------
constructor TDiagramm.Create(UserCanvas:TCanvas);
begin
    inherited Create;
    Canvas := UserCanvas; // Privatevariable Canvas: TCanvas;
end;

procedure TDiagramm.Zeichnen(Daten:array of TPunkt;Color:TColor);
var I:Integer;
begin
    Canvas.Pen.Color := Color;
    Canvas.Pen.Width := 1;
    Canvas.MoveTo(Daten[0].X,Daten[0].Y); {Und hier kommt es zum Fehler:
    "Im Projekt XX.exe ist eine Exception der Klasse EInvalidOperation mit der Meldung 'Leinwand/Bild erlaubt kein Zeichnen' aufgetreten."}
    for I := 1 to high(Daten) do
    begin
      Canvas.LineTo(Daten[I].X,Daten[I].Y);
    end;
end;
Tut mir leid, dass ich soviel code einbringe, ich hoffe ihr könnt mein Problem folgen und am Ende entdecken :)
Das wäre toll

Danke schonmal

SirThornberry 25. Jan 2010 20:35

Re: Canvas Problem: 'Leinwand/Bild erlaubt kein Zeichnen'
 
Du hast einen Denkfehler. Du erstellst einfach ein TCanvas und gehst davon aus das wenn du darauf zeichnest dies dann auf dem Bildschirm sichtbar wird an der Stelle wo dein TForm ist. Aber wie kommst du darauf? Woher soll das Programm denn wissen das dein TCanvas die Leinwand des Formulars sein soll und nicht die für ein TBitmap, den Drucker etc.?!

mkinzler 25. Jan 2010 20:36

Re: Canvas Problem: 'Leinwand/Bild erlaubt kein Zeichnen'
 
Leite TDiagramm von TGraphicControl ab, dann hat diese einen eigenen Canvas


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