Проблема в следующем:
Под билдером я использую объект Printer() класса TPrinter для распечатки изображения.
До этого момента я использовал возможности этого класса чтобы не лезть в WIN API и не вносить сложности.
Однако TPrinter не позволяет осуществлять такие настройки как выбор размера бумаги, а также
получение списка всех форматов бумаги, допустимых для принтера. Это как раз то, что мне и нужно.
Например, чтобы изменить ориентацию бумаги на WIN API я сделал так:
HANDLE HPrinter;
if (OpenPrinter(Device.c_str(), &HPrinter, NULL))
{
// вызываем DocumentProerties() с нулевым параметром fMode
// чтобы получить количество необходимых байт
long int num_bytes;
num_bytes = DocumentProperties(NULL, HPrinter, Device.c_str(),
NULL, NULL, 0);
// выделяем память
unsigned char *buffer = new unsigned char[num_bytes];
// опять вызываем DocumentProperties(), на сей раз, чтобы получить информацию об устройстве
DocumentProperties(NULL, HPrinter, Device.c_str(),
(PDEVMODE)buffer, NULL, DM_OUT_BUFFER);
PDEVMODE pdm = (PDEVMODE)buffer;
pdm->dmOrientation = DMORIENT_LANDSCAPE;
pdm->dmFields = pdm->dmFields | DM_ORIENTATION;
// ещё раз вызываем DocumentProperties(), чтобы получить окончательный
// DEVMODE который будет передан в функцию CreateDC()
DocumentProperties(NULL, HPrinter, Device.c_str(),
pdm, pdm, DM_OUT_BUFFER | DM_IN_BUFFER);
delete [] buffer;
ClosePrinter(HPrinter);
}
но связать эти изменения с объектом Printer() не получилось. Я так понимаю, что для этого надо использовать свойство Printer()->Handle, но у меня не получилось.
Подскажите плиз.