unit Unit3;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;
type
TForm3 =
class(TForm)
PaintBox1: TPaintBox;
Drucken: TButton;
procedure PaintBox1Paint(Sender: TObject);
procedure DruckenClick(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form3: TForm3;
implementation
{$R *.dfm}
uses Math, Printers;
Procedure SetCanvasZoomAndRotation(ACanvas:TCanvas;Zoom:Double;Angle:Double;CenterpointX,CenterpointY:Double);
var
form : tagXFORM;
Winkel:Double;
begin
Winkel := DegToRad(Angle);
SetGraphicsMode(ACanvas.Handle, GM_ADVANCED);
SetMapMode(ACanvas.Handle,MM_ANISOTROPIC);
form.eM11 := Zoom * cos( Winkel);
form.eM12 := Zoom *Sin( Winkel) ;
form.eM21 := Zoom * (-sin( Winkel));
form.eM22 := Zoom * cos( Winkel) ;
form.eDx := CenterpointX;
form.eDy := CenterpointY;
SetWorldTransform(ACanvas.Handle,form);
end;
Procedure DoThePaint(C:TCanvas;Width,Height:Integer);
Const
C_PaintRaster:TRect=(Left:-100;Top:-100;Right:100;Bottom:100);
// Dein Koordinatensystem
var
x,y:Integer;
Zoom:Double;
i:Integer;
begin
Zoom := Width /(C_PaintRaster.Right-C_PaintRaster.Left);
// hier gegf. einen geeigneteren Algorhytums
SetCanvasZoomAndRotation(C,Zoom ,0,-C_PaintRaster.Left * Zoom ,-C_PaintRaster.Top * Zoom);
// irgendeine Demozeichenroutine
c.Font.Size := Round(10 / zoom);
c.Brush.Style := bsClear;
for I := -100
to 100
do
if (i
mod 10)=0
then
begin
C.Ellipse(i-5,i-5,i+5,i+5);
c.TextOut(i-2,i-2,IntToStr(i));
end;
end;
procedure TForm3.DruckenClick(Sender: TObject);
begin
Printer.Begindoc;
DoThePaint(Printer.Canvas,Printer.PageWidth,Printer.Pageheight);
Printer.EndDoc;
end;
procedure TForm3.PaintBox1Paint(Sender: TObject);
begin
DoThePaint(PaintBox1.Canvas,PaintBox1.Width,PaintBox1.Height);
end;
end.