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




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


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

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

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







Пост N: 255
Зарегистрирован: 17.10.05
ссылка на сообщение  Отправлено: 08.05.25 13:50. Заголовок: Andrey пишет: Навер..


Andrey пишет:

 цитата:
Наверное окно MsgDebug() портит что-то в окнах МиниГуи...


У меня возникла такая же ситуация при закрытии второго модального окна - даже
при наличии после DoMethod(cForm,'ACTIVATE') команды
IF _IsWindowDefined(cParent)
DoMethod(cParent, "SetFocus"); ENDIF
Фокус все равно уходит на Main окно с ТСБ на котором скроллом мышки можно бегать по строкам.
MsgDebug() не использую..

P.S. Удалось решить проблему - может кому пригодится:
всесто кода IF _IsWindowDefined (для cParent окна) вставил
IF _IsWindowDefined(oWnd:Name)
EnableWindow(oWnd:Handle)
SetFocus(oWnd:Handle)
ENDIF

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




Пост N: 7973
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 08.05.25 22:40. Заголовок: Делай как Сергей сов..


Делай как Сергей советовал, для модальных окон !

    
Function XXX(oWnd,...) // oWnd - родительское окно

// ОБЯЗАТЕЛЬНО для окна MODAL / REQUIRED for MODAL window
IF !Empty( _HMG_MainHandle ) ; _HMG_InplaceParentHandle := GetActiveWindow()
ENDIF

DEFINE WINDOW &cForm ... ;
MODAL .... ;
...
END WINDOW

ACTIVATE WINDOW &cForm

IF _IsWindowDefined(oWnd:Name) // ОБЯЗАТЕЛЬНО / REQUIRED
oWnd:SetFocus()
ENDIF

_HMG_InplaceParentHandle := 0 // ОБЯЗАТЕЛЬНО для окна MODAL / REQUIRED for MODAL window

DO EVENTS

RETURN NIL/aRet


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




Пост N: 4727
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 09.05.25 17:37. Заголовок: Andrey Там ситуация..


Andrey
Там ситуация немного другая. Окно имеет состояние Disable (причина не ясна), т.е. не принимает сообщения и SetFocus(...) игнорируется, выполнив EnableWindow(oWnd:Handle), сработал и SetFocus(oWnd:Handle). Эту ситуацию просто иметь ввиду надо.

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




Пост N: 7985
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 20.05.25 11:54. Заголовок: Иногда вот такие окн..


Иногда вот такие окна бывают, кнопка обрезается:


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




Пост N: 7991
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 24.05.25 14:30. Заголовок: Собрал свою большую ..


Собрал свою большую систему на версии МиниГуи 25.05 - что то тормозит программа на ней.
Визуально видно при чтении баз, чтении файлов - медленней операции происходят.
На версии 23.09.2 прога намного шустрей работает... Почему ?

Кстати наконец то в Харборе что-то починили и я могу собирать свою большую прогу на нём.
До этого не мог, ломалась прога, писала что нет функций MiniGui, хотя они были в коде.
Конфликт с библиотекой HASP был.
Сейчас в новой версии вроде его нет.

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




Пост N: 1995
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 25.05.25 15:57. Заголовок: Andrey пишет: На ве..


Andrey пишет:

 цитата:
На версии 23.09.2 прога намного шустрей работает... Почему ?


Видимо проверок понатыкали для ленивых кодеров, вот и результат

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




Пост N: 7995
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 30.05.25 17:47. Заголовок: У меня в проге при з..


У меня в проге при закрытии окна - ВИСИТ и всё !!!
Modal окно завершается, и дальше прога висит.
Ничего не помогает.
У юзеров после долгой работы на хорошем сервере тоже такая картина бывает !
Но не у всех.

Григорий, а как срабатывает закрытие окна в МиниГуи ?
Такое впечатление что при закрытии окна не хватает ресурсов/стека или ещё что там есть.

Вот перетащил сложное окно в небольшой проект demo3, который я тебе не давно высылал и тоже Modal окно висит.
Уже пробовал разные варианты и событие и функция - висит прога и всё:
   DEFINE WINDOW &cForm AT nY2, nX2 WIDTH nW2 HEIGHT nH2   ; 
