Hallo
Schau dir mal diesen codeschnipsel zum proportionalen resizen an ... nicht beim drucken, aber eventuell hilfts als zündfunke ...
Ein bild als tImage soll so in ein Panel eingeblendet werden, daß es optimal groß proportional dargestellt wird....
Image12.Parent wäre das Panel, wäre in deinem Fall der canvas des blattes zum drucken ... ?
Delphi-Quellcode:
{ JPEGImage }
ms1.Seek(0, soFromBeginning);
jpg3.LoadFromStream(ms1);
{ Resize }
if (Image12.Parent.ClientWidth>0) and (jpg3.Width>0) then
begin
{ Seitenverhältnis Container }
r1 := (Image12.Parent.ClientHeight/Image12.Parent.ClientWidth);
{ Seitenverhältnis Bild }
if (jpg3.Width>0)
then r2 :=(jpg3.Height/jpg3.Width)
else r2 := 0.0;
{ Container passend zum Bild in Übergeordneten Panel einpassen, damit Stretch automatisch funktioniert }
if (r1>r2)
then
begin
{ Container ist im Verhältnis höher als Bild, also auf Breite anpassen }
{ Faktor damit Bild so breit wie Container wird }
r1 := Image12.Parent.ClientWidth/jpg3.Width;
Image12.Width := Image12.Parent.ClientWidth;
Image12.Left := 0;
Image12.Height := Trunc(r1* jpg3.Height);
Image12.Top := (Image12.Parent.ClientHeight-Image12.Height) div 2;
end
else
begin
{ Container ist im Verhältnis breiter als Bild, also auf Höhe anpassen }
{ Faktor damit Bild so hoch wie Container wird }
r1 := Image12.Parent.ClientHeight/jpg3.Height;
Image12.Height := Image12.Parent.ClientHeight;
Image12.Top := 0;
Image12.Width := Trunc(r1* jpg3.Width);
Image12.Left := (Image12.Parent.ClientWidth-Image12.Width) div 2;
end;
Image12.Picture.Assign(jpg3);
end;