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 Warum kann ich auf canvas nicht zeichnen (https://www.delphipraxis.net/135969-warum-kann-ich-auf-canvas-nicht-zeichnen.html)

R2009 21. Jun 2009 10:29


Warum kann ich auf canvas nicht zeichnen
 
Hi,
ich versuche sowas wie einen 3d canvas hinzubekommen.

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  Tpoint3d = record
     x,y,z:real;
  end;
  Tcanvas3d = class(Tcanvas)
     Function Calc3d(p:tpoint3d;angle,multi:real):tpoint;
     Procedure triangle3d(p1,p2,p3:tpoint3d);
  end;
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
Function Tcanvas3d.Calc3d(p:tpoint3d;angle,multi:real):tpoint;
begin
  result.x:=round(multi*(p.x+p.z*cos(angle)));
  result.y:=round(multi*(p.y+p.z*sin(angle)));
end;

Procedure Tcanvas3d.triangle3d(p1,p2,p3:tpoint3d);
var p01:array [0..2] of tpoint;
begin
  p01[0]:=Calc3d(p1,Pi / 7,1);
  p01[1]:=Calc3d(p2,Pi / 7,1);
  p01[2]:=Calc3d(p3,Pi / 7,1);
  polygon(p01); // ----->Hier meckert das Programm zur Laufzeit: kann nicht auf auf Leinwand/Bild zeichnen
end;

procedure TForm1.Button1Click(Sender: TObject);
var s:Tcanvas3d;t:tpoint;p1,p2,p3:tpoint3d;
begin
  s:=Tcanvas3d.Create;
  p1.x:=100;p1.y:=100;p1.z:=0;
  p2.x:=200;p2.y:=100;p2.z:=0;
  p3.x:=200;p3.y:=150;p3.z:=0;
  s.triangle3d(p1,p2,p3);
  //canvas.Assign(s);
  s.Free;
end;

end.
Kann mir jemand sagen was ich hier falsch mache? Das Programm meckert zur Laufzeit beim Versuch ein Polygon zu zeichnen..

Danke im Vorraus

Medium 21. Jun 2009 10:35

Re: Warum kann ich auf canvas nicht zeichnen
 
Du kannst einen Canvas nicht als isoliertes Element verwenden. Ein Canvas gehört immer zu einem DC, zu dem er lediglich eine Schnittstelle bietet - er ist selbst jedoch (auch wenn es der Name vermuten ließe) KEINE eigenständige Zeichenfläche mit eigenem Bildpuffer. In deinem Fall würde ich eher auf einem TBitmap aufbauen.

R2009 21. Jun 2009 10:44

Re: Warum kann ich auf canvas nicht zeichnen
 
Okay danke hab ich nicht gewusst.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:00 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 by Thomas Breitkreuz