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




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


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

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

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


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




Пост N: 4794
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 07.09.25 13:45. Заголовок: Andrey пишет Нужен г..


Andrey пишет
 цитата:
Нужен глобальный перехват ошибки


Чем это поможет ? Сообщение, что на окне нет контрола.
Для начала проверь
 
IF _IsControlDefined(cn, This.Name)
This.&(cn).Enabled := .T.
ELSE
ky := hmg_GetFormControls(This.Name)
? "FormName =",This.Name, "Control =", cn, ky ; ?v ky ; ?
ENDIF
ow:Enabler(cn,.T.)


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




Пост N: 4795
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 08.09.25 12:23. Заголовок: Andrey пишет Как мож..


Andrey пишет
 цитата:
Как можно в МиниГуи программе сделать вызов своих функций при аварийном завершении программы (т.е. при вылете) ?


Есть переменные для задания блоков кода при ошибке:
 
- _HMG_bOnErrorInit := {|cMsg| ..., cMsg } -> возвращает cMsg, выполняется перед ф-ями AlertStop или MsgStop
- _HMG_bOnErrorExit := {|| ... } -> выполняется после ф-ий AlertStop или MsgStop, перед ReleaseAllWindows()


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




Пост N: 8034
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 08.09.25 18:54. Заголовок: SergKis пишет: Есть..


SergKis пишет:

 цитата:
Есть переменные для задания блоков кода при ошибке:


Да ! Это нужно ! А как их использовать ?
Куда их ставить ?

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




Пост N: 4796
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 08.09.25 20:04. Заголовок: Andrey пишет Куда их..


Andrey пишет
 цитата:
Куда их ставить ?


В начало Main или, например
INIT PROCEDURE Sets_ENV()
...
_HMG_bOnErrorInit := {|cMsg| ..., cMsg }
_HMG_bOnErrorExit := {|| ... }
...
RETURN

 цитата:
А как их использовать ?


Как фантазии хватит, списки окон, списки контролов, ... пробуй

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




Пост N: 8047
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 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

А почему такая ошибка ?

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




Пост N: 4822
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 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) не нужен

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




Пост N: 8048
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 28.09.25 22:45. Заголовок: Спасибо ! :sm36:..


Спасибо !

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




Пост N: 8128
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 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
} )

Пришлось пройтись по всей программе и смотреть все места, где появились такие проблемы и делать добавку по коду !

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




Пост N: 4863
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 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 окна на др. тип будет без проблем

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




Пост N: 8162
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 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)

Чего не хватает ???
Перезапуск проги и нормально в этом режиме работает прога.

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




Пост N: 4873
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 13.03.26 19:40. Заголовок: Andrey Выкинь строк..


Andrey
Выкинь строку FONT cNFont SIZE nSFont или используй имя фонта, созданного при старте программы в INIT PROCEDURE, не используй создание временных фонтов в контролах и окнах, уже писал тебе про это

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




Пост N: 8163
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 14.03.26 17:28. Заголовок: Стою карточку на TAB..


Стою карточку на TAB (9 вкладок), делаю так:
Загружаю фонт, проверяю его - загружен.
   hFont := GetFontHandle( "Label_Font1" )  // Фонт_карточки_наименований 
? ProcNL(), hFont
?? HB_ValToExp(GetFontParam(hFont))
// Определение мах длины по наименованию
nMaxNameWidth := 0
FOR nJ := 1 TO LEN( aDim )
cText := aDim[ nJ, 1 ] + ":"
nWidth := GetTextWidth( Nil, cText, hFont ) // 14.03.26
nMaxNameWidth := MAX( nWidth, nMaxNameWidth )
NEXT
?? "nMaxWidth=",nMaxNameWidth
....
Потом вывожу на форму так:
@ nRow, nCol LABEL &cObj VALUE cName + ":" ;
... FONT "Label_Font1" // Фонт_карточки_наименований

Фонт на форме маленький... Почему ?

Вот результат в логе:
 
