Форум » 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. ) А по простому нельзя сделать ?

Ответов - 138, стр: 1 2 3 4 5 6 7 All

SergKis: Andrey пишет Btn_01 Of Form_CardOpl Not defined. На окне Form_CardOpl timer есть ? Если есть, его (все timer работающие) надо отключать, когда, что то делаешь и вкл. когда закончил.

Andrey: SergKis пишет: На окне Form_CardOpl timer есть ? Нет у него таймера. У меня и в других окнах так же вылетает.

SergKis: Andrey пишет Нет у него таймера. У меня и в других окнах так же вылетает. Проверить не могу, не стоит bcc 5.8, но по тексту имя окна hmg_alert() "oDlg"[pre2] LOCAL cForm := "oDlg" IF _IsWindowDefined( cForm ) nLineas := 0 WHILE _IsWindowDefined( cForm := "oDlg" + hb_ntos( ++nLineas ) ) END ENDIF ... DEFINE WINDOW (cForm) WIDTH 0 HEIGHT 0 TITLE cTitle MODAL NOSIZE BACKCOLOR aBackColor ; ON INTERACTIVECLOSE ( lPressButton .OR. lClosable ) ; ON RELEASE iif( !lPressButton .AND. lClosable, _HMG_ModalDialogReturn := 0, NIL ) FillDlg( cMsg, aOptions, nLineas, cIcoFile, nIcoSize, aBtnColors, bInit, lClosable, cFontName ) // тут снятие END WINDOW ... добавь в bInit := {|| _logfile(.t., This.Name), this.topmost := .t. ,; this.Btn_01.Fontcolor := BLACK ,; this.Btn_02.Fontcolor := BLACK } какое имя окна ? [/pre2]


Andrey: SergKis пишет: какое имя окна ? Код: [pre2] Function MG_YESNO(...) ..... ? ProcNameLine() + "--1-----------------------" bInit := {|| _logfile(.t., This.Name), this.topmost := .t. ,; this.Btn_01.Fontcolor := BLACK ,; this.Btn_02.Fontcolor := BLACK } // строка 166 ? ProcNameLine() + "--2-----------------------" // строка 168 nK := HMG_Alert( cMsg, aButton, cTitle, NIL, cIcoRes, nIcoSize, aButColor, bInit ) // строка 169 [/pre2] Лог-файл: [pre2]Вызов из: MG_YESNO(162) --> util_Alert.prg--1----------------------- Вызов из: MG_YESNO(168) --> util_Alert.prg--2----------------------- Form_CardOpl [/pre2] Вылет по ошибке: [pre2]Error MGERROR/0 Control: Btn_01 Of Form_CardOpl Not defined. Program terminated. --------------------------------- Stack Trace --------------------------------- Called from MSGMINIGUIERROR(100) in module: h_error.prg Called from SETPROPERTY(3977) in module: h_controlmisc.prg Called from (b)MG_YESNO(166) in module: util_Alert.prg Called from DO_WINDOWEVENTPROCEDURE(82) in module: h_objmisc.prg Called from FILLDLG(355) in module: h_alert.prg Called from HMG_ALERT(166) in module: h_alert.prg Called from MG_YESNO(169) in module: util_Alert.prg [/pre2]

SergKis: Andrey А если так[pre2] SET OOP ON ... bInit := {|ow| _logfile(.t., This.Name, ow:Name), this.topmost := .t. ,; this.Btn_01.Fontcolor := BLACK ,; this.Btn_02.Fontcolor := BLACK } [/pre2]

SergKis: PS Что покажет ? ProcNameLine() + "--2-----------------------", ThisWindow.Name // строка 168

Andrey: SergKis пишет: А если так Вылет:[pre2] Error BASE/1004 Метод не экспортирован: NAME --------------------------------- Stack Trace --------------------------------- Called from NAME(0) Called from (b)MG_YESNO(166) in module: util_Alert.prg Called from DO_WINDOWEVENTPROCEDURE(82) in module: h_objmisc.prg Called from FILLDLG(355) in module: h_alert.prg Called from HMG_ALERT(166) in module: h_alert.prg [/pre2] SergKis пишет: Что покажет [pre2]Вызов из: MG_YESNO(162) --> util_Alert.prg--1----------------------- Вызов из: MG_YESNO(168) --> util_Alert.prg--2----------------------- Form_CardOpl [/pre2]

