首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

C++ Builder 動態設定自訂列印紙張尺寸

     編輯:關於C++

透過 DEVMODE 結構修改印表機紙張大小

範例示範在列印前動態設定使用者自訂紙張尺寸 (單位 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 表示使用者自訂尺寸。
  • 單位為 0.1 公釐 (十分之一毫米)。
  • 修改後直接呼叫 Printer() 列印即生效,無需重新開啟印表機。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved