Я пытаюсь сохранить некоторые свойства принтера (например, размер страницы) в 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
):
Обратите внимание, что dmSize
это 0.
Я попытался изменить размер страницы для принтера, используя компоненты TPrinterSetupDialog, но значение dmPaperSize
остается такой же.
Я где-то пропустил шаг?
Это проект VCL для XE4 c ++ builder.
Задача ещё не решена.
Других решений пока нет …