Форум » [x]Harbour » Консольная подпрограмма/утилита (gtwin) для [x]Harbour - альтернатива tbrowse » Ответить

Консольная подпрограмма/утилита (gtwin) для [x]Harbour - альтернатива tbrowse

sergey5703: Программа kor2.prg характеризуется простотой использования, встроенным функциональным сервисом и возможностями гибкого использования. К программе прилагается пример использования - система учета (реальная задача). Архив rar с программой

Ответов - 13

sergey5703: 1. Когда kor2.prg компилируется как автономная утилита (с ключом -d__MAIN__) - по "умолчанию" используется терминальная библиотека gtwvt.lib (раньше всегда использовалась gtwin.lib), соответственно два пакетных файла для компиляции с gtwvt.lib - hbmkkor2.bat (для Harbour 2.0.0) и xhmkkor2.bat (для xHarbour 1.2.1), оба пакетных файла запускаются без параметров. Пакетный файл run_kor2.bat - запуск на выполнение kor2.exe, тоже без параметров. 2. Изменения при печати (клавиша F7 в kor2). У меня на компьютере принтера "физически" нет, в Windows XP установлен принтер "Generic / Text Only" для которого указан порт - файл на диске. В старой версии kor2.prg печаталось нормально только при компиляции xHarbour, а Harbour-овский exe-файл пытался все время создать файл с именем "Generic / Text Only.prn" и заканчивался по ошибке (Dos error 3 - Path not found) - вероятно из-за наклонной в имени файла. В связи с этим "родились" изменения в kor2.prg: строки 6212-6231 #ifdef __HARBOUR__ #ifdef __XHARBOUR__ SET PRINTER TO (GETDEFAULTPRINTER()) #else lInFilePrint := .F. IF WIN_PRINTERPORTTONAME("FILE:") == WIN_PRINTERGETDEFAULT() lInFilePrint := .T. ENDIF IF lInFilePrint lOldAsk := ask_pgchng ask_pgchng := .F. cTempFile := gen_temp("PRN") SET PRINTER TO (cTempFile) ELSE SET PRINTER TO ENDIF #endif #else old_file := SET(_SET_PRINTFILE, "", .F.) #endif и строки 6794-6807 #ifdef __HARBOUR__ #ifdef __XHARBOUR__ SET PRINTER TO #else SET PRINTER TO IF lInFilePrint ask_pgchng := lOldAsk WIN_PRINTFILERAW(WIN_PRINTERGETDEFAULT(), cTempFile, "raw printing") FERASE(cTempFile) ENDIF #endif #else SET(_SET_PRINTFILE, old_file, .F.) #endif Получилось может быть коряво, но эффект одинаковый и в xHarbour и в Harbour - программа kor2 "считает" что она печатает на матричный принтер, а Windows запрашивает имя файла и выводит в него текст (вместе с управляющими символами). Файлы в архиве

sergey5703: Программа предназначена для компиляции xHarbour 1.2.1 (в xHarbour 1.0.0 консоль GTWVT просто жуткая - без слез смотреть нельзя, а в Harbour 2.0.0 похоже что еще не все доделали - beta, кое что не работает вообще и по исходникам судя в некоторых местах стоят пустышки-заглушки, имя функции есть - но она ничего не делает). Но в xHarbour 1.2.1 обнаружилась неприятность - по сравнению с версией 1.0.0 что-то изменилось в недрах GET-системы и теперь она не работает так как хотелось бы и как было в предыдущих версиях (и в Клиппере). Файлы в архиве

PSP: sergey5703 пишет: а в Harbour 2.0.0 похоже что еще не все доделали - beta А можно узнать, что именно "не все доделали"? Я не заметил в Harbour gtwvt никаких косяков. И, кстати, 2.0.0 уже давно не beta. Уже финал.


sergey5703: Извольте. В программе (моей) есть такая строка: HB_GTINFO(HB_GTI_WINTITLE, Kor2WinTitle) в xHarbour-e все Ok, а в Harbour 2.0.0 НИЧЕГО НЕ ПРОИСХОДИТ - ноль, заголовок окна каким он был - таким и остался. Загадка?

sergey5703: А даты последних модификаций некоторых файлов из исходников - январь 2010 глда (числа с 5-го по 10-е) - архив harbour-nightly.zip я скачивал 10-го января ночью (у меня ночной интернет).

sergey5703: А с функциями - пустышками (заглушками) я лоханулся - сорри. Я за пустышки принял исходник nortl.lib - специальной библиотеки (наверное для использования harbour.dll).

Zakrzevky: PSP пишет: Извольте. В программе (моей) есть такая строка: HB_GTINFO(HB_GTI_WINTITLE, Kor2WinTitle) Была у меня такая же беда, но я я ее одолел методом тыка. Повставлял в нескольких местах и со второго или третъего заработало. Тут какая-то странная последовательность. После какого-то HB_GTINFO(.... HB_GTINFO(HB_GTI_WINTITLE работает (а может после SETMODE), а после какого- то нет. Полную закономерность не нашел. Но могу выслать кусок кода после которого TITLE точно работает. с 2.0 работаю 5-й день.

sergey5703: Ну тогда я могу предположить, что поскольку в фрагменте gtwvt.c где изменяется wintitle вызывается функция hb_osEncodeCP, то нужно установить code page?! Не угадал?

Zakrzevky: Щас посмотрю.

Zakrzevky: ПРОБА!!!! // терминал REQUEST HB_GT_WIN REQUEST HB_GT_WVT REQUEST HB_GT_WVT_DEFAULT SETMODE(27,80) hb_gtInfo( HB_GTI_CODEPAGE, 255 ) hb_gtInfo( HB_GTI_CLOSABLE, .F.) hb_gtInfo( HB_GTI_RESIZABLE, .F. ) //hb_gtInfo(HB_GTI_FONTNAME, 'Terminal') //hb_gtInfo(HB_GTI_FONTNAME, 'Lucida Console') hb_gtInfo(HB_GTI_FONTSIZE, 26) hb_gtInfo(HB_GTI_WINTITLE, HB_OEMTOANSI( PROGRAM_TITLE ) ) // не работает! hb_gtInfo( HB_GTI_ICONFILE, "adm.ico" ) hb_gtInfo( HB_GTI_SCREENWIDTH, hb_gtInfo( HB_GTI_DESKTOPWIDTH ) ) hb_gtInfo( HB_GTI_SCREENHEIGHT, hb_gtInfo( HB_GTI_DESKTOPHEIGHT ) - 50 ) SETMODE(25,80) SETCOLOR("12/0") CLEAR SCREEN HB_GTINFO( HB_GTI_WINTITLE, HB_OEMTOANSI( PROGRAM_TITLE ) ) // работает! HB_GTINFO( HB_GTI_SCREENWIDTH, HB_GTINFO( HB_GTI_DESKTOPWIDTH ) ) HB_GTINFO( HB_GTI_SCREENHEIGHT, HB_GTINFO( HB_GTI_DESKTOPHEIGHT ) - 50 ) есть еще другие наборы. Но с дуру заставить работать можно. Сейчас конкретно разбираться не буду. Исследования, тем более исходников, а потом. Сечас по нашему будет "новый старый год", или ...на оборот.

sergey5703: Выяснил - от чего зависит, работает или не работает HB_GTI_WINTITLE, от CLEAR SCREEN! Каково? Эффект - фантастический, весь рабочий стол перекособочило от моей функции SETMAXIMIZE (это для нее вообще-то нужно было HB_GTI_WINTITLE, я по заголовку ищу окно функцией FindWindow, определяю HWND и максимизирую окно). В общем - это надо ВИДЕТЬ, рекомендую всем сторонникам hb20. В общем непонятки непонятные с Harbour-ом 2.0.

PSP: HB_GTI_WINTITLE нормально работает.

sergey5703: Не знаю, здесь могут играть роль факторы операционной среды или настройки кодовой страницы, ведь толком негде даже какой нибудь хелп почитать про все эти возможности терминальной системы. Сейчас и у меня HB_GTI_WINTITLE нормально работает (после CLEAR SCREEN). Кстати, зря я критикую hb20, в нем GET-ы в kor2.prg нормально работают (в отличие от xHarbour).



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