powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как из-под Visual FoxPro установить конкретный принтер в отчете сформированным в EXEL?
11 сообщений из 11, страница 1 из 1
Как из-под Visual FoxPro установить конкретный принтер в отчете сформированным в EXEL?
    #36939444
Есть программа на Visual FoxPro, она формирует отчет в EXEL. Для "Особо одаренных" нужно установить конкретный принтер в самом EXEL-е. Как передать имя принтера самому EXEL-ю?
...
Рейтинг: 0 / 0
Как из-под Visual FoxPro установить конкретный принтер в отчете сформированным в EXEL?
    #36939693
Кузьмин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Application.ActivePrinter = "FinePrint (FPR5:)"
...
Рейтинг: 0 / 0
Как из-под Visual FoxPro установить конкретный принтер в отчете сформированным в EXEL?
    #36941453
Старнно! Не работает. Пишет ошибку "Несовпадение типа оператора и операнда". Может это проблема 2010 офиса?
...
Рейтинг: 0 / 0
Как из-под Visual FoxPro установить конкретный принтер в отчете сформированным в EXEL?
    #36941888
Разобрался! Каждый принтер имеет порт - Гордое Имя Принтера (NeXX:)

где XX - двузначный индекс этого принтера в списке. Но вот вопрос, как теперь определить этот индех?
...
Рейтинг: 0 / 0
Как из-под Visual FoxPro установить конкретный принтер в отчете сформированным в EXEL?
    #36941973
Подключи из-под Excel, включив запись макроса, и посмотри там. Но учти, что если это USB-принтер, индекс может меняться.
...
Рейтинг: 0 / 0
Как из-под Visual FoxPro установить конкретный принтер в отчете сформированным в EXEL?
    #36942052
Это решение не под конкретного пользователя, а мне нужно решить это из под Visual FoxPro глобально и независимо от установленных принтеров. Как в Visual получить перечень всех принтеров понятно, но как получить их индексы, вот проблема.
...
Рейтинг: 0 / 0
Как из-под Visual FoxPro установить конкретный принтер в отчете сформированным в EXEL?
    #36942108
Клепиков ВиталийЭто решение не под конкретного пользователя, а мне нужно решить это из под Visual FoxPro глобально и независимо от установленных принтеров. Как в Visual получить перечень всех принтеров понятно, но как получить их индексы, вот проблема.

Может поробовать ветку реестра считывать? Тогда вопрос следующий, как прочитать реестр?
...
Рейтинг: 0 / 0
Как из-под Visual FoxPro установить конкретный принтер в отчете сформированным в EXEL?
    #36942398
Помогите пожалуйста кодом прочитать в ветке реестра: HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\PrinterPorts\ значения индекса порта для любого из принтеров, в зависимости от ваших личных настроек
...
Рейтинг: 0 / 0
Как из-под Visual FoxPro установить конкретный принтер в отчете сформированным в EXEL?
    #36943050
Ffffffffffffffff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пример чтения из реестра есть в решениях в самом Foxpro. В корне Foxpro Samles\Solutions.app.
...
Рейтинг: 0 / 0
Как из-под Visual FoxPro установить конкретный принтер в отчете сформированным в EXEL?
    #36943101
Я уже там смотрел. Что-то не могу дойти своим умом. Пробую так

DECLARE INTEGER RegCloseKey IN win32api INTEGER
DECLARE INTEGER RegOpenKey IN Win32API INTEGER, STRING @, INTEGER @
DECLARE INTEGER RegSetValueEx IN Win32API INTEGER, STRING, INTEGER, INTEGER, STRING, INTEGER
DECLARE INTEGER RegQueryValueEx IN Win32API INTEGER, STRING, INTEGER, INTEGER @, STRING @, INTEGER @
DECLARE INTEGER RegEnumValue IN Win32API INTEGER, INTEGER, STRING @, INTEGER @, INTEGER, INTEGER @, STRING @, INTEGER @

LOCAL lnkey, lnres, lpreserv, lpdtype, lpdata, lpdlen, lnzzz
lnkey = 0
lpreserv = 0
lpdtype = 0
lnzzz = 0
lpdata = SPACE(256)
lpdlen = 256

