自訂列印時的紙張大小, for Windows95/98 only.
var
g_SizeSaved : Boolean;
g_DevMode : TDevMode;
{ Customize paper size (Unit: mm) }
procedure SetCustomSize(CustomWidth, CustomLength: integer);
var
ADevice, ADriver, APort : array[0..255] of Char;
hDevMode : THandle;
pDevMode : PDeviceMode;
begin
// Get printer device name etc.
Printer.GetPrinter(ADevice, ADriver, APort, hDevMode);
// force reload of DEVMODE
Printer.SetPrinter(ADevice, ADriver, APort, 0) ;
// get DEVMODE handle
Printer.GetPrinter(ADevice, ADriver, APort, hDevMode);
if hDevMode <> 0 then
begin
pDevMode := GlobalLock(hDevMode);
if pDevMode <> nil then
begin
if Not g_SizeSaved then
begin
g_DevMode := pDevMode^;
g_SizeSaved := True;
end;
with pDevMode^ do
begin
dmPaperWidth := CustomWidth;
dmPaperLength := CustomLength;
dmPaperSize := DMPAPER_USER;
dmFields := dmFields or DM_PAPERSIZE or DM_PAPERLENGTH or DM_PAPERWIDTH;
end;
GlobalUnLock(hDevMode);
end;
end;
end;
procedure RestoreSize;
var
ADevice, ADriver, APort : array[0..255] of Char;
hDevMode : THandle;
pDevMode : PDeviceMode;
begin
// Get printer device name etc.
Printer.GetPrinter(ADevice, ADriver, APort, hDevMode);
// force reload of DEVMODE
Printer.SetPrinter(ADevice, ADriver, APort, 0) ;
// get DEVMODE handle
Printer.GetPrinter(ADevice, ADriver, APort, hDevMode);
if hDevMode <> 0 then
begin
pDevMode := GlobalLock(hDevMode);
if pDevMode <> nil Then
begin
pDevMode^ := g_DevMode;
g_SizeSaved := False;
GlobalUnLock(hDevMode);
end;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
SetCustomSize(2100, 1480);
Printer.BeginDoc;
Printer.Canvas.TextOut(100, 100, 'Hello, this is Michael!');
Printer.EndDoc;
end;
               (
geocities.com/huanlin_tsai)