範例示範在列印前動態設定使用者自訂紙張尺寸 (單位 0.1 公釐),適用於非標準紙張 (如條碼標籤、傳單)。
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
char *ADevice, *ADriver, *APort;
THandle DeviceMode;
PDEVMODE DevMode;
int length = 1400; // 0.1 mm 單位
int width = 2410;
ADevice = new char[100];
ADriver = new char[100];
APort = new char[100];
Printer()->GetPrinter(ADevice, ADriver, APort, DeviceMode); // 取得印表機資訊
DevMode = (PDEVMODE)GlobalLock(DeviceMode); // 鎖定 DEVMODE
// 設定可修改欄位
DevMode->dmFields |= DM_PAPERSIZE;
DevMode->dmFields |= DM_PAPERLENGTH;
DevMode->dmFields |= DM_PAPERWIDTH;
// 指定自訂紙張尺寸
DevMode->dmPaperSize = DMPAPER_USER;
DevMode->dmPaperLength = length;
DevMode->dmPaperWidth = width;
// 測試列印
Printer()->BeginDoc();
TextOut(Printer()->Handle, 0, 0, "-----------------", 17);
Printer()->NewPage();
TextOut(Printer()->Handle, 0, 0, "++++++++++++++++++", 18);
Printer()->NewPage();
Printer()->EndDoc();
GlobalUnlock(DeviceMode); // 解鎖
delete[] ADevice; delete[] ADriver; delete[] APort;
}
dmFields 必須設定對應旗標,驅動程式才會套用 dmPaperLength/Width。DMPAPER_USER 表示使用者自訂尺寸。Printer() 列印即生效,無需重新開啟印表機。