witam może ktoś mi pomóc ?
mam problem z drukowaniem
mam form1 który przyjmuje 4 wielkości
dla 3 wielkości wszystko drukuje się ok
a dla jednej drukarka wyrzuca kartkę nie drukując nic
(podczas drukowania form jest automatycznie skalowany żeby zmieścić się na kartkę)
i mam pytanie co może być źle ? czy jak drukarka ma cos do nadrukowania na kawałku marginesu gdzie nie może drukować to się wtedy 'wywala' ?
na drukarkę rysuje taka funkcja
procedure PrintBitmap(Bitmap: TBitmap;margines:Integer = 0);
var
Info: PBitmapInfo;
InfoSize: DWORD;
Image: Pointer;
ImageSize: DWORD;
X, Y: Integer;
sA,sX,sY : Extended;
Margin : TPoint;
begin
with Bitmap do
begin
GetDIBSizes(Handle, InfoSize, ImageSize);
Info := AllocMem(InfoSize); {<-- MemAlloc dla D1}
try
Image := AllocMem(ImageSize); {<-- MemAlloc dla D1}
try
GetDIB(Handle, Palette, Info^, Image^);
with Info^.bmiHeader do
begin
Margin.x :=GetDeviceCaps(Printer.Handle, PHYSICALOFFSETX);
Margin.y :=GetDeviceCaps(Printer.Handle, PHYSICALOFFSETY);
sX := (Printer.PageWidth-2*(Margin.x+2+margines))/Width;
sY := (Printer.PageHeight-2*(Margin.y+2+margines))/Height;
if sX < sY then sA := sX else sA := sY;
X := floor((Printer.PageWidth - sA*Width)/2); Y := floor((Printer.PageHeight - sA*Height)/2);
StretchDIBits(Printer.Canvas.Handle, X, Y, floor(cA*Width), //Width
floor(cA*Height), 0, 0, biWidth, biHeight, Image, Info^,
DIB_RGB_COLORS, SRCCOPY);
end;
finally
FreeMem(Image, ImageSize);
end;
finally
FreeMem(Info, InfoSize);
end;
end;
end;