Форум » [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

Ответов - 59, стр: 1 2 3 All

Dima: Кстати в сырцах Harbour глянь \core-master\extras\ps32\

Sergy: gfilatov2002 пишет: Ваши комментарии приветствуются Добрый день. Разрешите неск. вопросов: 1) Взял бету с pagescript32.com, погонял тестовый пример - обратил внимание, что после закрытия Print Preview теряется фокус основного окна программы. Приходится возвращаться щелчком мыши или ALT+TAB. Это только у меня? Windows 7 x64. Можно вылечить? 2) Окно Print Preview можно как-то вызывать БЕЗ диалога выбора принтера? Долго искал, как посмотреть результат, не тратя бумагу, сохранял/переоткрывал pdf, пока не понял, что окно выбора принтера выскакивает, но вместо печати за ним идет просмотр... 3) На форуме _https://groups.google.com/forum/#!topic/harbour-users/gnUs9XMBygg некто Richard Visscher утверждает, что PageScript32 будет бесплатным для зарегистрированных пользователей. Что-то изменилось в ценовой политике с августа? Если нет - какие ждать цены, есть информация по предыдущим версиям ? Спасибо.

Dima: Тоже интересно


gfilatov2002: Sergy пишет: после закрытия Print Preview теряется фокус основного окна программы По-видимому, это проблемы взаимодействия с консолью. Для GUI-приложений такой проблемы нет. Sergy пишет: вызывать БЕЗ диалога выбора принтера? Нет, вызов этого диалога намертво зашит в pagescript DLL Sergy пишет: Richard Visscher утверждает Это новый собственник и разработчик PageScript32 Как он и обещал, он раздает первую публичную бетку DLL версии 3.4.0.105 бесплатно (как рождественский подарок ) Последующие версии, вероятнее всего, будут платными

Dima: Sergy пишет: обратил внимание, что после закрытия Print Preview теряется фокус основного окна программы чеканул с последней версией с сайта abeelabs , с фокусом все нормально

Sergy: С некоторыми вопросами немного разобрался: + Если использовать gtwvg - с фокусом окна Preview все ок. Гуд + Посмотрел внимательнее - Preview вызывается без диалога принтера. Ничего там не "зашито". ? Сколько все-таки стоил PageScript в "свое время" и как лицензировался: по разработчику или по рабочим местам ? Возник следующий: Как-то уже "привык", что сначала я формирую какой-то отчет, а потом предлагаю юзеру - куда его вывести: на экран/принтер/в файл. Без разницы, что это: простой текст, XLS, PDF, DOC. PageScript заставляет указать устройство вывода заранее - ДО СОЗДАНИЯ самого тела документа. Логически я это понимаю: у разных устройств может быть разное разрешение, разные рабочие шрифты, соотв. документ МОЖЕТ выглядеть по-иному. Кто как решал данный вопрос? Пока что приходит в голову: вместо "прямых" вызовов PSSetFontSize(), PSLine(), PSFrame() и тп... накапливать их некий массив блоков кода, например так: вместо PSSetFontSize(5) => AADD(aQueue, {||PSSetFontSize(5)}) вместо PSLine(x1,y1,x2,y2) => AADD(aQueue, {||PSLine(x1,y1,x2,y2)}) и тп... после чего = запросить юзера, чего он хочет и "циклом по массиву" выполнить все вызовы. Но в этой идее не будут "работать" переменные - нужно заменить их конкретным значением в момент помещения в очередь... Коряво как-то... И непонятно, как тогда обрабатывать необходимые значения некоторых функций - например, ширину текста в пикселях... Что-бы придумать в такой ситуации? Хочется сохранить привычную логику работы программы, вне зависимости от типа документа.

Dima: Sergy пишет: и как лицензировался по разработчику или по рабочим места Вот что удалось вытащить https://cloud.mail.ru/public/84NB/NTE4TahxH ЗЫ Цена была если мне память не изменяет где то в районе 200 $ (+-50 $)

Dima: Sergy пишет: PageScript заставляет указать устройство вывода заранее - ДО СОЗДАНИЯ самого тела документа Это можно обойти (если я верно понял вопрос) , так как устройство задается в PSBeginDoc , первым параметром. Поэтому можно до формирования тела документа , запросить доступные принтера + туда же в менюху сунуть и устройство (предпросмотра). На вскидку так , выкинь лишнее :) [pre2] #include "pscript.ch" Func Aprints(nm) local aprinters local bppm:=0 local i hb_default(@nm,"Выберите принтер") if Psinit()==0 aprinters:=APSGetPrinter() for i=1 to len(aprinters) aprinters[ i ]:=" "+aprinters[ i ]+" " next if len(aprinters)>1 bppm:=boxmenu(aprinters,; 10,20,11,21,nm,; Psgetdefprinter(),3,"bg+/b,n/gr*,,,w/b*") elseif len(aprinters)==1 bppm:=1 else soob("Не найдено ни одного принтера.....","r/r","gr+/r") endif else soob("PageScript не загружен...........","r/r","gr+/r") endif return bppm ************ Func APSGetPrinter() local ret:={} local nn:=PSGetPrinterCount() local i for i=1 to nn aadd(ret,PSGetPrinterNames(i)) next return ret [/pre2]

