Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Длина имени принтера в DeviceMode [D7, WinXP]


dmk ©   (2004-09-25 15:02:00) 

Ограничение на длину имени принтера в WinApi - 32 знака.
Об этом говорит константа CCHDEVICENAME.
Пытаюсь создать информационный контекст с длиной имени
более 32 символов и функция возвращает 0.
Вот имя: "Microsoft Office Document Image Writer".
Но другие программы обходят как то обходят это.
Подскажите! Как решить проблему?
Нужен информационный контекст с параметрами принтера.

PrinterDC := CreateIC(nil, PChar(FPrnName), nil, PDeviceModeA(@FDevMode^));


dmk   (2004-09-27 02:49:00) [1]

>Так для этого наверное второй параметр и нужен? В нем-то огрвничений нет.
Логично и достоверно.
В общем создал я 3 таких принтера - проблем пока не было.


PGM_X   (2004-09-27 00:06:00) [2]

> Только вот странно, если в системе будет 2 принтера с таким длинным и одинаковым именем, а окончание которое не  влезает в 32 символа будет различаться, то сможет ли система определить нужный девайс?

Так для этого наверное второй параметр и нужен? В нем-то огрвничений нет.


dmk   (2004-09-26 14:41:00) [3]

>Формально здесь ограничений по длине для второго нет.
Так я про второй параметр и не говорю.
Структура DevMode тоже должна быть правильно заполнена.

Во! Нашел!!!!! =)
Оказывается я неправильно заполнял массив имени.
Нужно просто взять первые 32 символа имени и скопировать их
в dmDeviceName,а 32 символ не заполнять нулем, как делал я.
Тогда все работает.
Только вот странно, если в системе будет 2 принтера
с таким длинным и одинаковым именем, а окончание которое не влезает в 32 символа будет различаться, то сможет ли система определить нужный девайс?


dmk   (2004-09-26 14:29:00) [4]

Первый и третий параметры совсем не обязательны.

>Ограничения CCHDEVICENAME только в возвращаемой структуре DEVMODE
Вот я про что и говорю! Если в DevMode имя принтера задано не полностью, то контекст не создается =(


PGM_X   (2004-09-25 23:26:00) [5]

MSDN
lpszDriver
[in] Pointer to a null-terminated character string that specifies the name of the device driver (for example, Epson).
lpszDevice
[in] Pointer to a null-terminated character string that specifies the name of the specific output device being used, as shown by the Print Manager (for example, Epson FX-80). It is not the printer model name. The lpszDevice parameter must be used.

Может надо указывать первый параметр тоже? Формально здесь ограничений по длине для второго нет. Ограничения CCHDEVICENAME только в возвращаемой структуре DEVMODE. Полагаю dmSize в ней правильно инициализировано :-).


Наверх

Титульная страница Поиск, карта сайта Написать письмо