Versuchsweise hab ich jetzt mal den Preparecanvas aus dem OnPaint entfernt und nur im Create bzw. Zoom aufgerufen. Dann wird aber meine Grafik gar nicht mehr gezoomt.
Leider finden sich ja in dem Bereich verdammt wenige bis keine Beispiele.
Anbei die geänderte Version, nicht dass ich noch einen anderen Fehler drinhab.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
scale:=scale div 2;
preparecanvas(PaintBox1.Canvas);
PaintBox1.Width:=PaintBox1.Width div 2;
PaintBox1.Height:=PaintBox1.Height div 2;
preparecanvas(PaintBox1.Canvas);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
scale:=scale*2;
preparecanvas(PaintBox1.Canvas);
PaintBox1.Width:=PaintBox1.Width*2;
PaintBox1.Height:=PaintBox1.Height*2;
// preparecanvas(PaintBox1.Canvas);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
scale:=1;
preparecanvas(PaintBox1.Canvas);
end;
procedure TForm1.PrepareCanvas(Canvas: TCanvas);
begin
SetGraphicsMode(PaintBox1.Canvas.handle, GM_ADVANCED);
setMapMode(PaintBox1.Canvas.Handle, MM_ISOTROPIC);
SetWindowExtEx(Canvas.Handle, Round(400), Round(300), nil);
SetViewportExtEx(Canvas.Handle, round(400*scale), round(300*scale), nil);
end;
procedure TForm1.PaintBox1Paint(Sender: TObject);
begin
// preparecanvas(PaintBox1.Canvas);
PaintBox1.Canvas.Pen.Color:=clBlue;
PaintBox1.Canvas.Rectangle(10,10,100,100);
PaintBox1.Canvas.Pen.Color:=clRed;
PaintBox1.Canvas.Rectangle(300,10,399,100);
end;