Rambler's Top100
"Knowledge itself is power"
F.Bacon
Поиск | Карта сайта | Помощь | О проекте | ТТХ  
 Круглый стол
  
Правила КС
>> Настройки

Фильтр вопросов
>> Новые вопросы
отслеживать по
>> Новые ответы

Избранное

Страница вопросов
Поиск по КС


Специальные проекты:
>> К л ю к в а
>> Г о л о в о л о м к и

Вопрос №

Задать вопрос
Off-topic вопросы

Помощь

 
 К н и г и
 
Книжная полка
 
 
Библиотека
 
  
  
 


Поиск
 
Поиск по КС
Поиск в статьях
Яndex© + Google©
Поиск книг

 
  
Тематический каталог
Все манускрипты

 
  
Карта VCL
ОШИБКИ
Сообщения системы

 
Форумы
 
Круглый стол
Новые вопросы

 
  
Базарная площадь
Городская площадь

 
   
С Л С

 
Летопись
 
Королевские Хроники
Рыцарский Зал
Глас народа!

 
  
ТТХ
Конкурсы
Королевская клюква

 
Разделы
 
Hello, World!
Лицей

Квинтана

 
  
Сокровищница
Подземелье Магов
Подводные камни
Свитки

 
  
Школа ОБЕРОНА

 
  
Арсенальная башня
Фолианты
Полигон

 
  
Книга Песка
Дальние земли

 
  
АРХИВЫ

 
 

Сейчас на сайте присутствуют:
 
  
 
Во Флориде и в Королевстве сейчас  17:58[Войти] | [Зарегистрироваться]
Ответ на вопрос № 83738

19-06-2020 14:31
Всем привет.

Есть принтеры brother HL-2300 или похожие.

Есть приложение, которое печатает талон на листке А6. Талон рисуется в графике. Когда он готов я его печатал так


Printer.PrinterIndex := pin;
printer.title := 'текст';

Printer.BeginDoc;
try
RR := Rect(.....);
Printer.Canvas.StretchDraw(RR, TA.Picture.Graphic);
finally
Printer.EndDoc;
end;



И все было хорошо. У принтера в настройках стояла бумага А4. Ставили свою бумажку А6 по центру и в RR я делал сдвиг от левого края. Принтерам было по барабану на формат страниц.

Потом нам навязали Ricoh P502. Это очень умные принтеры, они лучше меня знают чего я хочу. Они определяют, что у меня бумажка А6 вместо А4 и отказываются печатать. Да, у них в настройках есть возможность отключить media check, и они, как бы, перестают ругаться и начинают печатать. Но!!! они же умнее меня! Они в таком режиме поворачивают печатаемое содержимое на 90 градусов, и хоть убейся.

Ок, почитал, нашел как прибить к printer. формат бумаги. И перед printer.beginDoc вызываю такую процедурку:



procedure setA6portrait(prnIndex: integer);
var ADevice, ADriver, APort: array[0..255] of char;
    ADeviceMode: THandle;
    DevMode: PDevMode;
begin

Printer.PrinterIndex := prnIndex;

Printer.GetPrinter(ADevice, ADriver, APort, ADeviceMode);
Printer.SetPrinter(ADevice, ADriver, APort, 0);
Printer.GetPrinter(ADevice, ADriver, APort, ADeviceMode);

DevMode := GlobalLock(ADeviceMode);
if not Assigned(DevMode) then exit;

DevMode^.dmPaperSize := DMPAPER_A6;
DevMode^.dmDuplex := DMDUP_SIMPLEX;

GlobalUnlock(ADeviceMode);
Printer.SetPrinter(ADevice, ADriver, APort, ADeviceMode);
Printer.Orientation := poPortrait;
end;



