Форум » [x]Harbour » Как структурируется программа? » Ответить

Как структурируется программа?

evgeny2006: Коллеги! Нужна Ваша помощь в объяснении структуры программы. Уточню вопрос. Как известно большинство программ отлаживается небольшими кусочками, которые затем необходимо объединить. Простой способ - это скопировать и вставить. Поскольку я занимался фокспро более 5-ти лет назад, а Клиппером - лет 20 назад, то естественно возникли проблемы. Например, не рекомендуется изпользовать set procrdure to. Предлагается использовать #include. А почитать - негде. Кроме того все примеры ориентированы на создание одностраничного документа, а там - где многостраничный - такого наворочено, что без поллитра не разберешься. Кроме того , очень капризные команды browse , Edit. У меня файл был в формате sqlite3. Я перевел его в dbf. но упомянутые команды стоят насмерть и выдают ошибки. Это я так - наболело! За всю свою жизнь я не встретил ни одной бесплатной системы, с которой можно было бы работать нормально. Вопрос: Как все же использовать #include. чтобы не перекопировать программы и какова должна быть структура программы? Заранее признателен!

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

azoo: #Include "XXX.prg" используй в конце главного модуля. Т.е. последними строчками главного модуля будет например группа: #include "F1.prg" #include "F2.prg" ........ #include "Fn.prg"

evgeny2006: azoo пишет: #Include "XXX.prg" используй в конце главного модуля. Спасибо! А как вывести на форму текст в русской транскрипции (по-просту по-русски). Если я компилирую программу через hmg_IDE, то все получается нормально. А если компилирую .bat файлом - то кракозябры. Вот .bat файл call C:\MiniGUI\batch\compile.bat demo %1 %2 %3 %4 %5 %6 %7 %8 %9

Haz: evgeny2006 пишет: Как все же использовать #include. чтобы не перекопировать программы Лучше использовать редактор с поддержкой проектной организации разрабатываемой программы, к примеру бесплатные Notepad++ или xEdit3. xEdit - бесплатный кусок от коммерческого Xailer и заточен под Harbour. Разбиваешь программу на модули ( .prg ) по любому признаку - функциональному, смысловому и пр. т.е. как угодно. Объединяешь модули в один проект и никаких инклюдов. При сборке проекта компилируются только измененные модули и если их размер не очень большой, то сборка идет очень быстро. В текущем проекте у меня более 120 модулей и 1,5 МБ исходного кода, в отлаживаемом модуле 700 строк время сборки проекта на стареньком компе 12 секунд


Haz: Haz пишет: Если я компилирую программу через hmg_IDE это уже лучше в ветке GUI обсудить, и лучше взглянуть demo.prg

evgeny2006: Haz пишет: это уже лучше в ветке GUI обсудить, и лучше взглянуть demo.prg Да я и отлаживаю demo, заменив латиницу на русский шрифт. Вероятно есть какие-то настройки, до которых я еще не смог добраться. За ответы - щчень для меня полезные - СПАСИБО!

evgeny2006: Haz пишет: xEdit - бесплатный кусок от коммерческого Xailer и заточен под Harbour Скачал версию 3.2, но настроить ее никак не могу. То не сохраняет установленные директории, то отсутствует возможность установить среду. Это так называемое бесплатное ПО. Предполагаю, что это делается умышленно! Конечно, можно вручную отредактировать файл конфигурации. Но возникает вопрос, не выкинут ли авторы что-нибудь по-круче в процессе разработки. Ксати посмотрел доступ к БД, попробовал модифицировать таблицу. Внешне все ОК, но сохранять отказывается. Вы какой версией пользуетесь?

azoo: Тоже скачал xEdit. Внешне xEdit выглядит солидно. Похож на старый Delphi. Работать с Harbour через IDE наверное удобнее. Может есть какой пошаговый хелп для первичной настройки? Я так понимаю он должен знать где находится компилятор, библиотеки и т.д.

Haz: evgeny2006 пишет: Вы какой версией пользуетесь? пользуюсь версией 3.2 все настраивается нормально и работает , включая работу с БД. Из глюков замечено следующее 1 окно отладчика вылезает когда не надо ( лечится один раз убиранием его мышью за границы экрана ) 2 иногда вылетает при активной работе с букмарками в целом полностью устраивает как бесплатное ПО. azoo пишет: Может есть какой пошаговый хелп для первичной настройки? хелп есть сайте и форумах разработчика , для Xailer ( Xedit - его компонент ) если коротко 1.Tools -> Programming enviroment -> [ + ] - добавить название среды и заполняем вкладки ( xBase compiler, C compiler, Resource compiler , Linker). 2 создаем новый проект Project-> project properties - заполняем Main и Libraries ( в Main выбираем имя Enviroment из п1) 3 добавляем в проект нужные PRG и работаем

azoo: Haz, в xEdit кодировка только Windows? Похоже что 866 кодировка не поддерживается. Русские буквы некорректно отображаются. Есть повод всё перевести на Windows-кодировку.

Haz: azoo пишет: кодировка только Windows проверь каким шрифтом рисует , если в OEM нужно - поменяй на Terminal Tools->Editor option->Syntax

evgeny2006: Haz пишет: хелп есть сайте и форумах разработчика , для Xailer ( Xedit - его компонент ) если коротко Спасибо за разъяснение!!!

evgeny2006: Haz пишет: проверь каким шрифтом рисует , если в OEM нужно - поменяй на Terminal Мой вопрос касается работы в Windows с выводом результатов нв консоль. Часто требуется проверить какой-либо кусок программы без необходимости вывода результатов в окна. Как организовать такую программу? Как ее компилировать и линковать?

PSP: evgeny2006 пишет: Часто требуется проверить какой-либо кусок программы без необходимости вывода результатов в окна. Функции hb_ANSItoOEM() и hb_OEMtoANSI() подойдут?

evgeny2006: PSP пишет: Функции hb_ANSItoOEM() и hb_OEMtoANSI() подойдут? Видимо есть какая-то специфика работы с Harbour в Windows, которую я не могу ухватить. При работе с окнами - вопросов нет. Я же хочу просто вывести результаты на консоль (экран), т.е. применить команду аналогичную print, использующуюся во многих языках программирования. Вот здесь и облом. Я использую стандартные .bat файлы для компиляции и линкования. Возможно где-то в них необходимо вносить изменения. Попробовал примеры из справочника по функциям - тишина! Если подскажите где почитать, буду весьма признателен. Нужно ли подключать какие-либо библиотеки при использовании функций hb_ANSItoOEM() и hb_OEMtoANSI() Спасибо за ответ!!!

PSP: evgeny2006 пишет: Я же хочу просто вывести результаты на консоль (экран), Может я туплю... ) Самое распространенное для вывода на экран: 1. Команды ? или ?? (http://www.ousob.com/ng/53guide/ngab504.php) 2. Команда @ SAY (http://www.ousob.com/ng/53guide/ngba99e.php) Или вы что-то другое хотите спросить?

evgeny2006: PSP пишет: Или вы что-то другое хотите спросить? Я имел ввиду нечто другое. По Вашему совету я использовал пример, в который добавил пару строк // The example demonstrates the effect of ANSI<->OEM conversion // using a character string where the conversion is not reversible. // The character string contains characters used for line graphics // in DOS. //#include "minigui.ch" //#Include "Fileio.CH" #include "Box.ch" PROCEDURE Main LOCAL cOEM1 := B_SINGLE LOCAL cANSI := HB_OemToAnsi( B_SINGLE ) LOCAL cOEM2 := HB_ANsiToOem( cANSI ) DispBox(10, 10, 20, 20, cOEM1 ) @ Row(), COl() SAY "OEM1" DispBox(10, 30, 20, 40, cANSI ) @ Row(), COl() SAY "ANSI" DispBox(10, 50, 20, 60, cOEM2 ) @ Row(), COl() SAY "OEM2" @ MaxROw()-1, 0 WAIT RETURN Так вот. Если я запускаю этот пример с помощью hbrun.exe, то он нормально отрабатывает. Правда внешний вид на консоли ужасный. Если же я компилирую и линкую программу с помощью .bat файла call C:\MiniGUI\batch\compile.bat test2 %1 %2 %3 %4 %5 %6 %7 %8 %9 то на экран вообще ничего не выводится. Вопрос состоял в том, как запускать такие программы.

Dima: evgeny2006 пишет: call C:\MiniGUI\batch\compile.bat test2 %1 %2 %3 %4 %5 %6 %7 %8 %9 то на экран вообще ничего не выводится. скорее всего дело в том что батник сборки заточен не на консоль а на GUI интерфейс. а собирать удобнее с помощью hbmk2.exe

Haz: Dima пишет: то на экран вообще ничего не выводится. добавьте ключ /c в батник call C:\MiniGUI\batch\compile.bat test2 /С %1 %2 %3 %4 %5 %6 %7 %8 %9 PS в самом батнике написано /C - консольный режим

evgeny2006: Haz пишет: добавьте ключ /c в батник Спасибо большое!!!

evgeny2006: Dima пишет: а собирать удобнее с помощью hbmk2.exe Я пробовал пару раз, что-то не получилось и я на время отложил его использование. Предпочтительно, конечно, использовать hbmk2.exe Спасибо!

evgeny2006: Haz пишет: добавьте ключ /c в батник Наконец-то добрался до реализации Вашего совета. При компиляции получил кучу ошибок: Error: Unresolved external '_HB_FUN_INITMESSAGES' referenced from K:\FAPP\HARBOU R\FILLDIRLIST\DEMO.OBJ Error: Unresolved external '_HB_FUN__DEFINEWINDOW' referenced from K:\FAPP\HARBO UR\FILLDIRLIST\DEMO.OBJ Получается, что при переходе к консольному режиму нужно подключать какие-то библиотеки. Какие?

evgeny2006: Dima пишет: а собирать удобнее с помощью hbmk2.exe Дошли руки наконец и для применения hbmk2. Но тут облом Нигде не сказано, как прописать путь к hbmk2. А если его прописывать, то потребуется прописать еще кучу путей. Попробовал 2 варианта (по аналогии с compile.bat) call C:\MiniGUI\batch\hbmk2.bat и обращаюсь из командной строки: hbmk2 demo 2-ой вариант call C:\MiniGUI\batch\hbmk2.bat demo.prg и запускаю 2-мя кликами Результат одинаков

Dima: посмотри пример BUILD.BAT из Samples

Vlad04: В MiniGUI все и так работает: через bat и hbmake ( есть две кнопочки на панеле). Можно собирать программы с Gui интерфейсом и консольные. Если ориентироваться на Gui , то и заморачиваться не стоит. После установки MiniGUI все сразу работает как надо! Большое спасибо Григорию!

evgeny2006: Vlad04 пишет: После установки MiniGUI все сразу работает как надо! Иногда надо посмотреть выполнение по командам. Как пользоваться DEBUG из IDE просто нпонятно. Использовать DEBUG из HwGUI, пока не получилось. Но когда компилируешь с помощью compile.bat, необходимо прописывать путь доступа, иначе ошибки. В данном случае - просто заело! При использовании hbmk2.exe - приходится прописывать путь доступа. Но этого оказывается мало. Возникают ошибки компиляции, т.к. не может найти "minigui.ch". После изменения переменной среды с указанием, где искать "minigui.ch", - остается та же ошибка. Т.е. по-хорошему надо задавать параметры в самой строке hbmk2. А тогда теряется простота и универсальность. И кому это нужно!

evgeny2006: PSP пишет: Самое распространенное для вывода на экран: В свое время, для отладки программы в ГУИ, я создавал тестовое поле на форме, а затем постоянно обновлял это поле, добавляя последовательно необходимые строки результатов. Т.е. я мог видеть значения интересующих меня переменных. Есть ли что-нибудь подобное в Habour или снова идти старым проверенным путем?

evgeny2006: Dima пишет: посмотри пример BUILD.BAT из Samples Поискал во всех директориях minigui и не нашел. Можно поточнее адрес?

Dima: evgeny2006 тут например C:\MiniGUI\SAMPLES\BASIC\ON_DROPFILES\

Haz: evgeny2006 пишет: Получается, что при переходе к консольному режиму нужно подключать какие-то библиотеки. Какие? нужно убрать вызовы GUI элементов из Вашего исходника определитесь - или GUI или консоль. Вы пытаетесь GUI приложение собрать в консольном режиме отсюда и ошибка. Как вы представляете себе GUI окно в консоли ? в примерах есть смешанный режим MixMode но это И GUI И консоль

evgeny2006: Haz пишет: Как вы представляете себе GUI окно в консоли ? Спасибо за ответ! Я не представляю себе ГУИ в консоли. Как я уже говорил ранее, я работал с Клиппером примерно 25 лет назад, если не больше. Но поработав с ГУИ в Питон, который и создает ГУИ, и одновременно открывает консоль, если требуется, я вероятно оказался в плену собственных иллюзий. Поэтому и задаю глупые вопросы. Т.е. одновременной работы с ГУИ и консолью в Харбор не предусмотрено.

santy: evgeny2006 пишет: Т.е. одновременной работы с ГУИ и консолью в Харбор не предусмотрено. Евгений, Харбор может работать в MixMode. Примеры в minigui или hmg, возможно есть и в других библиотеках.

Haz: evgeny2006 пишет: Поэтому и задаю глупые вопросы. Вопросы не глупые. как же еще все понять и разобраться. Посмотрите пример MixMode, вам и Santy это же советует. С какой целью нужна консоль ? для отладки модуля ? тогда как вариант логику можно отладить в чистой консоли а потом нарисовать на нее GUI морду.

Andrey: evgeny2006 пишет: Но поработав с ГУИ в Питон, который и создает ГУИ, и одновременно открывает консоль, если требуется, я вероятно оказался в плену собственных иллюзий. Зачем нужна консоль, если задачу сразу можно делать в GUI ? Для проверки переменных в GUI есть классная функция - MsgDebug(val1,val2, aDim, ... и тд.) - выводит в окошечке все эти переменные. Логика консоли и ГУИ немного различается. Я пока привык, замучился.... А ГУИ у Григория сразу собирается после установки его пакета ! Огромное спасибо за его труд !!!! Только в переменных среды компа необходимо установить следующие: Minigui.reg -------------------- REGEDIT4 [HKEY_CURRENT_USER\Environment] "MG_BCC"="Z:\\BCC55" "MG_ROOT"="Z:\\MiniGui" "PATH"="Z:\\BCC55\\BIN;Z:\\MiniGui\\Harbour\\BIN;" -------------- конец Minigui.reg Вместо Z: - поставить свои пути.

Dima: Andrey пишет: Логика консоли и ГУИ немного различается Не фига себе не много , ну ты загнул Andrey пишет: А ГУИ у Григория сразу собирается после установки его пакета Не сразу так как нужно поправить путь к компилятору в батнике

Andrey: Dima пишет: Не фига себе не много , ну ты загнул Ну примерно... Я уже многое в ней понял, так что мне легче теперь объяснять чем отличается МиниГУИ от терминалки (консоли). А вообще МиниГуи - классная вещь (когда поймешь), потихоньку перевожу свои проги на неё.... Маленькие программы делаются вообще на раз !

evgeny2006: Коллеги! Спасибо за подробное объяснение! Я просто тронут! Особенно благодарен Santy, Haz, Andrey и Dima. Andrey пишет: Для проверки переменных в GUI есть классная функция - MsgDebug(val1,val2, aDim, ... и тд.) Собственно это мне и надо было. После несправедливого с моей стороны заявления о неработоспособности функции directory(), необходимо было разобраться, как добраться до переменных. Поскольку Harbour продолжает развиваться и наверняка сюда попадут или новички, или люди с устаревшими знаниями, было бы, на мой взгляд, неплохо создать тему, в которой изложить необходимый инструментарий для начала работы. Где можно попробнее почитать (посмотреть) о фукции MSGdebug()?

Andrey: evgeny2006 пишет: Где можно попробнее почитать (посмотреть) о фукции MSGdebug()? Да не надо нигде смотреть. Бери и пользуйся. Или смотри здесь ветку форума Документация, там где то была дока по МиниГуи.

evgeny2006: Andrey пишет: Только в переменных среды компа необходимо установить следующие: Minigui.reg Скажите, пожалуйста, а внести изменения в переменные среды с помощью "панели управления" можно или обязательно требуется внесение изменений в реестр

Andrey: evgeny2006 пишет: Скажите, пожалуйста, а внести изменения в переменные среды с помощью "панели управления" можно или обязательно требуется внесение изменений в реестр На ваше усмотрение. Или вручную или создать файл реестра и добавить его.



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