|
Как из-под Visual FoxPro установить конкретный принтер в отчете сформированным в EXEL?
|
|||
---|---|---|---|
#18+
Есть программа на Visual FoxPro, она формирует отчет в EXEL. Для "Особо одаренных" нужно установить конкретный принтер в самом EXEL-е. Как передать имя принтера самому EXEL-ю? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2010, 17:08 |
|
Как из-под Visual FoxPro установить конкретный принтер в отчете сформированным в EXEL?
|
|||
---|---|---|---|
#18+
Application.ActivePrinter = "FinePrint (FPR5:)" ... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2010, 21:54 |
|
Как из-под Visual FoxPro установить конкретный принтер в отчете сформированным в EXEL?
|
|||
---|---|---|---|
#18+
Старнно! Не работает. Пишет ошибку "Несовпадение типа оператора и операнда". Может это проблема 2010 офиса? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.11.2010, 09:00 |
|
Как из-под Visual FoxPro установить конкретный принтер в отчете сформированным в EXEL?
|
|||
---|---|---|---|
#18+
Разобрался! Каждый принтер имеет порт - Гордое Имя Принтера (NeXX:) где XX - двузначный индекс этого принтера в списке. Но вот вопрос, как теперь определить этот индех? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.11.2010, 12:24 |
|
Как из-под Visual FoxPro установить конкретный принтер в отчете сформированным в EXEL?
|
|||
---|---|---|---|
#18+
Подключи из-под Excel, включив запись макроса, и посмотри там. Но учти, что если это USB-принтер, индекс может меняться. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.11.2010, 12:44 |
|
Как из-под Visual FoxPro установить конкретный принтер в отчете сформированным в EXEL?
|
|||
---|---|---|---|
#18+
Это решение не под конкретного пользователя, а мне нужно решить это из под Visual FoxPro глобально и независимо от установленных принтеров. Как в Visual получить перечень всех принтеров понятно, но как получить их индексы, вот проблема. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.11.2010, 13:02 |
|
Как из-под Visual FoxPro установить конкретный принтер в отчете сформированным в EXEL?
|
|||
---|---|---|---|
#18+
Клепиков ВиталийЭто решение не под конкретного пользователя, а мне нужно решить это из под Visual FoxPro глобально и независимо от установленных принтеров. Как в Visual получить перечень всех принтеров понятно, но как получить их индексы, вот проблема. Может поробовать ветку реестра считывать? Тогда вопрос следующий, как прочитать реестр? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.11.2010, 13:16 |
|
Как из-под Visual FoxPro установить конкретный принтер в отчете сформированным в EXEL?
|
|||
---|---|---|---|
#18+
Помогите пожалуйста кодом прочитать в ветке реестра: HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\PrinterPorts\ значения индекса порта для любого из принтеров, в зависимости от ваших личных настроек ... |
|||
:
Нравится:
Не нравится:
|
|||
08.11.2010, 14:29 |
|
Как из-под Visual FoxPro установить конкретный принтер в отчете сформированным в EXEL?
|
|||
---|---|---|---|
#18+
Пример чтения из реестра есть в решениях в самом Foxpro. В корне Foxpro Samles\Solutions.app. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.11.2010, 17:27 |
|
Как из-под Visual FoxPro установить конкретный принтер в отчете сформированным в EXEL?
|
|||
---|---|---|---|
#18+
Я уже там смотрел. Что-то не могу дойти своим умом. Пробую так 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) Но что-то не хватает. Помогите доработать пожалуйста. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.11.2010, 17:47 |
|
Как из-под Visual FoxPro установить конкретный принтер в отчете сформированным в EXEL?
|
|||
---|---|---|---|
#18+
Клепиков Виталий, Спасибо всем кто отозвался, все сделал сам. Вот выкладываю свое решение: 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 - файле. Вот в принципе все. Зарание прошу извинения, если вы увидели в этом массу недоработок, но ошибок в коде нет и все работает. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2010, 13:12 |
|
|
start [/forum/topic.php?fid=41&fpage=86&tid=1584820]: |
0ms |
get settings: |
7ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
32ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
2ms |
others: | 279ms |
total: | 409ms |
0 / 0 |