Автор | Сообщение |
|
| постоянный участник
|
Пост N: 5855
Зарегистрирован: 12.09.06
|
|
Отправлено: 14.05.18 21:33. Заголовок: Вылет из программы...
Всем привет ! Как можно в МиниГуи программе сделать вызов своих функций при аварийном завершении программы (т.е. при вылете) ? Т.е. хочу сделать сразу после появления MsgBox() вызов 2-3 функций и потом сделать DbCloseAll(). Как это реализовать ? Для чего это нужно, поясню: при входе в свою программу я пишу в базу кто и когда вошел в программу (логин пользователя). И при выходе из программы, стираю этого пользователя из базы. Если программа "вылетает", то юзер числится как работающий. Древнее наследие с клипера, хотел переделать, да так и осталось.
|
 |

|
Ответов - 190
, стр:
1
2
3
4
5
6
7
8
9
10
All
[только новые]
|
|
|
| постоянный участник
|
Пост N: 4487
Зарегистрирован: 17.02.12
|
|
Отправлено: 27.12.23 14:33. Заголовок: Andrey пишет Можно к..
Andrey пишет цитата: | Можно как то избавиться от такой ошибки ? |
| Думаю да, если планировать (на все приложение, на отдельные окна) используемые фонты и регистрировать их DEFINE FONT ... для дальнейшего использования, ненужные потом удалять. Ты используешь SIZE nFontSize, но не используешь имя FONT, вот что то где то потерялось в процессе работы
|
 |

|
|
| постоянный участник
|
Пост N: 7647
Зарегистрирован: 12.09.06
|
|
Отправлено: 27.12.23 14:56. Заголовок: Т.е. достаточно сдел..
Т.е. достаточно сделать FONTCOLOR BLACK BACKCOLOR WHITE FONT cFont SIZE nFontSize PICTURE cFormat ; И ошибка исчезнет ? 6 часов использовали эту карточку периодически, а потом бах - ошибка...
|
 |

|
|
| постоянный участник
|
Пост 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 И о чудо, эта ошибка не появляется... И как это понимать ? Что там в Харборе сделали ???
|
 |

|
|
| |
Пост 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 Уже давно при создании любых окон делаю сборку мусора.
|
 |

|
|
| moderator
|
Пост N: 2301
Зарегистрирован: 11.02.10
|
|
Отправлено: 28.03.24 11:50. Заголовок: alex_II пишет: Благ..
alex_II пишет: Благодарю за полное описание ситуации и используемых инструментов. цитата: | иногда, выдаётся ошибка на строку с Release |
| Да, в таком сценарии это возможно. Поэтому рекомендую всегда использовать в таком случае команду DO EVENTS перед закрытием модального окна: цитата: | DO EVENTS Form_sityFind.Release |
| Надеюсь, это поможет решить проблему 
|
 |

|
|
| постоянный участник
|
Пост N: 7720
Зарегистрирован: 12.09.06
|
|
Отправлено: 28.03.24 12:25. Заголовок: Нужно смотреть сам к..
Нужно смотреть сам код этого окна и поиска. Лучше переделать на события, как советует Сергей. Мне это помогло.
|
 |

|
|
| постоянный участник
|
Пост 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 Ну и как правильно сделать ? 
|
 |

|
|
| постоянный участник
|
Пост N: 7734
Зарегистрирован: 12.09.06
|
|
Отправлено: 21.04.24 13:01. Заголовок: Поймал вылет из прог..
Поймал вылет из программы без ошибки и без создания ErrorLog.htm Прога падает и всё... На простой функции oBrw:FilterFTS( cVal, .T. ) Полдня бился с этим, пока не догадался отключить индекс на базу. Без него перестала падать прога и поиск пошёл. Почему так получается ? Как бы получать ошибку и не гадать что случилось ? 
|
 |

|
|
| постоянный участник
|
Пост 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.), получил бы в лог сообщение, обработав.
|
 |

|
|
| постоянный участник
|
Пост N: 7735
Зарегистрирован: 12.09.06
|
|
Отправлено: 21.04.24 18:58. Заголовок: SergKis пишет: Что ..
SergKis пишет: цитата: | Что бы совместить надо ручками потрудиться, написав обработчики ситуаций для совместной работы алгоритмов. |
| Это как ? 
|
 |

|
|
| постоянный участник
|
Пост 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 блоки кода, учитывающий состояние признака
|
 |

|
|
|
| постоянный участник
|
Пост N: 7736
Зарегистрирован: 12.09.06
|
|
Отправлено: 21.04.24 19:57. Заголовок: Не понял как. Вот ес..
Не понял как. Вот есть первое обращение к oRpt:FilterFTS( cVal, .T. ) Что нужно поставить для проверки ? А то методом тыка понял что там вылетает....
|
 |

|
|
| постоянный участник
|
Пост 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(...) будет давать "дырки" в значениях, по идее надо делать нормальную нумерацию
|
 |

|
|
| постоянный участник
|
Пост N: 7754
Зарегистрирован: 12.09.06
|
|
Отправлено: 13.05.24 09:00. Заголовок: Добавил к себе в бол..
Добавил к себе в большой проект ещё 2 программки - примерно 400 Кб текстов (2 новые таблицы) и труба... Началось зависание в работающих ветках программы, вызываешь меню и прога висит. Опять потеря фокуса, помогает только снятие программы через Менеджер программ. 
|
 |

|
|
| постоянный участник
|
Пост N: 7967
Зарегистрирован: 12.09.06
|
|
Отправлено: 21.04.25 19:37. Заголовок: Опять вопрос по зави..
Опять вопрос по зависанию моей большой проги. Имеется один клиент, у которого постоянно вешается моя большая прога на МиниГуи в различных местах программы. Толи руки у него такие, толи виноват СЕРВЕР (прога запускается как сервер-терминалов) но постоянно прога подвешивается. На неделе несколько раз. Вот сегодняшний случай, на рабочем столе 1С, Ворд и прога на МиниГуи, в проге окно MAIN, STANDART и MODAL(1), далее окно MODAL(2) и вызывается расчёт отчета, потом возврат к MODAL(1) окно, и потом вызов Экселя. Эксель не прогрузился, прога висит. Окно проги НЕЛЬЗЯ закрыть и переключится на другие программы, МиниГуи на экране и всё. Крестика закрыть у юзера нет, и снять окно через Диспетчер программы - НЕЛЬЗЯ, это прога запущена на сервере, снять её не возможно !!! Только перезагрузка СЕРВЕРА админом. Как быть и что делать ??? Почему нет возврата на окно MODAL(1) ??? Думал что только такое у этого клиента, ан НЕТ. Делаю уже 1,5 месяца небольшую тестовую программу и поймал вчера точно такой же ГЛЮК на 2-х MODAL окнах. Так как на окнах использую везде ТСБ, то видно что после закрытия окна MODAL(2) фокус в проге возвращается СРАЗУ на MAIN окно. А окно MODAL(1) висит поверх окна MAIN. Вот так примерно наверное происходит у клиента. Как в самом МиниГуи исправить/добавить чтобы закрытие окна MODAL(2) приводило к переводу в фокус окна окна MODAL(1) ? 
|
 |

|
|
| постоянный участник
|
Пост N: 4711
Зарегистрирован: 17.02.12
|
|
Отправлено: 21.04.25 22:53. Заголовок: Такое есть в Modal(2..
Такое есть в Modal(2) ? FUNC Modal2(cParent, ...) // cParent - имя Modal(1) ... ACTIVATE WINDOW &cForm IF _IsWindowDefined(cParent) DoMethod(cParent, "SetFocus") ENDIF RETURN aRet
|
 |

|
|
| постоянный участник
|
Пост N: 4712
Зарегистрирован: 17.02.12
|
|
Отправлено: 21.04.25 23:05. Заголовок: Andrey пишет снять е..
Andrey пишет NOTIFY MENU на MAIN окно, пробовал делать (проверить жива ли прога, закрыть окна modal, ...) ?
|
 |

|
|
| постоянный участник
|
Пост N: 7968
Зарегистрирован: 12.09.06
|
|
Отправлено: 21.04.25 23:38. Заголовок: SergKis пишет: NOTI..
SergKis пишет: цитата: | NOTIFY MENU на MAIN окно, пробовал делать (проверить жива ли прога, закрыть окна modal, ...) ? |
| Боюсь добавлять, прогу собираю на версии 23.09.2 с Харбором от версии Минигуи 23.01 Более новые версии - ломают прогу, я писал ранее, функции Харбора перестают работать, прога пишет что нет такой функции. Труба одним словом. Пробовал переписать заново, увяз, столько работы уже не осилю... Вроде на 7.70 пошла, но не доделал, а сейчас вообще времени нет, новую прогу пишу заказчику. SergKis пишет: Конечно нет. Я задолбаюсь писать у себя в коде все эти переходы. Вот и просил проверить ядро МиниГуи и туда это вставить, если нет такого. 
|
 |

|
|
| постоянный участник
|
Пост N: 7969
Зарегистрирован: 12.09.06
|
|
Отправлено: 29.04.25 16:10. Заголовок: БОЛЬШАЯ ПРОСЬБА испр..
БОЛЬШАЯ ПРОСЬБА исправить функции Alert*, включая MsgDebug() Вот экран программы которая тупо повисла: картинка ссылка Прога из 3-х окон. MAIN с таблицей, далее окно (1) MODAL и ещё окно (2) MODAL Вызываю для тестирования окно MsgDebug(), назначил левую клавишу мышки. Если MsgDebug() закрыть клавишей Esc (правда не всегда это получается), иногда кнопкой Ок - то фокус улетает на предыдущую таблицу - окно (1) MODAL, стрелками потыкать вверх вниз и видно курсор в ТСБ движется !!! А окно с этой таблицей так и висит на экране, закрыть невозможно ! Если бы окна были на весь экран, то точно было ничего НЕ СДЕЛАТЬ, только снятие проги через снятие программы. Наверное окно MsgDebug() портит что-то в окнах МиниГуи... 
|
 |

|
|
| moderator
|
Пост N: 2428
Зарегистрирован: 11.02.10
|
|
Отправлено: 29.04.25 18:39. Заголовок: Andrey пишет: Навер..
Andrey пишет: цитата: | Наверное окно MsgDebug() портит |
| Благодарю за сообщение и пример! Поправил, надеюсь, эту функцию для следующей сборки. 
|
 |

|
Ответов - 190
, стр:
1
2
3
4
5
6
7
8
9
10
All
[только новые]
|
|