И таки да, у рикохи все стало нормально. Но теперь другие принтеры, типа, HL-2300 стали оочееньь меедлеенноо крутить своими колесиками. Т.е. печать идет, и печатается все правильно, но не со скоростью 26 страниц в минуту, как заявлено и как раньше было, а, наверное, 5-8 страниц в минуту. Т.е. то, что делается в setA6portrait, включает тормоза.

Как победить?





[+] Добавить в избранные вопросы

Отслеживать ответы на этот вопрос по RSS

Ответы:


Уважаемые авторы вопросов! Большая просьба сообщить о результатах решения проблемы на этой странице.
Иначе, следящие за обсуждением, возможно имеющие аналогичные проблемы, не получают ясного представления об их решении. А авторы ответов не получают обратной связи. Что можно расценивать, как проявление неуважения к отвечающим от автора вопроса.

20-06-2020 03:51 | Комментарий к предыдущим ответам
В Delphi есть такой коньпонентик как PrinterSetupDialog. С его помощью можно настраивать параметры принтера простым гуем (который из винды берётся). Так вот. Когда у меня были проблемы с некоторыми принтерами, я просто брал, делал настройки через этот компонент, а затем просто копировал данные в бинарном виде из ADeviceMode (GlobalSize в помощь, чтобы узнать, какого ЭТО размера, оно для разных принтеров может быть, наверное, разное) и сохранял эти настройки в файл с именем ADevice (расширение у меня было dat, но это просто бинарный дамп). При повторном запуске приложения я проверял выбранный принтер и если к нему находился подходящий ADevice.dat - загружал его как бинарные настройки и устанавливал.
Если честно, то не уверен, что это - правильный подход в общем случае. Потому что, наверное, могут быть принтеры с одинаковым ADevice, наверное, надо было ещё проверять GlobalSize, чтобы не вылезти за рамки памяти... но у меня была более-менее фиксированная конфигурация машин и это работало. Возможно, в имени принтером могут встречаться хитрые символы фендибоберные, которые нельзя использовать в имени файлов (банальный пример - слеши), у меня их каким-то чудом не было. Боролся я тогда тоже с форматами, только в моём случае принтер упорно выбирал лоток А3 вместо А4 и половина бумажки уходила в мусор.
PS: почему комментарий? А потому что отправка по электропочте всё-равно не работает, а так хотя бы ошибка вылазить не будет.

Добавьте свое cообщение

Вашe имя:  [Войти]
Ваш адрес (e-mail):На Королевстве все адреса защищаются от спам-роботов
контрольный вопрос:
Зимой — белый, летом — серый. Кто?
в качестве ответа на вопрос или загадку следует давать только одно слово в именительном падеже и именно в такой форме, как оно используется в оригинале.
Надоело отвечать на странные вопросы? Зарегистрируйтесь на сайте.
Тип сообщения:
Текст:
Жирный шрифт  Наклонный шрифт  Подчеркнутый шрифт  Выравнивание по центру  Список  Заголовок  Разделительная линия  Код  Маленький шрифт  Крупный шрифт  Цитирование блока текста  Строчное цитирование
  • вопрос Круглого стола № XXX

  • вопрос № YYY в тесте № XXX Рыцарской Квинтаны

  • сообщение № YYY в теме № XXX Базарной площади
  • обсуждение темы № YYY Базарной площади
  •  
     Правила оформления сообщений на Королевстве

    Страница избранных вопросов Круглого стола.
      
    Время на сайте: GMT минус 5 часов

    Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter.
    Функция может не работать в некоторых версиях броузеров.

    Web hosting for this web site provided by DotNetPark (ASP.NET, SharePoint, MS SQL hosting)  
    Software for IIS, Hyper-V, MS SQL. Tools for Windows server administrators. Server migration utilities  

     
    © При использовании любых материалов «Королевства Delphi» необходимо указывать источник информации. Перепечатка авторских статей возможна только при согласии всех авторов и администрации сайта.
    Все используемые на сайте торговые марки являются собственностью их производителей.

    Яндекс цитирования