Форум » [x]Harbour » PAGESCRIPT 32 FOR (X)HARBOUR » Ответить

PAGESCRIPT 32 FOR (X)HARBOUR

Dima: Пытаюсь прикрутить PageScript 32 к проге на Harbour и облом. К проге на Xharbour прикрутил нормально (работает) Есть в TPSCRIPT.PRG (поставляется вместе с библой) [pre2] #include "PScript.ch" #include "FileIO.ch" #ifdef __XHARBOUR__ // 02.06.2005 - IBTC - changed for xHarbour Builder: #xtranslate Method <Classname>:<x> => Method <x> #define DLL_STDCALL NIL #include "hbclass.ch" #else #include "Xbp.ch" #include "Dll.ch" #endif [/pre2] Harbour естественно не находит Xbp.ch , Dll.ch , не пойму что делать. [pre2] =============================================== PAGESCRIPT 32 FOR (X)HARBOUR =============================================== This file contains important supplementary and late-breaking information that may not appear in the main product documentation. We recommend that you read this file in its entirety. In order to use PageScript 32 with (x)Harbour, you'll need to distribute PSCRIPT.DLL with your programs. We recommand that PSCRIPT.DLL be copied in the application's folder in order to avoid DLL versions conflicts. Three files needs to be included in your (x)Harbour projects : 1 - DLLCALL.C 2 - TPSCRIPT.PRG 3 - PSCRIPT.CH DLLCALL.C gives PageScript a way to call DLL functions in the same way as Xbase++ does. This interface is contributed by Paul Tucker, Ontario, Canada. Many thanks to him for this great contribution. TPSCRIPT.PRG contains all the PageScript 32 functions and one class, named TPageScript. You may either choose to call PS functions or instantiate TPageScript and use its methods. When you use functions, calling PSInit() automaticaly instanciates a Static TPageScript object. PSCRIPT.CH contains constants used by PageScript 32. [/pre2] Что то не пойму она будет вообще с Hаrbour работать http://www.abeelabs.com/pagescript32/index.php у меня версия 1.3.4.0

Ответов - 82, стр: 1 2 3 4 5 All

Sergy: Да, работаю на версии 4.119 Работает стабильно, но по необъяснимым причинам иногда на одном-двух рабочих местах возникает GPF с кодом ошибки 6005 - DLL модуль вываливается при вызове BeginDoc(). Как понимаю, какая-то беда с драйвером принтера на конкретной машине. Была, к примеру, такая фигня на вроде-бы "спокойной" машине после замены на ней принтера (вместе с драйверами, разумеется). Переписывался с автором - он не может ничем помочь, тк хочет самодостаточный пример... Пока заставил админа пройти по всем проблемным машинам и обновить драйвера. С прежних 1-2 ошибок в неделю число GPF уменьшилось до 1-2 в месяц. Не по фэн-шую, конечно, но пока других вариантов нет.

Dima: Sergy пишет: Работает стабильно, но по необъяснимым причинам иногда на одном-двух рабочих местах возникает GPF У меня тоже бывает , одна из причин не хватка свободного места на системном диске + принтер HP , после чистки ошибка сразу уходит.

Sergy: Dima пишет: У меня тоже бывает , одна из причин не хватка свободного места на системном диске + принтер HP , после чистки ошибка сразу уходит. Нужно будет у меня посмотреть, что с этим параметром... Еще заметил, что фигня происходит на RDP, когда юзеры подключаются со "своими" принтерами. Сказал админу, чтобы всем RDP-юзерам настроил по умолчанию MS XPS Writer. Кол-во GPF значительно уменьшилось.


Dima: Sergy А как ты регулируешь поля при печати ? В основном у меня печать на всех принтерах идет нормально а вот на Hp1020 , съедает то левую сторону документа то правую

Sergy: Dima пишет: А как ты регулируешь поля при печати ? Пока работал с HPDF - проблем не было вообще: задал размер документа 297*210 и не паришься ни о чем. 95% PDF-viewer'ов по умолчанию масштабируют итоговое изображение на конкретный принтер. А вот вместе с PageScript32 я "пооооонял", что физический размер бумаги и область печати - это вообще совершенно разные значения. Сначала, как вариант, думал прочитать размер области печати из свойств принтера и внутри "своего" класса включить автомасштаб... Потом решил, что проще сразу ограничить ширину документа по узкой стороне на 199мм. Этого хватило на весь наш зоопарк. Заодно вопрос с оставшимися 5% PDF-viewer'ов закрылся сам собой.

Dima: Sergy Вопрос такой по PS32... Номер принтера я сразу указываю в PSBeginDoc() У себя проверял дома (все принтера локальные) , при смене принтера в программе печать идет именно на него. А вот на оффисе не понятки , там есть сетевые принтера и после выбора одного из них , печать почему то уходит на Microsoft XPS Document Writer (как правило) . В новом PS32 есть такая проблема ?

Dima: PS Тесты показали что глючит исключительно на Windows XP

Sergy: Dima, с того момента, как я узнал про win_PrinterList() - я перестал обращаться к принтерам по номерам. Совсем. Ибо давным-давно наступил на те самые грабли, о которых ты пишешь. Про PageScript я тогда даже и не слышал. Задаю принтер только по его имени. В одном из офисов, например, их целый зоопарк: один настольный (расшаренный), два сетевых. 5 компов. Проблем с переключением вообще никаких. Все печатают откуда угодно на какой угодно принтер.

Dima: Sergy Интересно а как ты задаешь его по имени в PS32 , если везде где он задается используется именно номер принтера.

Sergy: В настройках каждой рабочей копии программы сохраняю именно имя принтера, а не цифру. 1) При запуске печати по заданному имени проверяю - присутствует ли он в win_PrinterList() и является ли принтером по умолчанию - win_PrinterGetDefault(). 2) Если нет - переставляю перед началом печати документа через win_PrinterSetDefault(). 3) В PSBeginDoc() первым параметром всегда передаю NIL (печатать на дефолтный). 4) После печати - возвращаю дефолтный принтер "назад" (если было его изменение). bullet-proof

Dima: Sergy Хитро ты выкрутился

Dima: Sergy А в проге у тебя какая кодировка , 866 ? Ведь все эти функции WIN_Printer* результат возвращают в кодировке 1251 , и если не сделать перекодировку то принтера имеющие в названиях кирилицу , вместо кирилицы покажут вопросики. С win_PrinterList() и win_PrinterGetDefault() я так и поступил. Примерно так [pre2] Func My_WIN_PRINTERLIST() local alist:={} local i hb_cdpSelect( "RU1251" ) alist:=WIN_PRINTERLIST() if len(alist)#0 for i=1 to len(alist) alist[ i ]:=hb_ansitooem(alist[ i ]) next endif hb_cdpSelect( "RU866" ) return alist [/pre2] Вопрос такой , в win_PrinterSetDefault() тоже имя передавать в RU1251 c временной сменой кодировки ? Я конечно поиграюсь и выясню , просто если готовый ответ я сэкономлю некоторое время а его не так много при средней продолжительности жизни Проехали по вопросу , поиграл , выяснил.

Dima: Sergy Кстати твой фокус не сработал под Win7 + PS32 от AbbeLabs , упорно печатает на принтер по умолчанию который был при запуске программы , под XP возможно и сработает , проверить не где. Sergy пишет: 3) В PSBeginDoc() первым параметром всегда передаю NIL (печатать на дефолтный). Так и делал в тестах. Еще и проверил меняется ли принтер по умолчанию (если его менять с win_PrinterSetDefault) - да меняется , но печатает на тот что я описал выше.

Sergy: Dima Кодировка программы 866, во всех вызовах к API винды/офиса/принтеров использую hb_Translate(cString,"RU866","RU1251"). Получается, что "старый" PageScript32 где-то у себя "запоминает" при инициализации дефолтный принтер и печатает на него.

Dima: Что то глючит PSINIT на Вин10 [pre2] Called from DLLCALL(0) Called from TPAGESCRIPT:INIT(266) in TPSCRIPT.PRG [/pre2] При чем первый раз может упасть а потом все работает ровно. Куда копать ? PS На винде ниже 10 все работает ровно [pre2] METHOD TPageScript:Init() ::bWaterMark := NIL // Codeblock for Watermark function ::nWaterMark := AWM_NONE // Indicates if the WaterMark is to be printed foreground or background ::lFromDialog := .f. // Indicates if printer selected from printer dialog ::lClipper := .f. // Indicates if calls to TextOut and TextBox should be compatible with PageScript for Clipper ::nUnit := APS_MILL // Default unit is MILLIMETERS ::aPrinters := {} // List of available printers ::nError := PSE_NOERROR // Indicates an error condition, such as no printer available ::aDocInfo := {0, "", "", APS_PORTRAIT, 1, APS_COURIER} // Print job info array ::hDll := DllLoad("PScript.dll") // Handle of the .DLL if ::hDll == nil//0 ::nError := PSE_DLLNOTLOADED // DLL not loaded error else ::nError := DllCall(::hDll, DLL_STDCALL, "PSInit") вот тут падает // No error, set the coordinate system to TOP/LEFT (Default) if ::nError == PSE_NOERROR DllCall(::hDll, DLL_STDCALL, "PSSetCoorSystem", APS_TOPLEFT) endif endif Return Self [/pre2] В логах ошибок вот такая срань Неисправимая ошибка  6005: Exception error: Exception Code:0EEDFADE Exception Address:74F7AB32 EAX:009FF010 EBX:00D03E40 ECX:00000007 EDX:00000000 ESI:00000000 EDI:00D03C20 EBP:009FF06C CS:EIP:0023:74F7AB32 SS:ESP:002B:009FF010 DS:002B ES:002B FS:0053 GS:002B Flags:00000212 Exception Parameters: 00CC04F2 00D03E74 00D03E40 00000000 00D03C20 009FF134 009FF0A0 CS:EIP: 8B 4C 24 54 33 CC E8 A3 49 00 00 8B E5 5D C2 10 SS:ESP: 0EEDFADE 00000001 00000000 74F7AB32 00000007 00CC04F2 00D03E74 00D03E40 00000000 00D03C20 009FF134 009FF0A0 00D03E70 00CC1704 00000000 00000000

MIKHAIL: Dima пишет: ::nError := DllCall(::hDll, DLL_STDCALL, "PSInit") вот тут падает Я с PS не работал, но имел похожую ошибку при работе с DllCall, когда в функцию передаются еще какие либо параметры и их размер менее требуемого в вызываемой функции. Глянь доку, может функция принимает какие либо параметры... передай пустые значения для строковых space(50) например

Sergy: PageScript32 падает у меня с вероятностью 1:100 - под Win7 и Win10. Причем не RTE, а качественный крэш с hb_out.log. Либо в PSIniit, либо рядом - PSSetOrientation. Если на одной машине два раза за одну неделю такая петрушка - прошу админа переустановить дрова принтера. Помогает. Писал разработчику - он говорит, что такого ни у кого не бывает. А если и будет, по дампу памяти и hb_out.log он помочь не в состоянии - нужна воспроизводимость ошибки. :(

Dima: Sergy пишет: Причем не RTE, а качественный крэш с hb_out.log. Аналогично а само окно программы просто тихо схлопывается

Dima: [pre2] 31-12-2021 - Next update will get the following new functions: - PDF signing for new and existing PDF files - PDF printing from code and new preview window - New preview window which can be used seperate or used non-modal from PS Check this page next month for the beta version, happy new year ! [/pre2]

fil: Не понял, а почему этот xbp.ch не скачать https://searchcode.com/codesearch/view/4517222/



полная версия страницы