Форум » 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 пишет Хотелось бы иметь и альтернативу этому кодоблоку. Альтернатива - своя функция (библиотека их: AlertYesNo(), ...)[pre2] FUNC Alert(...) LOCAL nRet := 2 LOCAL bBlk := ... nRet := hmg_alert(..., bBlk) RETURN nRet [/pre2]

Andrey: SergKis пишет: Альтернатива - своя функция (библиотека их: AlertYesNo(), ...) Ну да. Так тоже можно.... Ждём новую версию тогда...

Andrey: gfilatov2002 пишет: EraseWindow( this.name ), ; А это для чего нужно ? gfilatov2002 пишет: this.say_06.alignment := "left", Если такой строки не будет - какой будет результат ?


gfilatov2002: Andrey пишет: Если такой строки не будет - какой будет результат ? Врт такой будет экран Код [pre] _HMG_ModalDialogReturn := 2 cMsg := "Первая строка;;Вторая строка;" + Repl( "-._.", 15 ) + ";;Четвертая строка" SET MSGALERT FONTCOLOR TO NAVY b := {|idx| this.say_01.alignment := "left", ; this.say_03.alignment := "left", ; this.say_04.alignment := "left", ; ;// this.say_06.alignment := "left", ; ;// EraseWindow( this.name ), ; ;// HMG_DrawIcon( this.name, "demo.ico", 30, 30, 48, 48, , .t. ), ; this.topmost := .t.} nK := HMG_Alert( cMsg, {"&Поиск","&Отмена", "&Восстановить"}, "Внимание!", Nil, "alert.ico", 64, {YELLOW, RED, GREEN}, b ) [/pre]

Andrey: gfilatov2002 пишет: ;// this.say_06.alignment := "left", ; Не совсем понятно. Допустим нет в сообщении 6-8 строки вообще. А сделано так (т.е. по максимому для больших сообщений): this.say_06.alignment := "left", ; this.say_07.alignment := "left", ; this.say_08.alignment := "left", ; Что тогда будет ? Вылет ?

SergKis: Andrey У тебя ТВОЙ массив с текстами, работай от его длины AEval(aTxt, {|ct,nt| ct := 'Say_'+strzero(nt,2), This.&(ct).Aligment :='Left' })

Andrey: Понял. Спасибо !

Andrey: Версия МиниГуи 19.02 Запускаю свою большую программу. Окно [pre2] DEFINE WINDOW Form_Main ; MAIN NOSHOW ; ..... END WINDOW // Показ заставки: DEFINE WINDOW PICTURE/DELAY/ ON RELEASE _DefineSplashWindow( "Form_Splash",,,,, "SPLASH", 10, {|| Addition_MainForms() } ) ACTIVATE WINDOW Form_Splash, Form_Main ...............[/pre2] В Procedure _SplashDelay() запуск нескольких функций через Eval( hb_macroBlock( M->aRunCheck[nI] ) ) Ставлю в одной из них вот так: nK := HMG_Alert( cMsg, {"&Перезапуск","&Отмена"}, "Внимание!", Nil, "iExclam64", 64 ) Прога вешается наглухо !!! Если пытаюсь снять прогу через МЕНЕДЖЕР ЗАДАЧ, то и он сам вешается... Если меняю сообщение на MsgYesNo( cMsg, "Внимание!", .F. ) - то ВСЁ работает !!! Почему ? Что ещё нужно HMG_Alert() ?

SergKis: Andrey У тебя нет окна main и не стоит режим работы без main, для hmg_alert нужен окно-родитель Сделай так примерно[pre2] DEFINE WINDOW Form_Main ; MAIN NOSHOW ; ON INIT _wPost(1) ; ..... (This.Object):Event( 1, {|| SplasShow() }) END WINDOW ACTIVATE WINDOW Form_Main ... STAT FUNC SplashShow() // здесь окна и запуски ф-й из массива RETURN Nil [/pre2]

Andrey: Спасибо ! Буду пробовать !

Andrey: Всем привет ! Разбираюсь с новым HMG_Alert() А как сделать фокус на второй кнопке ? Вот так не работает: [pre2] bInit := {|| this.Btn_02.Setfocus }[/pre2]

SergKis: Andrey Посмотри внимательно пример от Григория (выше), думаю, ответ найдешь.

Andrey: Да, нашёл. _HMG_ModalDialogReturn := 2 А почему не срабатывает this.Btn_02.Setfocus ? Или нужно писать [pre2] Domethod(ThisWindow.Name, "Btn_02", "Setfocus")[/pre2] Хотя попробовал, тоже не срабатывает.

SergKis: Andrey пишет В исходнике, ясно написано (если глянешь )[pre2] IF HB_ISBLOCK( bBlock ) Do_WindowEventProcedure( bBlock, This.Index, 'WINDOW_ACTIVATE' ) ENDIF oDlg.&( aBut[ iif( Empty( _HMG_ModalDialogReturn ), 1, _HMG_ModalDialogReturn ) ] ).SetFocus() [/pre2] Т.е. стачала работает блок, потом ...SetFocus Можешь установить блок кода на ON INIT окна в bInit и там сделать This.Btn_02.SetFocus или на др. контрол, игнорируя _HMG_ModalDialogReturn

SergKis: PS Возможно, для большей свободы, строку уст. фокуса можно переставить выше блока

Andrey: Вылетает теперь программа на HMG_Alert(): Error BASE/1132 Переполнение массива: Неверное количество аргументов Called from FILLDLG(329) in module: h_alert.prg Called from (b)HMG_ALERT(150) in module: h_alert.prg Called from DO_WINDOWEVENTPROCEDURE(82) in module: h_objmisc.prg Called from _ACTIVATEWINDOW(1314) in module: h_windows.prg Called from HMG_ALERT(150) in module: h_alert.prg Строка 329: [pre2] oDlg.&( aBut[ iif( Empty( _HMG_ModalDialogReturn ), 1, _HMG_ModalDialogReturn ) ] ).SetFocus()[/pre2] При таких условиях: первый вызов[pre2] _HMG_ModalDialogReturn := 2 nK := HMG_Alert( cMsg, {"&Да ","&Нет"}, ...)[/pre2] Потом в коде где-то далее делаем простой вызов: [pre2] HMG_Alert( cMsg, {"&Продолжить"}, ...)[/pre2] Т.е. тогда всегда явно нужно указывать для ОДНОЙ кнопки: [pre2] _HMG_ModalDialogReturn := 1[/pre2] Что не очень удобно при написании кода. Причём эту ошибку в отдельном примере не смог сделать.

SergKis: Andrey На базе hmg_alert напиши свои ф-ии, уже говорили выше AlertOk() AlertYesNo() Alert3Btn() Alert4Btn() и используй их с уст. _hmg_modaldialogreturn

SergKis: PS или #xcommand AlertOK()... если не устраивают ф-ии и там все ставь

Andrey: SergKis пишет: На базе hmg_alert напиши свои ф-ии, уже говорили выше Да наверное так и сделаю. Спасибо !

gfilatov2002: SergKis пишет: На базе hmg_alert напиши свои ф-ии Благодарю за предложение Уже добавил в новую бета-сборку такие функции по аналогии с функциями Msg*(): AlertYesNo ( Message, Title, RevertDefault, Icon, nSize, aColors, bInit ) AlertYesNoCancel ( Message, Title, nDefaultButton, Icon, nSize, aColors, bInit ) AlertRetryCancel ( Message, Title, nDefaultButton, Icon, nSize, aColors, bInit ) AlertOkCancel ( Message, Title, nDefaultButton, Icon, nSize, aColors, bInit ) AlertInfo ( Message, Title, Icon, nSize, aColors, bInit ) AlertStop ( Message, Title, Icon, nSize, aColors, bInit ) AlertExclamation ( Message, Title, Icon, nSize, aColors, bInit )



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