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

|
|
Ответов - 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
|
 |

|
|
|
| постоянный участник
|
Пост 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
|
 |

|
|
|
| постоянный участник
|
Пост N: 4727
Зарегистрирован: 17.02.12
|
|
Отправлено: 09.05.25 17:37. Заголовок: Andrey Там ситуация..
Andrey Там ситуация немного другая. Окно имеет состояние Disable (причина не ясна), т.е. не принимает сообщения и SetFocus(...) игнорируется, выполнив EnableWindow(oWnd:Handle), сработал и SetFocus(oWnd:Handle). Эту ситуацию просто иметь ввиду надо.
|
 |

|
|
|
| постоянный участник
|
Пост N: 7985
Зарегистрирован: 12.09.06
|
|
Отправлено: 20.05.25 11:54. Заголовок: Иногда вот такие окн..
Иногда вот такие окна бывают, кнопка обрезается: 
|
 |

|
|
|
| постоянный участник
|
Пост N: 7991
Зарегистрирован: 12.09.06
|
|
Отправлено: 24.05.25 14:30. Заголовок: Собрал свою большую ..
Собрал свою большую систему на версии МиниГуи 25.05 - что то тормозит программа на ней. Визуально видно при чтении баз, чтении файлов - медленней операции происходят. На версии 23.09.2 прога намного шустрей работает... Почему ? Кстати наконец то в Харборе что-то починили и я могу собирать свою большую прогу на нём. До этого не мог, ломалась прога, писала что нет функций MiniGui, хотя они были в коде. Конфликт с библиотекой HASP был. Сейчас в новой версии вроде его нет.
|
 |

|
|
|
| |
Пост N: 1995
Зарегистрирован: 20.02.11
|
|
Отправлено: 25.05.25 15:57. Заголовок: Andrey пишет: На ве..
Andrey пишет: | цитата: | | На версии 23.09.2 прога намного шустрей работает... Почему ? |
| Видимо проверок понатыкали для ленивых кодеров, вот и результат
|
 |

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

|
|
|
| постоянный участник
|
Пост 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 } ) СПАСИБО ОГРОМНОЕ Сергею ! 
|
 |

|
|
|
| постоянный участник
|
Пост N: 4742
Зарегистрирован: 17.02.12
|
|
Отправлено: 31.05.25 22:13. Заголовок: Andrey Спасибо Олег..
Andrey Спасибо Олегу krutoff, он решение нашел  EnableWindow( ow:Handle ), я только применил
|
 |

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

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

|
|
|
|
|
| постоянный участник
|
Пост 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" ....
|
 |

|
|
|
| |
Пост N: 1996
Зарегистрирован: 20.02.11
|
|
Отправлено: 28.07.25 21:55. Заголовок: Andrey пишет: можно..
Andrey пишет: | цитата: | | можно добавить в код h_tbrowse.prg вот такие строки ? |
| Может все такое в какой-нибудь , #ifdef заворачивать? Подобные вещи нужны разработчикам при отладке, а для пользователя это лишние тормоза в программе, он же не определяет передачу параметров.
|
 |

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

|
|
|
| |
Пост N: 1997
Зарегистрирован: 20.02.11
|
|
Отправлено: 29.07.25 10:01. Заголовок: SergKis пишет: , но..
SergKis пишет: | цитата: | | , но этого не надо в hmg lib, |
| Полностью согласен  , именно это и имел ввиду
|
 |

|
|
|
| постоянный участник
|
Пост N: 8013
Зарегистрирован: 12.09.06
|
|
Отправлено: 29.07.25 10:54. Заголовок: Haz пишет: Подобные..
Haz пишет: | цитата: | | Подобные вещи нужны разработчикам при отладке, а для пользователя это лишние тормоза в программе, |
| А эта проверка СИЛЬНО ЗАТОРМОЗИТ программу ? Это всего лишь ОДНА проверка для удобства разработчика. Я много делаю новые проги с ТСБ, постоянно какие то ошибки c ним. А если новички пытаются работать с ТСБ, представляю как им трудно с этим. Если это нельзя сделать, то можно ли сделать в библиотеке СТАНДАРТНЫЙ модуль проверки, который можно подключать типа: TsbCheck(...) TsbDebug(...) - разработчику ? 
|
 |

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

|
|
|
| постоянный участник
|
Пост N: 8032
Зарегистрирован: 12.09.06
|
|
Отправлено: 07.09.25 09:23. Заголовок: Как можно без добавл..
Как можно без добавления кода ErrorSys.prg в свой проект - перехватить ошибку в проге ? Т.е. при вылете из программы нужно сделать какое-то действие перед падением.
|
 |

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

|
|
|
| постоянный участник
|
Пост 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
|
 |

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