Sergy: Dima пишет: Это можно обойти (если я верно понял вопрос) , так как устройство задается в PSBeginDoc , первым параметром. Я не очень понятно объяснил, сорри... До знакомства с PageScript у меня было так: Сначала создается сам документ в виде файла (txt, xls, doc, pdf), а затем вызывается диалог с юзером, где предлагается: "куда его выводить: экран/принтер/файл". Стандартно и единообразно. Обработчик вывода на экран, скажем для txt и xls, разумеется, разные. Вот и сижу чешу репу, как быть: вместе с каждым документом, которые планирую готовить через PageScript придется переделывать логику диалога с юзером: сначала "куда выводить", потом формирование тела и собственно, вывод. А если юзер захочет сначала "на экран", а потом "на принтер" - тогда тело документа будет пересоздаваться дважды. А по ходу создания некоторых отчетов открываются/закрываются таблицы, устанавливаются фильтры/relation и куча прочей мути...

Dima: Sergy пишет: Сначала создается сам документ в виде файла (txt, xls, doc, pdf) У меня иначе , для отчетов (к примеру) , вызывается диалог в котором задаются условия формирования и там же указывается формат отчета (txt, xls, doc, pdf) Надо будет мне доку полистать нового PS32 , может что то есть в этом плане , что тебе нужно.

Sergy: Кстати заметил, что при любой ошибке в программе во время подготовки документа, дело завершается не только стандартным RTE, но и полным крэшем с созданием "hb_out.log", а Windows "пытается найти способ решения проблемы и предлагает обратиться к разработчику"... Половинчатое решение содержится в таком коде: [pre2]* ----------------------- * EXIT PROCEDURE PS32Finish() // PSEndDoc() // RETURN[/pre2]Почему половинчатое? Потому что недокументировано. Фиг с ним, с частично заполненным листом бумаги, вылезающим из принтера после RTE. Странно другое - PSAbort() в данном случае не помогает, программа точно так-же крэшится, как и без EXIT PROCEDURE.

Dima: Сыроват однако новый PS32 или мне так кажется ? У меня с прежним таких бяк не было. Код примерно такой [pre2] if PSInit() == 0 PSSetClipperComp(.t.) PSSetPageSize(DMPAPER_A4) PSBeginDoc(NPrint) PSSetUnit(APS_MILL) ***** какой то код PSEndDoc() else Soob("PageScript не загружен........","r/r","gr+/r") endif [/pre2]

Sergy: Dima пишет: Сыроват однако новый PS32 или мне так кажется ? Мне особо не с чем сравнить, ты сам то работаешь с новой версией или со старой, провернной ? Попробуй туда, где ... какой-то код поставить что то вроде: ... x := "text string" x++ ... Интересно посмотреть, что будет. Да, забыл уточнить: у меня -mt и gtwvg.

Dima: Sergy пишет: со старой, провернной ? с ней старушкой Sergy пишет: Да, забыл уточнить: у меня -mt и gtwvg. и у меня Sergy пишет: x := "text string" x++ Счас пробну :)

Dima: Dima пишет: Счас пробну :) Получил BASE 1086 , неверный аргумент ++

Dima: И далее как ты описал А не бывает такого у меня так как код отлажен.

Sergy: Dima пишет: Получил BASE 1086 , неверный аргумент ++ И далее как ты описал Значит дело не в "новизне" версии. А не бывает такого у меня так как код отлажен. Круто. У кого нет ошибок в коде - пусть кинет в меня камень ? Развивать дальше ты его не собираешься? Уверен на 200% в отсутствии своих ошибок в дальнейшем? Даже если нет ошибок в твоем коде - их нельзя исключать в окружении: драйвер/память/сеть - неужели не глючат никогда ? А под столом кто-нить пнет ногой системник и из него вывалится на соплях державшийся кабель? Не то, чтобы я жути нагоняю, но RTE - это предсказуемый и контролируемый ядром Harbour процесс корректного (по возможности) завершения всех запущенных процессов, закрытия таблиц, устройств и тд и тп... Крэш, аналогичный вызываемому - это пздц с точки зрения сохранности данных и стабильности работы с системой. Возникает в узле внешнего устройства (принтера в данном случае). К чему приведет - никто не знает. Уверен, что нужно всеми средствами избегать подобной ситуации. Не смог найти форума поддержки PageScript32. Такой есть в природе?

Dima: Sergy пишет: Развивать дальше ты его не собираешься? Пока устраивает то что есть. Sergy пишет: Уверен на 200% в отсутствии своих ошибок в дальнейшем? Нет не уверен , но если нахожу (находят) то фиксю.

Dima: Sergy пишет: Не смог найти форума поддержки PageScript32 Можно пробнуть сюда написать support@pagescript32.com Sergy пишет: Крэш, аналогичный вызываемому - это пздц с точки зрения сохранности данных и стабильности работы с системой Ты в этом уверен ? Мне кажется что после RTE Harbour , сама прога нормально завершается (ну типа с закрытием баз и тд и тп) а далее начинает завершаться сама DLL со своими ошибками , она ж вроде на делфи. Как вариант можно обернуть у себя весь код PS32 начиная с PSINIT в Begin Seguence PS Что то мне кажется что FastReport поведет себя так же в случае RTE в консольной Harbour проге.

Andrey: Dima пишет: Что то мне кажется что FastReport поведет себя так же в случае RTE в консольной Harbour проге. Часто при отладке в МиниГуи форма FastReport ведёт себя непредсказуемо (я писал об этом здесь), приходиться снимать задачу через менеджер задач. Базы после этого ни разу не портились. На терминалке, при отладке формы тоже при ошибках вываливалась прога. Поставил простой обработчик ошибок для вывода функций для FastReport [pre2] BEGIN SEQUENCE WITH { |e|break( e ) } RECOVER USING oError END SEQUENCE[/pre2] и всё... проблемы исчезли... Если форму FastReport отладил - то работает как часы, пока никто не жаловался. Единственно FastReport критичен для принтеров Херокс на ХР, у меня такое было на одном пользователе. Там что то с печатью хитро получилось, со всех программ печатает, а с FastReport нет.



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