MODAL NOSIZE ;
ON RELEASE ThisRelease(cForm)
//ON RELEASE _wSend(98)
...
STATIC FUNCTION ThisRelease(cForm)
Local ow := _WindowObj(cForm)
Local ah := ow:Cargo:ahIcoDel
? ProcNL()
?? "---[ "+ow:Name+" ]---"
? Repl(".", 5), "=> RELEASE WINDOW <=", ow:Name
? Repl(".", 5),"Delete handle icon - ow:Cargo:ahIcoDel="
?? ah, HB_ValToExp(ah)
IF IsArray(ah)
AEval(ah, {|h| DestroyIcon(h) }) // удалить хендлы иконок
ENDIF
(ow:Cargo:cAls)->( dbCloseArea() )
DbSelectArea(ow:Cargo:cAlsParent) // база с родительского окна
? Repl(".", 5),"Alias()=", ALIAS(), "было=", ow:Cargo:cAls
?v HMG_GetForms()
? "------------"
DO EVENTS
Return Nil

Нет возврата на родительское окно !!! Как быть ?

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




Пост N: 7997
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 31.05.25 19:59. Заголовок: Вот так нужно делать..


Вот так нужно делать для возврата на родительское окно:
      // --------- работает !!!  
:Event({88,"_F7Cancel"}, {|ow,ky,cn| //Отмена
?? "---[ "+ow:Name+":Event("+hb_ntos(ky)+") ]---",cn
App.Cargo:aRetFltr := {}
// ОБЯЗАТЕЛЬНО ! добавка для возврата на родит.окно
EnableWindow( ky := ow:Handle )
ow:Enabler(cn, .T.) // This.&(cn).Enabled := .T.
ow:SetFocus(ow:Cargo:cFocus)
DO EVENTS
// ОБЯЗАТЕЛЬНО ! добавка для возврата на родит.окно

_wSend(99, ow:Name) //ThisWindow.Release
Return Nil
} )

СПАСИБО ОГРОМНОЕ Сергею !

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




Пост N: 4742
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 31.05.25 22:13. Заголовок: Andrey Спасибо Олег..


Andrey
Спасибо Олегу krutoff, он решение нашел EnableWindow( ow:Handle ), я только применил

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




Пост N: 8005
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 07.07.25 08:12. Заголовок: Опять чудеса... На м..


Опять чудеса...
На моём компе прога не виснет, у заказчика поймал зависание программы - опять потеря фокуса окна.
На кнопке стоит так:
     :Event({98,"_ZExit"}, {|ow,ky,cn| // закрытие окна 
Local cwn := ow:Name
? ProcNL(), ":Event(98)=", cwn, ky, cn
IF _IsWindowDefined(cwn)
SetProperty(cwn, "OnInterActiveClose", {|| NIL })
DoMethod(cwn, "Release")
DO EVENTS
ENDIF
Return Nil
} )

Повторный вход в программу и эта ошибка не ловиться...
Что делать чтобы НЕ БЫЛО такого - потери фокуса ?

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




Пост N: 8011
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 28.07.25 16:48. Заголовок: Версия МиниГуи 25.06..


Версия МиниГуи 25.06 (32-bit) ANSI
Вот ТСБ валиться на такой ошибке:
Error BASE/1132 Переполнение массива: Неверное количество аргументов 
Args:
[1] = A { ... } length: 18
[2] = N 19

Called from TSBROWSE:SETARRAYTO(0)
Called from _DEFINETBROWSE(0)
Called from _TBROWSE_CREATE(0)
Called from _TBROWSE(0)
Called from CARD_LISTABON(160) in module: Source\2ListAbonent.prg
Called from LISTABONENT(44) in module: Source\2ListAbonent.prg

И как искать ошибку ? Чего не хватает ?
Какой массив переполнен ????

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




Пост N: 8012
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 28.07.25 17:10. Заголовок: Григорий, можно доба..


Григорий, можно добавить в код h_tbrowse.prg вот такие строки ?
METHOD SetArrayTo( aArray, uFontHF, aHead, aSizes, uFooter, aPicture, aAlign, aName ) CLASS TSBrowse 
.....
IF Len( aName ) != nColumns
ASize( aName, nColumns )
ENDIF

IF LEN(aName) # LEN(aHead) .OR. Len( ::aArray[ 1 ] ) # LEN(aHead)
cTemp := "ERROR in TSB parameters !" + CRLF
cTemp += "Len(aArray[1]) = " + HB_NtoS(Len( ::aArray[1] )) + CRLF
cTemp += "Len(aName) = " + HB_NtoS(LEN(aName)) + CRLF
cTemp += "Len(aHead) = " + HB_NtoS(LEN(aHead)) + CRLF + CRLF
cTemp += ProcNL()
MsgStop(cTemp)
ENDIF


FOR nI := 1 TO nColumns
cType := ValType( ::aArray[ 1, nI ] )
aDefType[ nI ] := cType

IF cType $ "CM"
....


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




Пост N: 1996
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 28.07.25 21:55. Заголовок: Andrey пишет: можно..


Andrey пишет:

 цитата:
можно добавить в код h_tbrowse.prg вот такие строки ?


Может все такое в какой-нибудь , #ifdef заворачивать?
Подобные вещи нужны разработчикам при отладке, а для пользователя это лишние тормоза в программе, он же не определяет передачу параметров.

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




Пост N: 4786
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 28.07.25 23:20. Заголовок: Haz пишет Может все ..


Haz пишет
 цитата:
Может все такое в какой-нибудь , #ifdef заворачивать?


В данном методе есть aHead, aSizes, uFooter, aPicture, aAlign, aName (aArray тоже может, ошибочно, иметь меньше колонок, чем aHead, ...) их надо все проверять тогда, но этого не надо в hmg lib, если надо, то это свои ф-ии контроля параметров, т.к. они могут быть получены из многих источников, заданных как разработчиком, так и пользователем в ini, cfg, ..., т.е. обвешивай своим контролем, если надо, т.к. в самой lib оч. много мест похожего плана.
Andrey пишет
 цитата:
добавить в код h_tbrowse.prg вот такие строки


Контролируй вход по параметрам сам, как надо тебе

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




Пост N: 1997
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 29.07.25 10:01. Заголовок: SergKis пишет: , но..


SergKis пишет:

 цитата:
, но этого не надо в hmg lib,


Полностью согласен , именно это и имел ввиду

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




Пост N: 8013
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 29.07.25 10:54. Заголовок: Haz пишет: Подобные..


Haz пишет:

 цитата:
Подобные вещи нужны разработчикам при отладке, а для пользователя это лишние тормоза в программе,


А эта проверка СИЛЬНО ЗАТОРМОЗИТ программу ?
Это всего лишь ОДНА проверка для удобства разработчика.
Я много делаю новые проги с ТСБ, постоянно какие то ошибки c ним.
А если новички пытаются работать с ТСБ, представляю как им трудно с этим.

Если это нельзя сделать, то можно ли сделать в библиотеке СТАНДАРТНЫЙ модуль проверки,
который можно подключать типа: TsbCheck(...) TsbDebug(...) - разработчику ?

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




Пост N: 4787
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 29.07.25 12:22. Заголовок: Andrey пишет Это все..


Andrey пишет
 цитата:
Это всего лишь ОДНА проверка для удобства разработчика.


Если посмотришь примеры с использованием метода\ф-ии SetArrayTo(...), то увидишь, что данные параметров на входе формируются в ф-ии, в массиве aDatos. Элементы этого массива формируются взаимно связанно друг от друга - это и есть контроль, т.е. схема работы с параметрами, т.е. и тебе надо подходить похожим образом к параметрам. Ф-ии типа TsbCheck(...) TsbDebug(...) сделай для себя сам
PS
По поводу одной проверки, очень заблуждаешься, входов тсб с параметрами много, начиная от DEFINE TBROWSE ... , LoadFields, LoadArray и т.д., даже oBrw:aArray := aArray требует контроля по массиву aArray - вдруг кол-во колонок меньше чем в описаниях колонок oBrw:aColumns и в самом массиве по элементам могут быть разное количество колонок ... так что проверок и мест контроля точно больше одного

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




Пост N: 8032
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 07.09.25 09:23. Заголовок: Как можно без добавл..


Как можно без добавления кода ErrorSys.prg в свой проект - перехватить ошибку в проге ?
Т.е. при вылете из программы нужно сделать какое-то действие перед падением.

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


Пост N: 1747
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 07.09.25 10:10. Заголовок: https://harbour.gith..

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




Пост N: 8033
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 07.09.25 12:57. Заголовок: Нужен глобальный пер..


Нужен глобальный перехват ошибки.
Вот кусок кода - работает у меня отлично, у юзера падает иногда, очень редко, клавиши по другому нажимают.
Почему, не знаю.
Код:
      :Event(40, {|ow,ky,ob| // карточка из таблицы 
Local lDbf, cn := "_Card"
This.&(cn).Enabled := .F.
_SetThisFormInfo(ow)
// блокировка таблицы с закраской
ob:nCLR_Gray := HMG_RGB2n({164,164,164})
ob:nCLR_HGray := HMG_RGB2n({164,164,164})
ob:nCLR_Lines := CLR_WHITE
ob:Enabled(.F.)
lDbf := .T. // здесь DBF-файл
Card_1Zaivka(ow,ky,ob,lDbf)
_SetThisFormInfo()
ob:Enabled(.T.)
This.&(cn).Enabled := .T. // <<<---- 518 строка
ow:Cargo:oBrw:Setfocus()
DO EVENTS
ky := cn
Return Nil
})

Вот ошибка:
Time from start: 0 days 0 hours 15 mins 47 secs
Error MGERROR/0 Control: _Card Of FORM_ZAYIVK Not defined. Program terminated.
--------------------------------- Stack Trace ---------------------------------
Called from MSGMINIGUIERROR(0)
Called from VERIFYCONTROLDEFINED(0)
Called from SETPROPERTY(0)
Called from (b)SETS_EVENT2ZAIVKA(518) in module: Source\1Zaivka.prg
Called from DO_WINDOWEVENTPROCEDURE(0)
Called from TWNDDATA:DOEVENT(0)
Called from DO_ONWNDLAUNCH(0)
Called from (b)INIT(0)
Called from EVENTS(0)
Called from SENDMESSAGE(0)
Called from (b)TWNDDATA(0)
Called from TWNDDATA:SENDMSG(0)
Called from _WSEND(0)
Called from (b)SETS_EVENT2ZAIVKA(327) in module: Source\1Zaivka.prg
Called from DO_WINDOWEVENTPROCEDURE(0)
Called from TWNDDATA:DOEVENT(0)
Called from DO_ONWNDLAUNCH(0)
Called from (b)INIT(0)
Called from EVENTS(0)
Called from DOEVENTS(0)
Called from TCONTROL:HANDLEEVENT(0)
Called from TSBROWSE:HANDLEEVENT(0)
Called from EVENTS(0)
Called from DOEVENTS(0)
Called from _WPOST(0)
Called from (b)EVAL(482) in module:
Called from TSBROWSE:GOTOP(0)
Called from TSBROWSE:RESET(0)
Called from TSBNEWINDEX(403) in module: Source\table_function.prg
Called from (b)SETS_EVENT2ZAIVKA(260) in module: Source\1Zaivka.prg
Called from DO_WINDOWEVENTPROCEDURE(0)
Called from TWNDDATA:DOEVENT(0)
Called from DO_ONWNDLAUNCH(0)
Called from (b)INIT(0)
Called from EVENTS(0)
Called from DOMESSAGELOOP(0)
Called from _ACTIVATEWINDOW(0)
Called from FORMTABLE12(213) in module: Source\form_Table12.prg
Called from TABLE_ZAIVKA(101) in module: Source\1Zaivka.prg
Called from (b)MAIN(224) in module: Source\0Main.prg
Called from DO_WINDOWEVENTPROCEDURE(0)
Called from TWNDDATA:DOEVENT(0)
Called from DO_ONWNDLAUNCH(0)
Called from (b)INIT(0)
Called from EVENTS(0)
Called from DOMESSAGELOOP(0)
Called from _ACTIVATEWINDOW(0)
Called from FORMTABLE12(213) in module: Source\form_Table12.prg
Called from TABLE_ZAIVKA(101) in module: Source\1Zaivka.prg
Called from (b)MAIN(224) in module: Source\0Main.prg
Called from DO_WINDOWEVENTPROCEDURE(0)
Called from TWNDDATA:DOEVENT(0)
Called from DO_ONWNDLAUNCH(0)
Called from (b)INIT(0)
Called from EVENTS(0)
Called from DOMESSAGELOOP(0)
Called from _ACTIVATEWINDOW(0)
Called from CARDABONENT(806) in module: Source\card_abon.prg
Called from SAYCARDABONADRES(161) in module: Source\31menu.prg
Called from FINDABON31(68) in module: Source\31menu.prg
Called from (b)MAIN(397) in module: Source\0Main.prg
Called from DO_WINDOWEVENTPROCEDURE(0)
Called from TWNDDATA:DOEVENT(0)
Called from DO_ONWNDLAUNCH(0)
Called from (b)INIT(0)
Called from EVENTS(0)
Called from DOMESSAGELOOP(0)
Called from _ACTIVATEWINDOW(0)
Called from CARDABONENT(806) in module: Source\card_abon.prg
Called from SAYCARDDOGOV(199) in module: Source\31menu.prg
Called from FINDABON31(60) in module: Source\31menu.prg
Called from (b)MAIN(397) in module: Source\0Main.prg
Called from DO_WINDOWEVENTPROCEDURE(0)
Called from TWNDDATA:DOEVENT(0)
Called from DO_ONWNDLAUNCH(0)
Called from (b)INIT(0)
Called from EVENTS(0)
Called from DOMESSAGELOOP(0)
Called from _ACTIVATEWINDOW(0)
Called from MAIN(573) in module: Source\0Main.prg


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

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