SergKis: Andrey Error BASE/1004 Метод не экспортирован: NAME Извини, это в моей версии передается объект окна, а тут нет такого. Хотел проверить создание окна oDlg было ли ? Если было то фокус должен был быть на нем и this среда его. Похоже окно hmg_alert не создано, т.к. this среда осталась от предыдущего окна. Пробни[pre2] bInit := {|| _logfile(.t., This.Name, _IsWindowDefined('oDlg')), this.topmost := .t. ,; this.Btn_01.Fontcolor := BLACK ,; this.Btn_02.Fontcolor := BLACK } // строка 166 [/pre2]

Andrey: Поставил вызов этой функции (без ow:Name) в главной форме, всё отлично работает. Вот лог: [pre2]Вызов из: TEST(524) --> 11main.prg--0----------------------- Вызов из: MG_YESNO(162) --> util_Alert.prg--1----------------------- Вызов из: MG_YESNO(168) --> util_Alert.prg--2----------------------- Form_Main oDlg .T. [/pre2]

SergKis: А на родном месте ? на маин не так интересно, т.к. окон мало

Andrey: SergKis пишет: Пробни [pre2]Вызов из: TEST(524) --> 11main.prg--0----------------------- Вызов из: MG_YESNO(162) --> util_Alert.prg--1----------------------- Вызов из: MG_YESNO(168) --> util_Alert.prg--2----------------------- Form_Main oDlg .T. .T. Вызов из: MG_YESNO(162) --> util_Alert.prg--1----------------------- Вызов из: MG_YESNO(168) --> util_Alert.prg--2----------------------- Form_CardOpl Form_CardOpl .T. [/pre2] Получается на главной форме (Form_Main) работает, а в нужном окне нет. Почему ? На главной форме таймер сидит. У меня в рабочей программе 3 таймера используются, без них никак ! Отключил таймер. Всё равно такая же ошибка ! Раньше стояла функция MsgYesNo() - решил переделать на свою и облом, то работает, то нет.

SergKis: Andrey пишет Всё равно такая же ошибка ! Если таймеры отключены, то трассируй h_alert.prg на предмет значения ThisWindow.name в *-----------------------------------------------------------------------------* STATIC FUNCTION FillDlg( cMsg, aOptions, nLineas, cIcoFile, nIcoSize, aBtnColors, bBlock, lClosable, cFont ) *-----------------------------------------------------------------------------* ... На главной форме таймер сидит. У меня в рабочей программе 3 таймера используются, без них никак ! По мне, без глобальных таймеров обходиться можно (он может нарушить this среду если не управлять его вкл.\выкл.). Просто распределяешь работу таймера на смену режимов\окон\событий клавы и мыши ... Таимер тек. окна то же может нарушить this среду, без упр. вкл.\выкл., если работает блок кода для контрола, кнопки например - это надо учитывать делая останов\пуск таймера

Andrey: Andrey пишет: Отключил таймер. Всё равно такая же ошибка ! Дело не в таймере ! Раньше стояла функция MsgYesNo() - решил переделать на свою через HMG_ALERT() и облом, то работает, то нет.

SergKis: Andrey пишет решил переделать на свою через HMG_ALERT() и облом, то работает, то нет. Так потестируй h_alert.prg _logfile(...), раз у тебя вылезло в данном месте стабильное сваливание, найди причину, пересобирая либу

SergKis: Andrey пишет Дело не в таймере ! Если у тебя глобальные таймеры и ты ими не жестко управляешь, то могут быть бяки при работе с This средой. Возможно, надо отказаться в таком случае от нее и оперировать факт. именами окон и контролов всегда. Только это хотел сказать про таймер и this среду

Andrey: Пробовал в других местах вызов HMG_ALERT(), работает. Как вызываю из таблицы свою карточку (окно Form_CardOpl), вот там вылетает... Обычное окно, по базе ищет что нужно. Мистика какая то ...

SergKis: Andrey пишет Как вызываю из таблицы свою карточку (окно Form_CardOpl), вот там вылетает... Обвесь _logfile(...) как писал выше в h_alert.prg, посмотри, что даст log У бери NOSHOW при создании окна и снова посмотри. Понятнее будет с мистикой ...

Andrey: У меня 2 окна скрываются, т.е. делаю DoMethod( сForm, "Hide" ) два раза, чтобы окон много не было. Может из-за этого, но по другому нельзя. Забодался искать. Сделал так: [pre2] bInit := {|| _logfile(.t., This.Name, _IsWindowDefined('oDlg')) ,; SetProperty("oDlg", "Topmost", .t. ) ,; SetProperty("oDlg", "Btn_01", "Fontcolor", BLACK ) ,; SetProperty("oDlg", "Btn_02", "Fontcolor", BLACK ) }[/pre2] Надеюсь теперь ВСЕГДА будут работать !



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