Привет еще раз. К сожалению с пользовательским форматом бумаги мне не смогли помочь. Тогда может кто знает как установить какой-нибудь другой стандартный размер (А4, А5, А6 ...) без изменения системных настроек, без пользовательских диалогов? В каких то старых книжках прочитал, что нужно использовать структуру PDEVMODE. На форумах нашел похожий код на Delphi. Правда там не размеры меняют, а число копий…Мой код никаких ошибок не выдает, но и размер бумаги не устанавливает почему-то. Может кто знает в чем дело или как решить мою задачу?
PS Я где-то встречал информацию, что настройки принтера можно получить через PrinterDialog, PrinterSetupDialog, причем не вызывая самого диалога. Но не встречал примера. Это возможно?
Printer()->PrinterIndex = 2;
ShowMessage("Область печати (до изменений): " + IntToStr(Printer()->PageWidth) + "x" + IntToStr(Printer()->PageHeight));
UnicodeString DeviceName, DriveName, PortName; //Фиктивная переменная
THandle hPrnDevMode; //Фиктивная переменная
PDEVMODE pDevMode; //Указатель на структуру DeviceMode
Printer()->GetPrinter(DeviceName.c_str(), DriveName.c_str(), PortName.c_str(), hPrnDevMode);
if (hPrnDevMode == 0)
{
ShowMessage("Не получилось настроить параметры печати!");
return;
}
//Получаем указатель на структуру DEVMODE
pDevMode = (PDEVMODE) GlobalLock((HANDLE)hPrnDevMode);
if (pDevMode == NULL)
{
ShowMessage("Не получилось настроить параметры печати!");
return;
}
//Настраиваем параметры печати
pDevMode->dmFields |= DM_PAPERSIZE;
pDevMode->dmPaperSize = DMPAPER_A6;
//Освобождаем структуру DEVMODE
GlobalUnlock((HANDLE)hPrnDevMode);
//Размеры НЕ ИЗМЕНИЛИСЬ, почему?
ShowMessage("Область печати (после изменений): " + IntToStr(Printer()->PageWidth) + "x" + IntToStr(Printer()->PageHeight));
Printer()->BeginDoc();
…
Printer()->EndDoc();