Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Использование CommonDialog без .OCX – проблема с методом ShowPrinter
|
|||
|---|---|---|---|
|
#18+
Требуется помощь профессионалов! В своем проекте viewer появилась необходимость использовать CommonDialog для стандартных операций (ShowFont, ShowPrinter и т.д.). Чтобы не таскать за приложением OCX, решил воспользоваться кодами, работающими с comdlg32.dll напрямую... здесь и здесь . Все нужные мне методы из этих примеров работают без видимых глюков, кроме метода ShowPrinter. Суть проблемы в следующем: При вызове метода ShowPrinter, сначала выполняется инициализация отображения формы диалога печати, выставляются нужные флаги и т.д. Затем вызывается сама форма RetValue = PrintDlg(PD). Пользователь производит настройки печати и выбирает принтер, например, Microsoft Office Document Image Writer, нажимает «Ок». Далее в процедуре происходит получение структуры DEVMODE (DM) выбранного принтера и его настроек из памяти через CopyMemory DM, ByVal lpDevMode, Len(DM) - вот именно здесь происходит глюк. Заключается он в том, что CopyMemory копирует в ячейку dmDeviceName... Код: plaintext 1. 2. 3. 4. Из-за этого далее по контексту кода естественно не выполняется условие: Код: plaintext 1. 2. 3. 4. 5. 6. 7. Подобная проблема безуспешно решалась на других форумах ... и на этом , в том числе... А так же, что самое удивительное, на официальном сайте Microsoft ... где dmDeviceName уже описан, как байтовый массив Код: plaintext Все эти примеры возвращают одни и те же обрезанные длинные имена принтеров. Может быть кто-нибудь из ГУРУ сможет объяснить что это за хрень?! И как с ней бороться? Прилагаю фрагмент проекта только с самим ShowPrinter, все лишнее убрал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2010, 13:18 |
|
||
|
Использование CommonDialog без .OCX – проблема с методом ShowPrinter
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2010, 13:51 |
|
||
|
Использование CommonDialog без .OCX – проблема с методом ShowPrinter
|
|||
|---|---|---|---|
|
#18+
В данном случае следует анализировать не DEVMODE а DEVNAMES: Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2010, 16:10 |
|
||
|
Использование CommonDialog без .OCX – проблема с методом ShowPrinter
|
|||
|---|---|---|---|
|
#18+
awl100AlexМожет быть кто-нибудь из ГУРУ сможет объяснить что это за хрень?! В MSDN четко написано: Note that this name may be truncated to fit in the dmDeviceName array. CCHDEVICENAME информационная константа, она сообщает разработчику, сколько символов возвращает поле, а не указывает функции, что делать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2010, 16:46 |
|
||
|
Использование CommonDialog без .OCX – проблема с методом ShowPrinter
|
|||
|---|---|---|---|
|
#18+
awl100Alex, В дополнение к сказанному Antonariy-ем, в том же MSDN ситуация описана и дана рекомендация , см. Remarks. В переводе на ваш (неаккуратно порезанный) код: извлекайте информацию из DN, а не DM. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2010, 16:54 |
|
||
|
Использование CommonDialog без .OCX – проблема с методом ShowPrinter
|
|||
|---|---|---|---|
|
#18+
Спасибо всем за помощь! Отдельная благодарность SoftParanoik за конкретную помощь! Теперь все работает, как надо. Выкладываю исправленный код с поправкой от SoftParanoik , для всех, кто столкнется с подобной проблемой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2010, 20:02 |
|
||
|
|

start [/forum/search_topic.php?author=anatolean&author_mode=last_topics&do_search=1]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
40ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
| others: | 708ms |
| total: | 869ms |

| 0 / 0 |
