Вопрос: Как изменить формат печати для принтера?
Печатаю с помощью TPrinter. 
Надо изменить формат листа на котором печатает принтер (например с A4 на Letter) без вызова диалога свойств 
принтера (пользователь вообще не должен знать, что это происходит).

Ответ :

Выдрано из рабочей программы 


code:
--------------------------------------------------------------------------------

HANDLE prn;

// для открытия задаешь имя принтера так он называется в системе
// например "HP 1100 LaserJet"
// открой Пуск-Настройка-Принтеры и посмотри
// програмно все принтеры компа лежат в Printer()->Printers;

if(OpenPrinter("ля-ля-ля",&prn,NULL)){
	BYTE *buffer=NULL;
	DWORD need=0;
// первый вызов
// узнаем сколько памяти нужно для получения данных
	GetPrinter(prn,2,buffer,0,&need);
	if(need){
// выделеям
		buffer=new BYTE[need];
//читаем
		GetPrinter(prn,2,buffer,need,&need);
// преобразовываем
		PRINTER_INFO_2 *ppi2=(PRINTER_INFO_2 *)buffer;
// устанавливаем бумагу
		ppi2->pDevMode->dmFields|=DM_PAPERSIZE;
// здесь пишем нужный размер - не помню я как твой Letter называется
		ppi2->pDevMode->dmPaperSize=DMPAPER_A4;
// следующая строчка необходима для совместимости с NT и 2000
// иначе надо получать текущий Security и писать его сюда
		ppi2->pSecurityDescriptor=NULL;
// устанавливаем данные
		SetPrinter(prn,2,(LPBYTE)ppi2,0);
		delete[] buffer;
	}
// и закрываем принтер
	ClosePrinter(prn);
}



--------------------------------------------------------------------------------



И еще - этот кусок рабочий, но там печать идет целиком через API. 
Как будет работать TPrinter сказать сложно. Может он переустановить формат захочет обратно. 
Но сначала можно попробовать это.




--------------------------------------------------------------------------------

	

Электронные Книги по компьютерным программам
На правах рекламы:
Логин
Пароль
Запомнить меня