A: Despite what Delphi's help says you have to change the printer object's Font.PixelsPerInch. And for some reason, you have to set it AFTER calling an API routine that gets the printer's hDC. The following function does it. After calling this function, you can use Font.Size to set a font size independently of the printer's resolution.
{-------------------------------------------------------------
Sets the logical dots per inch for the printer and sets the printer
axes to point RIGHT and DOWN. Thus (0,0) is at the top left corner
of the page. Returns the page size in logical coordinates.
Note: Must be called AFTER Printer.BeginDoc.
--------------------------------------------------------------}
function SetPrinterScale: TPoint;
var
DeviceDpiX, DeviceDpiY : integer;
begin
with Printer do begin
DeviceDpiX := GetDeviceCaps(Handle, LOGPIXELSX);
DeviceDpiY := GetDeviceCaps(Handle, LOGPIXELSY);
SetMapMode(Handle, MM_ISOTROPIC);
SetWindowExt(Handle, DeviceDpiX, DeviceDpiY);
SetViewPortExt(Handle, DeviceDpiX, DeviceDpiY);
Result := Point(PageWidth, PageHeight);
with Canvas do begin
DPtoLP(Handle, Result, 1); { This API
call is required... }
Font.PixelsPerInch := DeviceDpiY; {
Manual setting is required to make this work. }
end;
end;
end;