Сохранение свойств принтера в приложении XE4 C++ VCL

Я пытаюсь сохранить некоторые свойства принтера (например, размер страницы) в INI-файл следующим образом:

    Printer()->PrinterIndex = Printer()->PrinterIndex;    

    wchar_t printerDevice[256], printerDriver[256], printerPort[256];
    THandle printerDeviceModeHandle = 0;
    DEVMODE *printerDeviceMode;

    Printer()->GetPrinter(printerDevice, printerDriver, printerPort, printerDeviceModeHandle);

    if (printerDeviceModeHandle != 0)
    {

        DEVMODE *printerDeviceMode = (DEVMODE *) GlobalLock((void *)printerDeviceModeHandle);

        if ((printerDeviceMode != NULL) && (printerDeviceMode->dmFields & DM_PAPERSIZE))                
            ini->WriteInteger("PrintingPage", "PaperSize", printerDeviceMode->dmPaperSize);

        GlobalUnlock((void *)printerDeviceModeHandle);
    }

Код попадает во внутренний оператор if, но когда я проверяю printerDeviceMode переменная только dmDeviceName кажется правильным. Многие другие настройки кажутся мусором (в том числе dmPaperSize):

Изображение окна инспектора отладки для принтера DeviceMode

Обратите внимание, что dmSize это 0.

Я попытался изменить размер страницы для принтера, используя компоненты TPrinterSetupDialog, но значение dmPaperSize остается такой же.

Я где-то пропустил шаг?

Это проект VCL для XE4 C++ builder.

0 ответов

Другие вопросы по тегам