Форум » GUI » Опять грабли при компиляции/выполнении.... » Ответить

Опять грабли при компиляции/выполнении....

Andrey: Собираю прогу на МиниГуи. С главной формы вызываю окно MODAL (находиться в FormaConfig.frm) Есть файл в котором описаны функции для этой формы Config.prg Для примера кусочек: [more]#include "minigui.ch" #include "mydefines.ch" // Открываем окно "Выбора каталога". Если переменная не пустая, то присваиваем её обьекту. FUNCTION Folder_From() LOCAL cTemp cTemp := GetFolder( "Выберите каталог, откуда копировать файлы...", M->cPathFrom ) IF Len(cTemp) == 0 FormaConfig.Text_1.Value := cTemp // 9 строка ENDIF IF ! SubStr( FormaConfig.Text_1.Value, Len( FormaConfig.Text_1.Value ), 1 ) == "\" // 13 строка FormaConfig.Text_1.Value := FormaConfig.Text_1.Value + "\" // 14 строка ENDIF RETURN Nil [/more] Но при сборке, выдает ошибку: Source\config.prg(9) Error E0030 Syntax error "syntax error at '.'" Source\config.prg(13) Error E0030 Syntax error "syntax error at '.'" Source\config.prg(14) Error E0030 Syntax error "syntax error at '.'" Если поставить SetProperty("FormaConfig", "Text_1", "Value", cTemp) на 9 строке и т.д., то компиляция проходит и все работает... А как сделать чтобы работало с предыдущим синтаксисом ? FormaConfig.Text_1.Value := cTemp // 9 строка

Ответов - 19

AlexMyr: проверить доступны ли ch файлы.

SADSTAR33: задекларируй окно до его использования DECLARE WINDOW <WindowName>

Andrey: AlexMyr пишет: проверить доступны ли ch файлы. Все доступно. Разобрался я. Нужно в файл Config.prg перенести загрузку формы: Load Window FormaConfig FormaConfig.Center ............. До этого у меня загрузка формы стояло в другом prg.


SadStar55: Переносить необязательно. Нужно чтобы компилятор знал об окне и правильно понял синтаксис. Для этого нужно объявить о том что FormaConfig это окно. Для этого в начале модуля до операций с окном написать DECLARE WINDOW FormaConfig

Andrey: SadStar55 пишет: Для этого в начале модуля до операций с окном написать DECLARE WINDOW FormaConfig А в конце модуля, закрывать это окно не надо ?

Andrey: Далаю так: DECLARE WINDOW Form_Main //////////////////////////////////////////////////////////////////////////// FUNCTION PrintCheck() ..... MsgInfo( Form_Main.ComboEx_City.Value + CRLF + Form_Main.ComboEx_Street.Value ) ------------------- или так cStatCity := "г."+ALLTRIM(Form_Main.ComboEx_City.Value) cStatStreet := ALLTRIM(Form_Main.ComboEx_Street.Value ) MsgInfo( cStatCity + CRLF + cStatStreet , PROGRAM) Программа висит !!! После закрытия все равно остается в памяти 2.5 Мб "висящей" (на экране нет) !!! Я понял потом что это числа (а я к строке преобразую), но ошибку не выдает же, а просто вешает программу !!! Как убрать этот глюк ???

Andrey: Вот еще одна ошибка, при которой вешается программа: BASE866->Podezd := IIF(ABONENT->NumPodezd>0,ALLTRIM(STR(ABONENT->NumPPodezd)),"" ) т.е. если такой переменной в базе нет (NumPPodezd) - прога "вешается", а сообщение об ошибке НЕТ !!! Как сделать, чтобы ошибка появлялась ?

gfilatov2002: Andrey пишет: Как убрать этот глюк Просто вместо функции MsgInfo() надо использовать в таком случае функцию MsgDebug() Что-то типа MsgDebug( "г.", Form_Main.ComboEx_City.Value, Form_Main.ComboEx_Street.Value )

Andrey: gfilatov2002 пишет: Что-то типа MsgDebug( Спасибо ! Хорошия функция.... А как быть с ошибками с кодом (написано выше) ? Вот еще одна ошибка, когда программа просто завершается без вывода об ошибке: DO WHILE !EOF() IF !DELETED() IF STREET-KVIEW == 1 // здесь случайно допустил ошибку "->" AAdd( M->aDimStreet, { ALLTRIM(FIELD->STREET) , FIELD->KSTREET } ) AAdd( M->aDimStreetCity, FIELD->KCITY ) ENDIF ENDIF SKIP ENDDO IF STREET-KVIEW == 1 // здесь случайно допустил ошибку вместо "->" поставил "-" Программа на этом месте просто закрывается, как выполненная и все !!! Терминалка бы выдала ошибку, а МиниГуи - НЕТ !!! Версия MiniGUI : 2.2.3 - 2013.06.12 Как быть в таких случаях ???

a_sidorov: Интересно, но разная реакция на ошибку *------------------------------- Procedure SomeError() *------------------------------- Local Var1 As Numeric Local Var2 As String Local a:="1"+1 //программа зависает // ASSIGN Var2 := Var1 + 1 // а если так, то выдается корректный стек ошибок Return

vvv: IF STREET-KVIEW == 1 А здесь нет синтаксической ошибки. Из переменной STREET вычитается переменная KVIEW и сравнивается с 1. Если переменные не определены, то результатом будет .F. То, что под IF-ом, просто пропускается.

Andrey: vvv пишет: Если переменные не определены, то результатом будет .F. Неверно ! Если переменные не определены, то будет ошибка !!! Date: 06/20/13 Time: 18:49:40 Error BASE/1003 Variable does not exist: STREET Called from TEST(34) Called from (b)MAIN(21) Called from _PROCESSINITPROCEDURE(1445) Called from _ACTIVATEWINDOW(1311) Called from DOMETHOD(4645) Called from MAIN(26) Вот самодостаточный пример: /* * MINIGUI - Harbour Win32 GUI library Demo */ #include <minigui.ch> Procedure MAIN Local cTitle := 'Test Sample Error' DEFINE WINDOW Main ; WIDTH 600 ; HEIGHT 400 ; TITLE cTitle ; MAIN ON INIT Test() END WINDOW Main.Center Main.Activate Return ///////////////////////////////////////////////////////////// Function Test() MsgDebug("Start") IF STREET-KVIEW == 1 // здесь случайно допустил ошибку "->" MsgDebug("STREET-KVIEW",STREET-KVIEW) ENDIF MsgDebug("End") Return Nil Просто у меня в программе вывод при ошибке ВООБЩЕ перестал работать .... Программа просто вешается и все... Может из-за Win8... Хотя маленькие примеры дают ошибку... И почему, не могу понять ???

vvv: По поводу приведенного примера - если в открытых базах есть числовые поля с именами STREET и KVIEW, то без инициализации возьмутся значения этих полей и все проскочит, т.е. ошибки не будет.

Andrey: Взял и откомпилировал проект 2011 года и ерунда выходит: Harbour 3.2.0dev (r1306061203) Copyright (c) 1999-2013, http://harbour-project.org/ Source\fabout.fmg(4) Error E0030 Syntax error "syntax error at 'WINDOW'" Source\fabout.fmg(6) Error E0030 Syntax error "syntax error at 'LABEL'" ............... Source\fabout.fmg(226) Error E0030 Syntax error "syntax error at 'END'" Source\fabout.fmg(228) Error E0030 Syntax error "syntax error at 'END'" 206 errors No code generated. hbmk2[мой-проект]: Error: Running Harbour compiler (embedded). 1 Я так понял, что 4 строка в Source\fabout.fmg неправильная... Вот её привожу полностью: DEFINE WINDOW TEMPLATE AT 140 , 316 WIDTH 725 HEIGHT 510 TITLE "Об Авторах" ICON "iProgramm" MODAL NOSIZE NOSYSMENU BACKCOLOR {114,234,243} Что исправить для новой версии МиниГуи ?

Andrey: Dima пишет: CH фaйлик мож какой забыл приинклудить ? Нет. В проекте все указал: # включить путь к MiniGui и своим *.ch и *.fmg -incpath=Z:\MiniGUI\Include -incpath=Source -incpath=Include P.S. До этого собирал хМаte - и сейчас собирается им... Сделал новый проект для hbmk2.exe и теперь не собирается... Хотя другие аналогичные проекты у меня собираются... Вот мой файл проекта .... # Incremental-режим компиляции -inc # папка где будут все *.obj -workdir=OBJ # включить путь к своим *.ch -incpath=Include # включить путь к своим *.fmg -incpath=Source # включить путь к MiniGui -incpath=Z:\MiniGUI\Include # Имя EXE-модуля и папка где будет собран EXE-файл -oBin\SberBANK-unzip.exe # перечисляем все *.prg Source\SBU.prg Source\SBU-Files.prg Source\fabout.fmg Source\fconfig.fmg Source\forma.fmg Source\freport.fmg Source\statuscopy.fmg # Ресурсы resource\SBU.rc -lminigui -ltsbrowse -LZ:\MiniGUI\LIB\ Собираю так: z:\MiniGui\batch\hbmk2.bat SberBANK-unzip.hbp Подскажите что не так делаю ?

Dima: Andrey пишет: # включить путь к своим *.ch -incpath=Include # включить путь к своим *.fmg -incpath=Source а пути не надо указывать ?

Andrey: Dima пишет: а пути не надо указывать ? Только что проверил на другом проекте, все нормально собирается... # Incremental-режим компиляции -inc # папка где будут все *.obj -workdir=OBJ # Имя EXE-модуля -otxt_dbf.exe # включить путь к MiniGui и своим *.ch и *.fmg -incpath=Z:\MiniGUI\Include -incpath=Source -incpath=Include # перечисляем все *.prg # --------- перенести все файлы в папку Source ------------ Source\main.prg Source\edit.prg Source\structura.prg Source\util_MiniGui.prg Source\copy_files.prg Source\otchet.prg Source\FastRepH.prg Source\myFastReport.prg .................. В этом старом проекте не работает (наверное) связка: fAbout.fmg (любая *.fmg) и "minigui.ch" Форма fAbout.fmg вызывается из основного модуля SBU.prg: #include "minigui.ch" #include "mydefines.ch" FUNCTION Main ........... // FUNCTION LoadAbout() Load Window fAbout fAbout.Center fAbout.Activate RETURN Nil И ошибку показывает только для одного fAbout.fmg: Harbour 3.2.0dev (r1306061203) Copyright (c) 1999-2013, http://harbour-project.org/ Source\fAbout.fmg(4) Error E0030 Syntax error "syntax error at 'WINDOW'" Source\fAbout.fmg(6) Error E0030 Syntax error "syntax error at 'LABEL'" Source\fAbout.fmg(7) Error E0030 Syntax error "syntax error at '140'" Source\fAbout.fmg(8) Error E0030 Syntax error "syntax error at '10'" ......... Source\fAbout.fmg(226) Error E0030 Syntax error "syntax error at 'END'" Source\fAbout.fmg(228) Error E0030 Syntax error "syntax error at 'END'" 206 errors No code generated. hbmk2[SberBANK-unzip]: Error: Running Harbour compiler (embedded). 1 Поменял местами в SberBANK-unzip.hbp файлы ( поставил первым fconfig.fmg после prg) и получил ту же самую ошибку как в первом разе: Harbour 3.2.0dev (r1306061203) Copyright (c) 1999-2013, http://harbour-project.org/ Source\fconfig.fmg(4) Error E0030 Syntax error "syntax error at 'WINDOW'" Source\fconfig.fmg(6) Error E0030 Syntax error "syntax error at 'TEXTBOX'" А через xMate проект собирается ... Что делать ?

Andrey: Сделал следующее. В каждую форму *.fmg поставил строчку: #include "minigui.ch" Компиляция прошла успешно, ехе-ник собирается. Правда пришлось ВСЕ кнопки выхода закоментировать (ACTION NIL), не хочет компилировать вот такую строчку: DEFINE BUTTONEX ButtonEX_2 ROW 350 COL 290 WIDTH 168 HEIGHT 60 CAPTION "Выход" PICTURE "iExit" ACTION fConfig.Release // делал и так {|| fConfig.Release } FONTSIZE 12 END BUTTONEX Выдает ошибку: Harbour 3.2.0dev (r1306061203) Copyright (c) 1999-2013, http://harbour-project.org/ Source\fconfig.fmg(138) Error E0030 Syntax error "syntax error at '.'" 1 error No code generated. 138 строка это - ACTION fConfig.Release Резуме: 1) почему не работает сборка при связки - PRG + FMG ? 2) почему появляется ошибка Syntax error "syntax error at '.'" в ACTION fConfig.Release ?

Andrey: Andrey пишет: Резуме: 1) почему не работает сборка при связки - PRG + FMG ? 2) почему появляется ошибка Syntax error "syntax error at '.'" в ACTION fConfig.Release ? Разобрался я с этим... Все очень просто... Оказывается в файл проекта НЕНУЖНО вносить файлы *.fmg .... И все заработало ....



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