Использование CommonDialog без .OCX – проблема с методом ShowPrinter - VB

Узнай цену своей работы

Формулировка задачи:

Требуется помощь профессионалов!
В своем проекте

viewer

появилась необходимость использовать CommonDialog для стандартных операций (ShowFont, ShowPrinter и т.д.). Чтобы не таскать за приложением OCX, решил воспользоваться кодами, работающими с comdlg32.dll напрямую...
здесь и здесь.
Все нужные мне методы из этих примеров работают без видимых глюков, кроме метода ShowPrinter.
Суть проблемы в следующем:
При вызове метода ShowPrinter, сначала выполняется инициализация отображения формы диалога печати, выставляются нужные флаги и т.д.
Затем вызывается сама форма .
Пользователь производит настройки печати и выбирает принтер, например,
, нажимает «Ок».
Далее в процедуре происходит получение структуры (DM) выбранного принтера и его настроек из памяти через
- вот именно здесь происходит глюк. Заключается он в том, что CopyMemory копирует в ячейку ...
только символов, то есть – вместо «» получаем - «». При этом значение константы CCHDEVICENAME не играет НИКАКОЙ роли!
Из-за этого далее по контексту кода естественно не выполняется условие:
и объект остается Default. :(
Подобная проблема безуспешно решалась на других форумах...
и на этом, в том числе...
А так же, что самое удивительное, на официальном сайте Microsoft...
где уже описан, как байтовый массив
все так же значение CCHDEVICENAME роли не играет.
Все эти примеры возвращают одни и те же обрезанные длинные имена принтеров.
Может быть кто-нибудь из ГУРУ сможет объяснить что это за хрень?! И как с ней бороться?
Прилагаю фрагмент проекта только с самим ShowPrinter, все лишнее убрал.

Решение задачи: «Использование CommonDialog без .OCX – проблема с методом ShowPrinter»

textual
Листинг программы
CopyMemory DN, <font color="blue">ByVal</font> lpDevName, Len(DN)
       <font color="blue">Dim</font> Buf() <font color="blue">As</font> <font color="blue">String</font>
       Buf = Split(DN.extra, vbNullChar)
       MsgBox <font color="blue">Mid</font>(Buf(<font color="darkblue"><b>1</b></font>), <font color="darkblue"><b>2</b></font>)

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.6 из 5
Похожие ответы