lnres = regopenkey(-2147483647,"Software\Microsoft\Windows NT\CurrentVersion\PrinterPorts\", @lnkey)

IF lnkey<=0
RETURN
ENDIF
lnzzz = RegQueryValueEx(lnkey,'\\URL1\HP LaserJet 5100 PCL 6',lpreserv, @lpdtype, @lpdata, @lpdlen)

regclosekey(lnkey)

Но что-то не хватает. Помогите доработать пожалуйста.
...
Рейтинг: 0 / 0
Как из-под Visual FoxPro установить конкретный принтер в отчете сформированным в EXEL?
    #36944670
Клепиков Виталий,

Спасибо всем кто отозвался, все сделал сам. Вот выкладываю свое решение:

1. При запуске VisualFoxPro exe - шника устанавливаю принтер, имя которого хранится в ini - файле (имя принтера там хранится уже с портом и индексом (\\URL1\HP LASERJET 5100 PCL 6 (Ne05:) (Примеры записи и чтения из ini - файлов не описываю))). Но есть заморочка, не все принтеры устанавливаются с прописанным портом и индексом порта, поэтому я обрезаю порт и индекс, а затем устанавливаю все что осталось

* name_pr - это и есть имя принтера который записан в ini - файле, и вот к примеру его значение (\\URL1\HP LASERJET 5100 PCL 6 (Ne05:))

Local lc_name, ln_len1

ln_len1 = LEN(name_pr) && подсчет количества символов во всем названии
lc_name = 'set printer to name '+'"+SUBSTR(name_pr,1,ln_len1-8)+"' && формирование строки для выполнения установки принтера без имени порта и его индекса

&LC_N && макроподстановка, все принтер сейчас установлен только для VisualFoxPro (для EXCEL чуть ниже)

2. В форме с опциями выбора принтера у меня кнопка для выбора принтера и текстбокс с его названием и кнопка подтверждения установленных опций. Нажимаю на кнопку выбора принтера и на экран выводится форма для выбора принтера (к стати можно сразу и принтер установить если нужно), после выбора храню имя выбранного принтера. После того как все опции заполнены нажимаю на кнопку с подтверждением установленных опций и запускаю PRG-шник в котором ищу в реестре значение порта и его индекса по выбранному принтеру, далее к имени выбранного принтера добавляю имя порта и его индекс, далее сохраняю сведенное имя в ini - файл. Итак по очереди:

* Вызов формы выбора принтера по нажатию на кнопку выбора
Public name_print && переменная хранящая имя принтера

SET PRINTER TO NAME GETPRINTER() && вызов формы выбора принтера

thisform.txt2.Value = SET('print',3) && прописываю в текстбокс имя выбранного принтера для подсветки (SET('print',3) - установленный принтер, SET('print',2) - принтер по умолчанию)

name_print = SET('print',3) && переменной присваиваю значение выбранного принтера

* Далее подтвержнаю опции где нажимаю на кнопку и вызываю свой PRG - ник, где идет чтение реестра с целью поиска порта и его индекса для выбранного принтера

#DEFINE HKEY_CURRENT_USER -2147483647 && Данный раздел является корневым для данных настройки пользователя, вошедшего в систему в настоящий момент. Здесь хранятся папки пользователя, цвета экрана и настройки панели управления. Эти данные называются профилем пользователя.
#DEFINE PRINTER_PORTS_KEY "Software\Microsoft\Windows NT\CurrentVersion\PrinterPorts\" && Ветка где хранится информация о ваших принтерах

LOCAL nHKey,cSubKey,nResult,cbData
LOCAL lpszValue,dwReserved,lpdwType,lpbData,lpcbData && необходимые переменные
* Объявление Win32API
DECLARE Integer RegOpenKey IN Win32API Integer nHKey, String @cSubKey, Integer @nResult
DECLARE Integer RegQueryValueEx IN Win32API Integer nHKey, String lpszValueName, Integer dwReserved,;
Integer @lpdwType, String @lpbData, Integer @lpcbData
DECLARE Integer RegCloseKey IN Win32API Integer nHKey

LOCAL nRegKey, cKey, cNamePr, nSubKey, lpdwReserved && необходимые переменные
* заполнение переменных
nRegKey = HKEY_CURRENT_USER
cKey = PRINTER_PORTS_KEY
cNamePr = name_print && имя нашего принтера
STORE 0 TO lpdwReserved,lpdwType,nSubKey
STORE SPACE(256) TO lpbData
STORE LEN(lpbData) TO lpcbData
*Открываем нашу ветку реестра
RegOpenKey(m.nRegKey,m.cKey,@nSubKey)
*Ищем наш принтер в реестре по нашей ветке
RegQueryValueEx(nSubKey,cNamePr,lpdwType,@lpdwReserved,@lpbData,@lpcbData)

gcValue = SUBSTR(lpbData,10,5) && выдираем наш порт и его индекс из занчения реестра

regclosekey(nSubKey) && закрываем открытую ветку реестра

*возвращаемся назад в кнопку с подтверждением опций. И записываем в переменную полное имя принтера с портом и его индексом. Затем сохраняем полное имя принтера в ini - файл

name_pr = name_print +" ("+gcValue+")"

saveini() && это мой метод хранения данных в ini - файлах

3. Ну а теперь самое главное. Это установить нужный принтер в вашем сгенерированном EXCEL отчете. Для этого добавляете в вашем генераторе отчета вот эту строчку

loexcel.ActivePrinter = name_pr && где loexcel - это ваш excel.application, а name_pr - как я писал выше полное имя принтера с портом и его индесом, который я храню в ini - файле.

Вот в принципе все. Зарание прошу извинения, если вы увидели в этом массу недоработок, но ошибок в коде нет и все работает.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как из-под Visual FoxPro установить конкретный принтер в отчете сформированным в EXEL?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]