Отправлено: 14.05.18 21:33. Заголовок: Вылет из программы...
Всем привет ! Как можно в МиниГуи программе сделать вызов своих функций при аварийном завершении программы (т.е. при вылете) ? Т.е. хочу сделать сразу после появления MsgBox() вызов 2-3 функций и потом сделать DbCloseAll(). Как это реализовать ?
Для чего это нужно, поясню: при входе в свою программу я пишу в базу кто и когда вошел в программу (логин пользователя). И при выходе из программы, стираю этого пользователя из базы. Если программа "вылетает", то юзер числится как работающий. Древнее наследие с клипера, хотел переделать, да так и осталось.
Отправлено: 28.09.25 19:53. Заголовок: В небольшой тестовой..
В небольшой тестовой программе хочу окно с ошибкой с большими буквами. Делаю так:
Function Main() ... _DefineFont("DlgFont" , "DejaVu Sans Mono", 15, .F., .F. ) Set ShowRedAlert On SET WINDOW MAIN OFF
DEFINE WINDOW Form_Main ... ; MAIN NOSIZE TOPMOST ; ... This.Label_1.Setfocus // такого объекта нет - это проверка ошибки !!!
Прога запускается и вылетает вот с такой ошибой:
Error BASE/1132 Bound error: array access Args: [1] = A { ... } length: 4 [2] = N 0 --------------------------------- Stack Trace --------------------------------- Called from _SETFOCUS(1143) in module: h_controlmisc.prg Called from DOMETHOD(6161) in module: h_controlmisc.prg Called from MAIN(52) in module: demo_e.prg
Отправлено: 28.09.25 21:39. Заголовок: Andrey пишет А почем..
Andrey пишет
цитата:
А почему такая ошибка ?
Что с ней не так ? SETFOCUS(1143) вызвал ошибку, "Bound error: array access Args: [1] = A { ... } length: 4 [2] = N 0" говорит, что 0 в массиве, поиск - нет контрола This.Label_1.Setfocus Попробуй поставь Function Main() ... ALTD(1) ... Будет старое сообщение, т.е. в режиме отладки 1ый раз идет проверка наличия контрола, потом команда SetFocus, ALTD(0) откл. режим отладки, сразу выполняется команда SetFocus. В отлаженной проге (окнах) ALTD(1) не нужен
Отправлено: 09.12.25 15:34. Заголовок: Перевел свою большую..
Перевел свою большую прогу на новую версию МиниГуи - 25.11 Update 1 (PRO) До этого сидел на версии 23.09 (Update 2) со старым компилятором Харбора. И столкнулся с проблемой - потеря фокуса окна, возврат на окно есть, а выбор на этом окне нет.
Т.е. окно STANDART, далее окно MODAL , далее окно MODAL, далее окно MODAL, далее окно MODAL, далее окно MODAL (т.е. 4 окна MODAL) выбор из справочника город/улица - выбрали город, вернулись на 3 окно MODAL и всё !!! Прога висит, окно блокировано - выбрать ничего нельзя, доступна ТОЛЬКО клавиша ESC. Теперь пробуем заново сделать выбор и всё работает !!! До следующего входа по этой цепочки окон.
Если не вызываю ЧЕТВЕРТОЕ окно MODAL выбора из справочника, а допустим там просто ввод текста, то зависания нет.
Решил проблему так (СПАСИБО Сергею ):
(This.Object):Event(11,{|obtn,ky,abtn| // объект,event,параметр получаем Local ow := obtn:Window ... SET WINDOW THIS TO ow:Name aRet := ButtonSpavki(aDim,nButton,cw) SET WINDOW THIS TO // Важно !!! AEval(HMG_GetForms(,.T.), {|oo| EnableWindow(oo:Handle) }) This.Get_Buff.Setfocus ow:Enabler(cn, .T.) // разблокировка кнопки DO EVENTS Return Nil } )
Пришлось пройтись по всей программе и смотреть все места, где появились такие проблемы и делать добавку по коду !
Отправлено: 09.12.25 16:15. Заголовок: Andrey Ты не досмот..
Andrey Ты не досмотрел пример Tsb_2WndType
для main окна и modal окон надо :Event( 3, {|ow,ky,cn| // button 3 Local lIsModal := _HMG_IsModalActive _wSend("_Enable",,{cn, .F.}) SET WINDOW THIS TO ow:Name _HMG_IsModalActive := .T. ky := Table_Four(ow, cn, .T.) _HMG_IsModalActive := lIsModal SET WINDOW THIS TO AEval(HMG_GetForms(,.T.), {|oo| EnableWindow(oo:Handle) }) _wSend("_Enable",ow,{cn, .T.}) ow:SetFocus(owc:cFocus) _wSend(21) Return Nil }) для окна standard и modal окон надо :Event( 1, {|ow,ky,cn| Local lIsModal := _HMG_IsModalActive SET WINDOW THIS TO ow:Name _HMG_IsModalActive := .T. Table_Four(ow, cn, .T.) _HMG_IsModalActive := lIsModal AEval(HMG_GetForms(,.T.), {|oo| EnableWindow(oo:Handle) }) // !!! remove LOSS OF FOCUS for windows SET WINDOW THIS TO ow:Enabler(cn, .T.) ow:SetFocus(ky := ow:Cargo:cFocus) DO EVENTS Return Nil })
тогда замена main окна на др. тип будет без проблем
Отправлено: 13.03.26 18:42. Заголовок: Прога на МиниГуи вер..
Прога на МиниГуи версии проф 25.11.1 Запуск на сервере-терминалов WinServer 2008
Опять ошибка появилась:
Time from start: 0 days 0 hours 31 mins 52 secs !!! 31 минута работы проги Error BASE/5001 MiniGUI Error: _SETFONT Args: [1] = N 0 [2] = C Tahoma [3] = N 22 [4] = L F [5] = L F [6] = L F [7] = L F --------------------------------- Stack Trace --------------------------------- Called from _SETFONT(0) Called from _DEFINEGETBOX(0) Called from MYCARDFIELDGETBOX(1906) in module: Source\Tbrw_fCard.prg Called from SHOWPAGECARD(1398) in module: Source\Tbrw_fCard.prg Called from SETTAB_1CARD(909) in module: Source\Tbrw_fCard.prg Called from SHOW_CARD(492) in module: Source\Tbrw_fCard.prg
Вот код строка 1906:
@ nRowFld , nColFld + nDimColFld + nWLbl GETBOX &cObjDop VALUE xRet ; PICTURE aPict[nI] ; WIDTH nWFld + 10 HEIGHT nSFont *nKHGet - nDelHeight ; FONT cNFont SIZE nSFont ; BACKCOLOR a3BClrGB FONTCOLOR a3FClrGB ; ON CHANGE {|n| ; (ThisWindow.Cargo):nModify += 1 ,; This.Cargo:lModify := .T. ,; lStatGlobalCardEdit := .T. ,; // была модификация поля в карточке ! lStatEditField := .T. ,; // флаг изменения полей карточки (тип NCD) n := Form_Card.Buf.Cargo ,; // счётчик SetProperty(cForm,"Buf","Cargo", n++ ) } ; // &(FOnChange) ON INIT {|| This.Cargo := oKeyData() ,; // создать объект (контейнер) для этого объекта This.Cargo:lModify := .F. ,; This.Cargo:cRem := cRem ,; This.Cargo:cNameLine := cName ,; This.Cargo:nPage := nT ,; This.Cargo:xValue := This.Value } // MYCARDFIELDGETBOX(1906)
Чего не хватает ??? Перезапуск проги и нормально в этом режиме работает прога.
Andrey Выкинь строку FONT cNFont SIZE nSFont или используй имя фонта, созданного при старте программы в INIT PROCEDURE, не используй создание временных фонтов в контролах и окнах, уже писал тебе про это
Отправлено: 16.03.26 20:08. Заголовок: Сделал SergKis пишет..
Сделал SergKis пишет:
цитата:
Выкинь строку FONT cNFont SIZE nSFont или используй имя фонта, созданного при старте программы в INIT PROCEDURE, не используй создание временных фонтов в контролах и окнах, уже писал тебе про это
Выкинул. Сделал так:
@ .... GETBOX &cObjDop VALUE xRet ; FONT "Label_Font2" ; // Фонт_карточки_полей ON INIT {|| .... // MYCARDFIELDGETBOX(1950)
Всё равно вылет на фонтах - ЧЕТЫРЕ раза за рабочий день вылетела прога ! Почему ?
Time from start: 0 days 5 hours 0 mins 59 secs Error BASE/5001 MiniGUI Error: _SETFONT Args: [1] = N 0 [2] = C Label_Font2 [3] = N 18 [4] = L F [5] = L F [6] = L F [7] = L F --------------------------------- Stack Trace --------------------------------- Called from _SETFONT(0) Called from _DEFINEGETBOX(0) Called from MYCARDFIELDGETBOX(1950) in module: Source\Tbrw_fCard.prg Called from SHOWPAGECARD(1433) in module: Source\Tbrw_fCard.prg ......
Отправлено: 16.03.26 21:39. Заголовок: Andrey пишет вылет н..
Andrey пишет
цитата:
вылет на фонтах
Вылет на handle контрола GetBox == 0, т.е.
Error BASE/5001 MiniGUI Error: _SETFONT Args: [1] = N 0 [2] = C Label_Font2 [3] = N 18 [4] = L F [5] = L F [6] = L F [7] = L F ^^^^^^^^^^ - это ControlHandle, вызов ф-ии FontHandle := _SetFont ( ControlHandle, FontName, FontSize, bold, italic, underline, strikeout )
т.е. на не созданный контрол, ставим фонт, что то мешает создать контрол на окне, добавь перед DO EVENTS @ .... GETBOX &cObjDop VALUE xRet ; ...
Сделал, всё равно сегодня один вылет уже был. Комп хороший у юзера - Intel Xeon 3.40GHz, ОЗУ 16 Гб, Windows Server 2008 Запуск проги МиниГуи через удалённое подключение к серверу-терминалов.
Отправлено: 18.03.26 19:59. Заголовок: Andrey пишет всё рав..
Andrey пишет
цитата:
всё равно сегодня один вылет уже был
У тебя сервер, если процессор занят, то GUI может не работать (не доходит очередь или мало времени на создание контрола), оберни GetBox в цикл с begin sequnce пока не получишь handle. Попробуй TEXTBOX - стандартный контрол, вместо GetBox
Отправлено: 08.04.26 23:37. Заголовок: Опять возвращаюсь к ..
Опять возвращаюсь к ошибке
Time from start: 0 days 5 hours 28 mins 24 secs <<<<<------- 5 часов работы программы Error BASE/5001 MiniGUI Error: _SETFONT Args: [1] = N 0 [2] = C Tahoma [3] = N 24 [4] = L F [5] = L F [6] = L F [7] = L F --------------------------------- Stack Trace --------------------------------- Called from _SETFONT(0) Called from _DEFINEGETBOX(0) Called from MYCARDFIELDGETBOX(1952) in module: Source\Tbrw_fCard.prg Called from SHOWPAGECARD(1434) in module: Source\Tbrw_fCard.prg Called from SETTAB_1CARD(917) in module: Source\Tbrw_fCard.prg
МиниГуи - версия 25.11 Update 1 (PRO) Система Win Server 2012 - 16 ОЗУ - комп хороший, запускают только мою большую прогу на МиниГуи. Такие же ошибки были ранее и на Win10 !!!
Что делается в проге на МиниГуи - открывается ТСБ по базе (окно STANDART) и показывается карточка на базе TAB-объекта (окно MODAL) - строится LABEL + GETBOX примерно:
8 вкладок на Tab'е * 16 Label = 128 объектов (название на русском) 8 вкладок на Tab'е * 16 GetBox = 128 объектов (поля из базы) Примерно 256 объектов на окне
Юзер выбирает запись из ТСБ, открывает карточку, что-то делает, потом закрывает. Далее выбирает запись и т.д. DO EVENTS в цикле при создании GETBOX стоит !!!
Прога работает нормально по 4-5 часов, но в какой то момент вылетает БЕЗ показа ОКНА ОШИБКИ !!! Но лог-файл ErrorLog.htm создаёт.
Как эту ошибку исправить в коде МиниГуи ??? Если там объект не создаётся, то пусть выходит сообщение об ошибке создания объекта GETBOX и моя прога не должна "падать" !!! Григорий, более подробно отправил письмо на почту. Почему в других языках намного больше объектов показывают в карточках, а в МиниГуи идёт вылет ?
Отправлено: 09.04.26 09:34. Заголовок: Andrey пишет Как эту..
Andrey пишет
цитата:
Как эту ошибку исправить в коде МиниГуи ??? Если там объект не создаётся, то пусть выходит сообщение об ошибке создания объекта GETBOX и моя прога не должна "падать" !!!
Запрос "рабочий стол windows Server 2012 назначение" к Google. Ответ
цитата:
... Инфраструктура виртуальных рабочих столов (VDI): Использование сервера для предоставления пользователям виртуальных машин с графическим интерфейсом. В отличие от режима Core, установка рабочего стола увеличивает нагрузку на ресурсы, но существенно упрощает работу администраторам, не привыкшим к интерфейсу командной строки
Вообще то, это твоя работа учитывать условия эксплуатации, при разработке\реализации проекта, т.е. проверки должен ты сам делать, МиниГуи - это инструмент в твоих руках. На "толстых" клиентах, у меня, с GETBOX никогда не было проблемм
цитата:
Почему в других языках намного больше объектов показывают в карточках, а в МиниГуи идёт вылет ?
Система Win Server 2012 - 16 ОЗУ - комп хороший, запускают только мою большую прогу на МиниГуи. Такие же ошибки были ранее и на Win10 !!!
SergKis пишет:
цитата:
Вообще то, это твоя работа учитывать условия эксплуатации, при разработке\реализации проекта, т.е. проверки должен ты сам делать, МиниГуи - это инструмент в твоих руках. На "толстых" клиентах, у меня, с GETBOX никогда не было проблемм
Эта ошибка появилась с версии 24.ХХ - до этого использовал 23.09.2 и не было такой ошибки.
Все даты в формате GMT
3 час. Хитов сегодня: 84
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет