Форум » GUI » MsgInfo(), MsgStop(), MsgExclamation(), MsgDebug() » Ответить

MsgInfo(), MsgStop(), MsgExclamation(), MsgDebug()

Andrey: Уже скоро 2019 год будет, а эти функции до сих пор неизменны. Экраны большие у пользователей уже давно. Замучили юзера вопросом, а побольше шрифт можно сделать для этих окон ? A то читать приходиться через лупу. Настолько мелкий шрифт в этих сообщениях для больших экранов. Можно ли установить для этих окон при запуске программы РАЗМЕР фонта, ну и до кучи сам фонт ? Типа: [pre2]SET MSGFUNCT FONT TO cFont, nFontSize [/pre2] Как есть команда: [pre2]SET FONT TO cFont, nFontSize [/pre2] Ну и до кучи задать другой размер иконки и картинки: [pre2]SET MSGFUNCT SIZE 256 // или 48, 64, 72, 96, 128 SET MSGINFO SIZE 64 ICO "INFO64.ICO"[/pre2] Тогда за иконку отвечать будет сам программист. Нет иконки в ресурсах, и нет в окошке иконки. И цвета окошек тоже: [pre2]SET MSGINFO BACKCOLOR aDim1 FONTCOLOR aDim2 SET MSGSTOP BACKCOLOR aDim1 FONTCOLOR aDim2 SET MSGEXCL BACKCOLOR aDim1 FONTCOLOR aDim2 SET MSGDEBUG BACKCOLOR aDim1 FONTCOLOR aDim2[/pre2] Если это нельзя сделать для этих функций и не хочется увеличивать размер ресурсов для текущей версии МиниГуи, то хотелось бы иметь дополнительную библиотеку MiniguiExt.lib и файл ресурсов miniguiExt.res Т.е. сделать доп.функции: [pre2]Msg2Info(), Msg2Stop(), Msg2Exclamation(), Msg2Debug() [/pre2] Оставить обычный синтаксис и типа такого: [pre2]SET MSG2FUNCT FONT TO cFont, nFontSize SET MS2GINFO SIZE 64 ICO "INFO64.ICO" Msg2Info( cMsg , "Инфо", ......, cFont, nFontSize, 64, "INFO64.ICO", aDim1, aDim2 )[/pre2] ------------------------------------------------------------------ Надоели танцы с бубнами, чтобы сменить иконку в этих функциях !!! Сначала в ресурсном файле объявить: #define MSGINFO 1005 Потом в prg-модуле нужно ставить: #define MSGINFO 1005 и ещё потом уже где тебе нужно: MsgInfo( cMsg , "Инфо", MSGINFO, .F. ) А по простому нельзя сделать ?

Ответов - 194, стр: 1 2 3 4 5 6 7 8 9 10 All

SergKis: Andrey пишет А сам текст хотелось бы "затолкать" в объект EDITBOX в режиме READONLY ... Такое решение было бы просто отличным для многих ! Вариант от Pasha более перспективный, т.к. просто вывести ошибки это меньшая часть дела. Надо с ошибки выйти на карточку с ошибкой для исправления. Потому надо сразу все ошибки выводить в TsBrowse и организовывать выход при DblClick и Enter на исправление ошибки (можно и кнопки добавлять) на окно. Тсб может быть с одной колонкой или иметь их несколько. Пример, как это делать, есть в Advanced\App_OopReport\demo2.prg функция ( использование HMG_Alert() для этого) STATIC FUNC AgeCard( oWnd, oBrw, oCnl ) + STATIC FUNC bAgeCard( oWnd, oBrw, oCnl ) ... Вместо тсб можно и EDITBOX прикрутить в bInit блоке кода.

gfilatov2002: Andrey пишет: А сам текст хотелось бы "затолкать" в объект EDITBOX в режиме READONLY Благодарю за предложение! Результат отработки функции для вашего примера см. на картинке

Andrey: Pasha пишет: Я в подобном случае проверяю количество строк, и при превышении некоторого значения вместо alert формирую окно с бровсом и кнопками Да это тоже вариант, но это не есть хорошо. Если это ОДНА функция, то такое решение универсальное и самое простое для всех. В противном случае нужно делать свою отдельную функцию и в коде писать обращение к своей функции. SergKis пишет: т.к. просто вывести ошибки это меньшая часть дела. Надо с ошибки выйти на карточку с ошибкой для исправления. Потому надо сразу все ошибки выводить в TsBrowse и организовывать выход при DblClick и Enter на исправление ошибки (можно и кнопки добавлять) на окно. Тсб может быть с одной колонкой или иметь их несколько. Не надо лишних движений. Юзер вошёл в список квартир, ни фига не заполнил и вышел из списка. Вот для таких случаев и надо ему выводить КРАСНОЕ ОКНО с ошибками, ни фига не видят.


Andrey: gfilatov2002 пишет: Результат отработки функции для вашего примера см. на картинке А самому пощупать когда можно будет ?

gfilatov2002: Andrey пишет: самому пощупать когда можно будет ? После выхода апрельской сборки в конце месяца

Andrey: Спасибо ! Буду ждать ! Только текст проверить на кол-во строк. При 150 строках падала программа... а может и с меньшим кол-вом строк...

gfilatov2002: Andrey пишет: Только текст проверить на кол-во строк. Проверял на 1500 строк - работает нормально

Andrey: Ещё одно уточнение, кнопку на окне прижать вправо по месту окончания объекта EDITBOX, красивей будет !

SergKis: Andrey пишет Не надо лишних движений. Юзер вошёл в список квартир, ни фига не заполнил и вышел из списка. Вот для таких случаев и надо ему выводить КРАСНОЕ ОКНО с ошибками, ни фига не видят. ... Только текст проверить на кол-во строк. При 150 строках падала программа... а может и с меньшим кол-вом строк... Если они ни фига не видят и не смотрят, то и 150 строк смотреть не будут, но когда нибудь все равно исправлять надо. Тогда достаточно спросить "В 150 карточках\квартирах ошибки", Распечатать ? Yes \ No И безразмерных EditBox не надо. На крайняк, есть внешние редакторы с readonly режимами.

gfilatov2002: Andrey пишет: кнопку на окне прижать вправо Так подходит

SergKis: Andrey пишет Ещё одно уточнение, кнопку на окне прижать вправо по месту окончания объекта EDITBOX, красивей будет ! Вот, вот, тут и начинается ... у каждого свое. А почему слева под image пусто, надо editbox под image и на всю ширину окно, но с отступами, а до edit заголовок (справа от image) и т.д. и т.п.

SergKis: PS Использование TsBrowse, вместо editbox - более интересно, на мой взгляд

Andrey: gfilatov2002 пишет: Так подходит Отлично ! SergKis пишет: Использование TsBrowse, вместо editbox - более интересно, на мой взгляд Да, если нужен полный журнал этих ошибок для правки. Но как правило юзер живёт своими измерениями. Если выводить 5 сточек ошибок, то опять нужен код для учёта. Вывод сообщения в HMG_Alert(): 10 ошибок + .... и ещё 40 строчек ошибок ! А тут универсальная функция, если не входит список ошибок в границы окна, то EDITBOX со скролингом поможет оценить юзеру что дофига ошибок, т.е. забыл сделать и юзер вернётся опять в список и исправит что забыл сделать. Позволяет программисту не думать о кол-ве строк ошибок.

SergKis: Andrey пишет А тут универсальная функция Editbox универсальности практически не добавляет, а тсб с массивом\алиасом решает до фига. Наверно половину окон с таблицами заменит, надо только немного из bInit подстроить работу, колонки, header, footer, ... Если окну добавить режим CHILD к MODAL, то получишь, действительно, универсальное окно. Т.е. задав только (хотя бы в размерах editbox)[pre2] DEFINE TBROWSE Tsb_Alert AT nY,nX WIDTH nW HEIGHT nH ALIAS xArray CELL :nHeightHead := 1 END TBROWSE [/pre2] уже будешь иметь таблицу замену editbox, если xArray многоколоночный массив, то и таблица с колонками, если xAlias это ALIAS области, то можешь в bInit настроить на :LoadFields(). И т.д. настройки ...

SergKis: Пример BASIC\EditBox модифицированный [pre2] /* * MINIGUI - Harbour Win32 GUI library Demo * */ #include "minigui.ch" FUNCTION Main LOCAL cVal := ' demo ', i, cTxt := '' cVal += repl('_', 150)+' '+cVal+CRLF FOR i := 1 TO 9500 cTxt += str(i,4)+cVal NEXT DEFINE WINDOW Form_1 ; AT 0, 0 ; WIDTH 640 HEIGHT 480 ; TITLE 'Harbour MiniGUI Demo' ; ICON 'demo.ico' ; MAIN ; ON INIT ( Form_1.Edit_1.Value := cTxt ) ; FONT 'Arial' SIZE 10 DEFINE STATUSBAR STATUSITEM 'HMG Power Ready!' END STATUSBAR @ 30, 10 EDITBOX Edit_1 ; WIDTH 410 ; HEIGHT 140 ; VALUE '' READONLY ; TOOLTIP 'EditBox' ; MAXLENGTH len(cTxt)+100 ; ON CHANGE ShowRowCol() // NOHSCROLL DEFINE BUTTON B ROW 250 COL 10 CAPTION 'Set CaretPos' ACTION ( Form_1.Edit_1.CaretPos := Val( InputBox( 'Set Caret Position', '' ) ), Form_1.Edit_1.SetFocus ) END BUTTON DEFINE TIMER Timer_1 INTERVAL 100 ACTION ShowRowCol() END WINDOW Form_1.Center() Form_1.Activate() RETURN NIL PROCEDURE ShowRowCol LOCAL s, c, i, e, q s := Form_1.Edit_1.Value c := Form_1.Edit_1.CaretPos e := 0 q := 0 FOR i := 1 TO c IF SubStr ( s, i, 1 ) == Chr( 13 ) e++ q := 0 ELSE q++ ENDIF NEXT i Form_1.StatusBar.Item( 1 ) := 'Row: ' + hb_ntos( e + 1 ) + ' Col: ' + hb_ntos( q ) IF e < 7 Form_1.Edit_1.Refresh ENDIF RETURN [/pre2] Листаем pgDn станицами до индикации Row: 385 Col: 1 Жмем pgDn и получаем индикацию Row: 3 Col: 37 , в просмотре, как бы все правильно. Но нажав стрелку вверх, пару раз, улетаем в начало строк. Наличие\отсутствие MAXLENGTH не влияет на ситуацию. Есть, наверно, ограничения на EDITBOX ? У Андрея, как понимаю, происходит чтение файла и показ в HMG_Alert() и возникнут вопросики в связи с EDITBOX. Вот вырезка с его тестового примера[pre2] cText := "" FOR nI := 1 TO 2150 cText += "Квартира: " + HB_NtoS(nI) + " не заполнен тариф оплаты ! . ;" NEXT ... cMsg := cText // высчитываем размерность текста cMsg := AtRepl( ";", cMsg, CRLF ) cMsg := StrTran(cMsg, CRLF, chr(10)) // если текст кривой cMsg := StrTran(cMsg, chr(10), CRLF) ... @ nG, nCMemo EDITBOX Edit_Memo WIDTH nWMemo HEIGHT nHMemo ; VALUE cMsg READONLY ; BACKCOLOR aEBoxBack FONTCOLOR aFontColor ... [/pre2] т.е. HSCROLL назначен, но не работает, на контроле он присутствует, но без ползунка и включается перенос\искажение текста по разным строкам. Т.е. в начале ok! в конце ерунда. [pre2] Квартира: 1 не заполнен тариф оплаты ! . Квартира: 2 не заполнен тариф оплаты ! . Квартира: 3 не заполнен тариф оплаты ! . Квартира: 4 не заполнен тариф оплаты ! . Квартира: 5 не заполнен тариф оплаты ! . Квартира: 6 не заполнен тариф оплаты ! . Квартира: 7 не заполнен тариф оплаты ! . Квартира: 8 не заполнен тариф оплаты ! . ... Квартира: 2133 не заполнен тариф оплаты ! . Квартира: 2134 не заполнен тариф оплаты ! . Квартира: 2135 не заполнен тариф оплаты ! . Квартира: 2136 не заполнен тариф оплаты ! . Квартира: 2137 не заполнен тариф оплаты ! . Квартира: 2138 не заполнен тариф оплаты ! . Квартира: 2139 не заполнен тариф оплаты ! . Квартира: 2140 не заполнен тариф оплаты ! . Квартира: 2141 не заполнен тариф оплаты ! . Квартира: 2142 не заполнен тариф оплаты ! . Квартира: 2143 не заполнен тариф оплаты ! . Квартира: 2144 не заполнен тариф оплаты ! . Квартира: 2145 не заполнен тариф оплаты ! . Квартира: 2146 не заполнен тариф оплаты ! . Квартира: 2147 не заполнен тариф оплаты ! . Квартира: 2148 не заполнен тариф оплаты ! . Квартира: 2149 не заполнен тариф оплаты ! . Квартира: 2150 не заполнен тариф оплаты ! . [/pre2]

SergKis: PS Размер width у EDITBOX достаточный для показа любой всей строки из показанных, справа места от CRLF много

Andrey: Всем привет ! Почему по коду идёт вот такая ошибка: Error MGERROR/0 Only Panel windows can be defined inside a DEFINE WINDOW...END WINDOW structure. Program terminated. --------------------------------- Stack Trace --------------------------------- Called from MSGMINIGUIERROR(100) in module: h_error.prg Called from _DEFINEWINDOW(150) in module: h_windows.prg Called from WAITWINDOW(2742) in module: h_windows.prg Called from CREATEDATOSPRND31(783) in module: Tsb_demo7.prg При вызове вот этой функции WaitWindow( 'Загрузка базы ...', .T. ) // open the wait window И можно это малюсенькое окошечко сделать крупней ? Юзера на своих мониторах просто не замечают. Может через параметр передавать хотя бы: WaitWindow( 'Загрузка базы ...', .T. , 500,200,RED,"DejaVu Sans Mono",16,YELLOW) где RED - цвет фона формы, YELLOW-цвет текста формы И будет юзеру счастье ....

Andrey: Последняя версия МиниГуи. Использую ТСБ, в нём: [pre2] // удаление/восстановление записи разрешена // кнопка для удаления, будет работать и на восстановление :SetDeleteMode( .T., .F., {|| AlertYesNo(iif((oBrw:cAlias)->(Deleted()), "Восстановить", "Удалить") + ; " запись в таблице ?", "Подтверждение") } )[/pre2] по клавише DEL вызов функции в которой: [pre2] lDelete := (oBrw:cAlias)->(Deleted()) ..... IF !lDelete cMsg := "1) ....;;" cMsg += "Вы действительно хотите удалить запись в таблице ?" aColors := _SetMsgAlertColors( {179, 30, 173} ) IF !AlertYesNo( cMsg, "Выбор действия", , "Cancel64x1", 64 , {RED,LGREEN} ) RETURN NIL ENDIF SET MSGALERT BACKCOLOR TO aColors ENDIF // встроенный метод для удаления текущей записи lChange := oBrw:DeleteRow(.F., .T.) ....[/pre2] После вызова первого 1) - AlertYesNo() если нажать ДА, то происходит вылет: [pre2]Error BASE/1132 Переполнение массива: Неверное количество аргументов Args: [1] = A { ... } length: 2 [2] = N 3 --------------------------------- Stack Trace --------------------------------- Called from EVENTS(337) in module: h_events.prg Called from DOMESSAGELOOP(0) Called from _ACTIVATEWINDOW(1514) in module: h_windows.prg Called from HMG_ALERT(176) in module: h_alert.prg Called from _ALERT(115) in module: h_alert.prg Called from ALERTYESNO(20) in module: h_alert.prg Called from (b)MYSETEDITTSB(778) in module: Forma_D40setup.prg Called from TSBROWSE:DELETEROW(3102) in module: h_tbrowse.prg Called from MYRECNODELETERECOVER(1277) in module: Forma_D40setup.prg Called from (b)FORM_D40SETUP(272) in module: Forma_D40setup.prg Called from DO_CONTROLEVENTPROCEDURE(58) in module: h_objmisc.prg Called from TWNDDATA:DOEVENT(729) in module: h_objects.prg Called from DO_ONWNDLAUNCH(240) in module: h_objmisc.prg Called from (b)INIT(123) in module: h_init.prg Called from EVENTS(1224) in module: h_events.prg Called from DOMESSAGELOOP(0) Called from _ACTIVATEWINDOW(1514) in module: h_windows.prg [/pre2] Строка 176 в модуле h_alert.prg ACTIVATE WINDOW ( cForm ) Почему ? Что не хватает ? Потерялось окно ? P.S. Потом идет вылет на любом AlertXXXX

Dima: А если без ТСБ , тоже глючит в каком нибудь простом примере ? PS Чую косяк у тебя где то.......

Andrey: Dima пишет: А если без ТСБ , тоже глючит в каком нибудь простом примере ? Сделал на простом примере, не вылетает. НО !!! Потом в другом AlertYesNo() вместо текста ЧЕРНЫЙ КВАДРАТ ! Вот ссылка - https://drive.google.com/file/d/1Qtbatqdha93BUirBsHIj05FL82nG8pxZ/view?usp=sharing Значит при использовании в блоке кода вылетит точно !



полная версия страницы