On-line: i3t4j6, гостей 1. Всего: 2 [подробнее..]
АвторСообщение
постоянный участник




Пост N: 5855
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 14.05.18 21:33. Заголовок: Вылет из программы...


Всем привет !
Как можно в МиниГуи программе сделать вызов своих функций при аварийном завершении программы (т.е. при вылете) ?
Т.е. хочу сделать сразу после появления MsgBox() вызов 2-3 функций и потом сделать DbCloseAll().
Как это реализовать ?

Для чего это нужно, поясню: при входе в свою программу я пишу в базу кто и когда вошел в программу (логин пользователя).
И при выходе из программы, стираю этого пользователя из базы.
Если программа "вылетает", то юзер числится как работающий.
Древнее наследие с клипера, хотел переделать, да так и осталось.

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 173 , стр: 1 2 3 4 5 6 7 8 9 All [только новые]


постоянный участник




Пост N: 4487
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 27.12.23 14:33. Заголовок: Andrey пишет Можно к..


Andrey пишет
 цитата:
Можно как то избавиться от такой ошибки ?


Думаю да, если планировать (на все приложение, на отдельные окна) используемые фонты и регистрировать их DEFINE FONT ... для дальнейшего использования, ненужные потом удалять. Ты используешь SIZE nFontSize, но не используешь имя FONT, вот что то где то потерялось в процессе работы

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 7647
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 27.12.23 14:56. Заголовок: Т.е. достаточно сдел..


Т.е. достаточно сделать
FONTCOLOR BLACK BACKCOLOR WHITE  FONT cFont SIZE nFontSize PICTURE cFormat               ; 

И ошибка исчезнет ?
6 часов использовали эту карточку периодически, а потом бах - ошибка...

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 7650
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 02.01.24 19:28. Заголовок: Версия МиниГуи 23.12..


Версия МиниГуи 23.12
Моя большая система собирается и запускается отлично.
Я уже порадовался, наконец то Харбор починили....
А НЕТ, не до конца !
Вот код:
 
:Event(500, {|ow,ky,cBtn|
Local cRun, cFun, aPar, cPar, nPos, o, cMsg
ky := ow
o := This.&(cBtn).Cargo
cRun := o:cRun
nPos := At("{", cRun)
cFun := Left(cRun, nPos-1)
cPar := Subs(cRun, nPos)
aPar := &(cPar)
? ProcNL(), "[" + cFun + "]", cPar, HB_ValToExp(aPar)
IF !hb_IsFunction( cFun ) // здесь выдаёт ошибку !
cMsg := "Ошибка !;"
cMsg += "Нет такой функции "+cFun+"("+cPar+") в ЕХЕ-файле !;"
cMsg += 'Обратитесь к разработчику программы;;'
cMsg += ProcNL() + ";" + ProcNL(1)
AlertStop(cMsg, "Запуск модуля")
? SPACE(5) + cMsg
ELSE
hb_ExecFromArray(cFun, aPar) // запуск ф-ии
ENDIF
Return Nil
} )

Нажимаю на кнопку и у меня выдаётся ошибка:

Беру, удаляю папку OBJ в проекте и компилирую с версией МиниГуи 29.09.2 + Harbour с версии МиниГуи 23.01
И о чудо, эта ошибка не появляется...
И как это понимать ?
Что там в Харборе сделали ???

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 174
Зарегистрирован: 12.07.06
ссылка на сообщение  Отправлено: 28.03.24 04:34. Заголовок: Вставлю свои пять копеек


Несколько раз читал эту ветку, когда пытался решить проблему с потерей окна,
результат отрицательный.
Имеется у клиента:
Operating system...: Windows 7 6.1 SP1 память 4 Гб
MiniGUI version....: Harbour MiniGUI Extended Edition 24.01 (32-bit) ANSI
Harbour version....: Harbour 3.2.0dev (r2312082217)
Harbour built on...: Dec 11 2023 15:45:54
C/C++ compiler.....: Borland C++ 5.8.2 (32-bit)
Multi Threading....: NO
VM Optimization....: YES
Размер экзешника 5.46 Мб
Из окна:
DEFINE WINDOW Form_dgrw AT 20,20 WIDTH w_win HEIGHT h_win ;
TITLE titl MODAL NOSYSMENU NOSIZE
...
Вызывается окно поиска :
DEFINE WINDOW Form_sityFind AT 20,20 WIDTH w_win HEIGHT h_win ;
TITLE tit MODAL NOSYSMENU NOSIZE
...
по завершению поиска через пару секунд оно закрывается:
Form_sityFind.Release
и иногда, выдаётся ошибка на строку с Release:
Error MGERROR/0 Window: Form_sityFind is not defined. Program terminated
Уже давно при создании любых окон делаю сборку мусора.

Спасибо: 0 
ПрофильЦитата Ответить
moderator




Пост N: 2301
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 28.03.24 11:50. Заголовок: alex_II пишет: Благ..


alex_II пишет:
Благодарю за полное описание ситуации и используемых инструментов.

 цитата:
иногда, выдаётся ошибка на строку с Release


Да, в таком сценарии это возможно.
Поэтому рекомендую всегда использовать в таком случае команду DO EVENTS перед закрытием модального окна:

 цитата:

DO EVENTS
Form_sityFind.Release


Надеюсь, это поможет решить проблему

Спасибо: 1 
ПрофильЦитата Ответить
постоянный участник




