печать — Сохранение свойств принтера в приложении 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):

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

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

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

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

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

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …