Witam ponownie ;)
Otóż pisząc mój programik do fakturek i przelewów spotkałem się z pewnym problemem. Otóż chcę wydrukować np. 2 blankiety, zapisane w bitmapie na jednej stronie. Póki co opanowałem drukowanie po jednej bitmapce na stronę, niezależnie od jej rozmiarów :/... Mój problem jak zwykle jest zapewne błachy, jednak nie mogę wpaść na to, jak sobie z tym poradzić :/. Otóż tak wygląda moja procedura skalowania bitmapki:
procedure PrintImage(Image: TImage; ZoomPercent: Integer);
//jeśli ZoomPercent = 100, obraz zostanie wydrukowany na całej powierzchni strony
var
relHeight, relWidth: integer;
JPEG : TJPEGImage;
begin
Screen.Cursor := crHourglass; //ustawienie kursora na klepsydrę
Printer.BeginDoc;
with Image.Picture.Bitmap do
begin
if ((Width / Height) > (Printer.PageWidth / Printer.PageHeight)) then
begin
// rozciągniecie obrazka do szerokości strony drukarki
relWidth := Printer.PageWidth;
relHeight := MulDiv(Height, Printer.PageWidth, Width);
end
else
begin
// rozciagniecie obrazka do wysokosci strony drukarki
relWidth := MulDiv(Width, Printer.PageHeight, Height);
relHeight := Printer.PageHeight;
end;
relWidth := Round(relWidth * ZoomPercent / 100);
relHeight := Round(relHeight * ZoomPercent / 100);
DrawImage(Printer.Canvas, Rect(0, 0, relWidth, relHeight), Image.Picture.Bitmap);
end;
Printer.EndDoc;
Screen.cursor := crDefault;
end;
A to już zdarzenie po naciśnięciu guziczka "Drukuj":
procedure TForm1.BitBtn1Click(Sender: TObject);
var
BMP : TBitmap;
begin
Screen.cursor := crHourGlass;
image.Picture.LoadFromFile('gfx/blank_kopia.bmp');
PrintImage(Image, 50);
end;
Nie śmiejcie się ;)... ja po prostu tak mam, że czasem zatrzymują mnie sprawy banalne, a np. z trudniejszymi zagadnieniami czasami daję sobie radę ;) Jeśli ktoś może mi pomóc uporać się z tym problemem możliwie szybko - będę b.wdzięczny ;).