Пост N: 7720
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 28.03.24 12:25. Заголовок: Нужно смотреть сам к..


Нужно смотреть сам код этого окна и поиска.
Лучше переделать на события, как советует Сергей.
Мне это помогло.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 7726
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 17.04.24 15:51. Заголовок: Вот очередная непоня..


Вот очередная непонятка в МиниГуи.
Вылет по ошибке и опять на Alert*():
Error BASE/1132 Переполнение массива: Неверное количество аргументов Args: [1] = A { ... } length: 2 [2] = N 3 
--------------------------------- Stack Trace ---------------------------------
Called from EVENTS(0)
Called from REDRAWWINDOW(0)
Called from _REDRAWCONTROL(0)
Called from _SETFONTCOLOR(0)
Called from SETPROPERTY(0)
Called from (b)SHOWERROR(0)
Called from DO_WINDOWEVENTPROCEDURE(0)
Called from FILLDLG(0)
Called from HMG_ALERT(0)
Called from _ALERT(0)
Called from ALERTSTOP(0)
Called from SHOWERROR(0)
Called from DEFERROR(0)
Called from (b)ERRORSYS(0)
Called from EVENTS(0)
Called from DOMESSAGELOOP(0)
Called from _ACTIVATEWINDOW(0)
Called from HMG_ALERT(0)
Called from _ALERT(0)
Called from ALERTYESNO(0)
Called from RECNOINSERT(970) in module: form_4menu1butt2_tsb.prg
Called from RECNOINSERT_TSB_PLTV1(26) in module: form_4menu1butt2_tsb.prg
Called from (b)VVODCARDOPLATA(278) in module: form_4menu1butt2_card.prg
Called from _DOCONTROLEVENTPROCEDURE(0)
Called from EVENTS(0)
Called from DOMESSAGELOOP(0)
....

Код
   IF AlertYesNo( "Вставить запись в таблицу ?", "Добавление записи" )   // строка 970 

Ну и как правильно сделать ?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 7734
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 21.04.24 13:01. Заголовок: Поймал вылет из прог..


Поймал вылет из программы без ошибки и без создания ErrorLog.htm
Прога падает и всё...
На простой функции
         oBrw:FilterFTS( cVal, .T. ) 

Полдня бился с этим, пока не догадался отключить индекс на базу.
Без него перестала падать прога и поиск пошёл.
Почему так получается ?
Как бы получать ошибку и не гадать что случилось ?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4555
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 21.04.24 16:51. Заголовок: Andrey пишет Полдня ..


Andrey пишет
 цитата:
Полдня бился с этим, пока не догадался отключить индекс на базу.
Без него перестала падать прога и поиск пошёл.


Если бы ты задумался над своим тсб, то, понял, что колонка COLNUMBER { 1 , 50 }, которая заточена на работу с тэгом и oBrw:FilterFTS(cVal, .T.) несовместимая штука (oBrw:nLen подсчет свой), то не потерял бы время. Что бы совместить надо ручками потрудиться, написав обработчики ситуаций для совместной работы алгоритмов.
PS
Взяв в begin sequnce oBrw:FilterFTS(cVal, .T.), получил бы в лог сообщение, обработав.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 7735
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 21.04.24 18:58. Заголовок: SergKis пишет: Что ..


SergKis пишет:

 цитата:
Что бы совместить надо ручками потрудиться, написав обработчики ситуаций для совместной работы алгоритмов.


Это как ?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4556
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 21.04.24 19:37. Заголовок: Andrey пишет Это как..


Andrey пишет
 цитата:
Это как ?


Как обычно, вводишь признак работы по SET SCOPE TO ... или :FilterFTS(...) по вхождению и в колонку COLNUMBER { 1 , 50 } ставишь, например, в oCol:bDecode (oCol:bValue) и oCol:cFooting блоки кода, учитывающий состояние признака

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 7736
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 21.04.24 19:57. Заголовок: Не понял как. Вот ес..


Не понял как.
Вот есть первое обращение к
       oRpt:FilterFTS( cVal, .T. ) 

Что нужно поставить для проверки ?
А то методом тыка понял что там вылетает....

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4557
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 21.04.24 20:54. Заголовок: Andrey пишет Что нуж..


Andrey пишет
 цитата:
Что нужно поставить для проверки ?


oRpt:FilterFTS( cVal, .T. ) меняет блок кода oBrw:bLogicLen, который (для dbf) до него имеет значение
::bLogicLen := {|| ( cAlias )->( iif( IndexOrd() == 0, LastRec(), ordKeyCount() ) ) }
после вызова метода
::bLogicLen := {|| nLen }
Если урезать просмотр тсб по SET SCOPE TO ... - это по ключу слева, а урезать просмотр тсб по oBrw:FilterFTS(cFind, lUpper, lBottom, lFocus, lAll) - это по вхождению значения в символьные поля при lAll := .F. [default] или во все поля при lAll := .T.
Колонка COLNUMBER { 1 , 50 } вывод блоком кода таким (по тэгу)
DEFINE COLUMN oCol DATA 'hb_ntos(iif( IndexOrd() > 0, ORDKEYNO(), RecNo() ))' ;
с oBrw:FilterFTS(...) будет давать "дырки" в значениях, по идее надо делать нормальную нумерацию

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 173 , стр: 1 2 3 4 5 6 7 8 9 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 44
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет