My solution is posted below:
- Code: Select all
function TPrintPreview.GetPrinterPageBounds: TRect;
var
Offset: TPoint;
DPI: TPoint;
// -- Mixy --
PrintAreaX,
PrintAreaY: integer;
begin
Result := PageBounds;
if PrinterInstalled then
begin
Offset.X := GetDeviceCaps(Printer.Handle, PHYSICALOFFSETX);
Offset.Y := GetDeviceCaps(Printer.Handle, PHYSICALOFFSETY);
DPI.X := GetDeviceCaps(Printer.Handle, LOGPIXELSX);
DPI.Y := GetDeviceCaps(Printer.Handle, LOGPIXELSY);
Offset.X := ConvertUnits(Offset.X, DPI.X, mmPixel, Units);
Offset.Y := ConvertUnits(Offset.Y, DPI.Y, mmPixel, Units);
// -- Mixy --
PrintAreaX:=GetDeviceCaps(Printer.Handle, HORZRES);
PrintAreaY:=GetDeviceCaps(Printer.Handle, VERTRES);
PrintAreaX:=ConvertUnits(PrintAreaX, DPI.X, mmPixel, Units);
PrintAreaY:=ConvertUnits(PrintAreaY, DPI.X, mmPixel, Units);
// InflateRect(Result, -Offset.X, -Offset.Y);
// -- Mixy --
Result.Left:=Offset.X;
Result.Top:=Offset.Y;
Result.Right:=Offset.X+PrintAreaX;
Result.Bottom:=Offset.Y+PrintAreaY;
end;
end;