>>> SHOWPAGECARD(1157) --> Source\Tbrw_fCard.prg 537531818 {"Arial", 28, .T., .F., .F., .F., 0, 27, 44, "Label_Font1"} nMaxWidth= 553
>>> SHOWPAGECARD(1157) --> Source\Tbrw_fCard.prg 0 {"Tahoma", 18, .F., .F., .F., .F., 0, 0, 0, ""} nMaxWidth= 192
>>> SHOWPAGECARD(1157) --> Source\Tbrw_fCard.prg 0 {"Tahoma", 18, .F., .F., .F., .F., 0, 0, 0, ""} nMaxWidth= 188
>>> SHOWPAGECARD(1157) --> Source\Tbrw_fCard.prg 0 {"Tahoma", 18, .F., .F., .F., .F., 0, 0, 0, ""} nMaxWidth= 228
>>> SHOWPAGECARD(1157) --> Source\Tbrw_fCard.prg 0 {"Tahoma", 18, .F., .F., .F., .F., 0, 0, 0, ""} nMaxWidth= 180
>>> SHOWPAGECARD(1157) --> Source\Tbrw_fCard.prg 0 {"Tahoma", 18, .F., .F., .F., .F., 0, 0, 0, ""} nMaxWidth= 240
>>> SHOWPAGECARD(1157) --> Source\Tbrw_fCard.prg 0 {"Tahoma", 18, .F., .F., .F., .F., 0, 0, 0, ""} nMaxWidth= 200
>>> SHOWPAGECARD(1157) --> Source\Tbrw_fCard.prg 0 {"Tahoma", 18, .F., .F., .F., .F., 0, 0, 0, ""} nMaxWidth= 179
>>> SHOWPAGECARD(1157) --> Source\Tbrw_fCard.prg 0 {"Tahoma", 18, .F., .F., .F., .F., 0, 0, 0, ""} nMaxWidth= 230

После первой проверки - фонт пропадает hFont = 0 ! Почему ?

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




Пост N: 8164
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 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
......


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




Пост N: 4874
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 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 ;
...

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




Пост N: 8165
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 18.03.26 15:03. Заголовок: SergKis пишет: доб..


SergKis пишет:

 цитата:
добавь перед
DO EVENTS


Сделал, всё равно сегодня один вылет уже был.
Комп хороший у юзера - Intel Xeon 3.40GHz, ОЗУ 16 Гб, Windows Server 2008
Запуск проги МиниГуи через удалённое подключение к серверу-терминалов.

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




Пост N: 4875
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 18.03.26 19:59. Заголовок: Andrey пишет всё рав..


Andrey пишет
 цитата:
всё равно сегодня один вылет уже был


У тебя сервер, если процессор занят, то GUI может не работать (не доходит очередь или мало времени на создание контрола), оберни GetBox в цикл с begin sequnce пока не получишь handle. Попробуй TEXTBOX - стандартный контрол, вместо GetBox

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




Пост N: 4876
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 19.03.26 12:35. Заголовок: PS. Исп. установку п..


PS.
Исп. установку приоритета задач в Windows, которая позволяет выделить больше ресурсов процессора конкретной программе или игре.

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




Пост N: 8175
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 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 и моя прога не должна "падать" !!!
Григорий, более подробно отправил письмо на почту.
Почему в других языках намного больше объектов показывают в карточках, а в МиниГуи идёт вылет ?

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




Пост N: 4881
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 09.04.26 09:34. Заголовок: Andrey пишет Как эту..


Andrey пишет
 цитата:
Как эту ошибку исправить в коде МиниГуи ???
Если там объект не создаётся, то пусть выходит сообщение об ошибке создания объекта GETBOX и моя прога не должна "падать" !!!


Запрос "рабочий стол windows Server 2012 назначение" к Google. Ответ
 цитата:

...
Инфраструктура виртуальных рабочих столов (VDI): Использование сервера для предоставления пользователям виртуальных машин с графическим интерфейсом.
В отличие от режима Core, установка рабочего стола увеличивает нагрузку на ресурсы, но существенно упрощает работу администраторам, не привыкшим к интерфейсу командной строки


Вообще то, это твоя работа учитывать условия эксплуатации, при разработке\реализации проекта, т.е. проверки должен ты сам делать, МиниГуи - это инструмент в твоих руках. На "толстых" клиентах, у меня, с GETBOX никогда не было проблемм

 цитата:
Почему в других языках намного больше объектов показывают в карточках, а в МиниГуи идёт вылет ?


Мы все знаем ее и "Синий экран смерти"

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




Пост N: 8176
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 09.04.26 13:06. Заголовок: Andrey пишет: Систе..


Andrey пишет:

 цитата:
Система Win Server 2012 - 16 ОЗУ - комп хороший, запускают только мою большую прогу на МиниГуи.
Такие же ошибки были ранее и на Win10 !!!


SergKis пишет:

 цитата:
Вообще то, это твоя работа учитывать условия эксплуатации, при разработке\реализации проекта, т.е. проверки должен ты сам делать, МиниГуи - это инструмент в твоих руках. На "толстых" клиентах, у меня, с GETBOX никогда не было проблемм


Эта ошибка появилась с версии 24.ХХ - до этого использовал 23.09.2 и не было такой ошибки.

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 220 , стр: 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 час. Хитов сегодня: 84
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет