Форум » 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

Andrey: SergKis пишет: У тебя ТВОЙ массив с текстами, работай от его длины AEval(aTxt, {|ct,nt| ct := 'Say_'+strzero(nt,2), This.&(ct).Aligment :='Left' }) Что-то не работает.... Сделал так: [pre2] aTxt := HB_ATokens(cMsg, ";", .F., .F.) cSay := "" FOR nI := 1 TO LEN(aTxt) cSay += "this.say_" + strzero(nI,2) + ".Aligment := 'Left' " cSay += IIF( nI == LEN(aTxt), "" , "," ) NEXT bInit := {|| cSay , this.topmost := .t. }[/pre2] Проще переключатель сделать, типа SET MSGALERT TEXT TO LEFT/CENTER ....

gfilatov2002: Andrey пишет: Что-то не работает Andrey Не парься, в следующей версии hmg_Alert() выравнивание влево будет делаться по умолчанию

SergKis: Andrey пишет Что-то не работает.... Как ты это делаешь ? Все работает. Пример https://TransFiles.ru/jcgdf


SergKis: gfilatov2002 Если убрать имя окна oDlg и добавить форм. динамически имени окна, то можно несколько раз исп. hmg_alert вызов. Пример и текст h_alert.prg тут https://TransFiles.ru/8w8g8 четвертая кнопка на main (Align = 'Left') + на кнопку "Повтор" ( Btn_01, Align = 'Center' ) подвешен вызов еще одной hmg_alert

gfilatov2002: SergKis пишет: добавить форм. динамически имени окна Благодарю за помощь Обязательно использую эту возможность

SergKis: gfilatov2002 Еще надо для LABEL в hmg_alert добавить VCENTERALIGN Если сейчас для строки LABEL поставить BACKCOLOR отличный от окна, то будет вид не очень ...

gfilatov2002: SergKis пишет: для LABEL в hmg_alert добавить VCENTERALIGN Сделал

Andrey: SergKis пишет: Как ты это делаешь ? Все работает. Пример Спасибо ! Я не так делал ! Вот сделал окно для ошибки вылета, теперь у меня свои окошки:

Andrey: Всем привет ! Если самая длинная строка не помещается на окне hmg_Alert(), то она обрывается и её не видно ! Надо бы сделать проверку на длину строки и выводить остаток строки в hmg_Alert(). Как это сделать ?

SergKis: Andrey пишет Как это сделать ? Длину строки знаешь Клиентскую часть и размеры окна тоже В bInit все что надо делай - вычисляй, прибавляй, меняй

Andrey: SergKis пишет: В bInit все что надо делай - вычисляй, прибавляй, меняй Но это опять ерунда выходит. Вместо того чтобы поставить в код hmg_Alert(), делаем опять через bInit ... Вот этот кусочек кода НУЖНО вставить в hmg_Alert() и функция станет универсальной. [pre2] LOCAL nI, nJ, iMax, aDim, cText, nTabSize := 8, lWrap := .T. ...... cMsg := AtRepl( ";", cMsg, CRLF ) aDim := HB_ATokens(cMsg,CRLF,.F.,.F.) cMsg := "" FOR nI := 1 TO LEN(aDim) cText := aDim[nI] IF LEN(cText) > 70 iMax := MLCount( cText, 70, nTabSize, lWrap ) FOR nJ := 1 TO iMax cMsg += MemoLine( cText, 70, nJ, nTabSize, lWrap ) + CRLF NEXT ELSE cMsg += cText + CRLF ENDIF NEXT .... cIcoRes := "iWarning64" HMG_Alert( cMsg, {"&Продолжить"}, cTitle, Nil, cIcoRes, nIcoSize, { aButtColor } , bInit ) [/pre2] Может что и не правильно я написал, поправьте тогда меня. А так приходиться вставлять одинаковые куски кода по своим функциям, где вызываю hmg_Alert(). Дубляж кода постоянно не хочется делать. SergKis пишет: Длину строки знаешь Клиентскую часть и размеры окна тоже Длину строки на моём шрифте 18 - знаю. А для другого фонта вычислять нужно. И чем ограничена ширина окна - я не знаю.... Исходник не смотрел пока.

SergKis: Andrey пишет Вот этот кусочек кода НУЖНО вставить в hmg_Alert() и функция станет универсальной. Не будет универсальной, по height может выходить за пределы экрана, фонт увеличишь опять не попадешь (раньше попадало), надо скролы ставить для прокрутки. И т.д. и т.п. Какие отступы, как полно заполнять окном экран ? И чем ограничена ширина окна - я не знаю.... Шутишь ? Про десктоп забыл ? А так приходиться вставлять одинаковые куски кода по своим функциям, где вызываю hmg_Alert(). Уже писал, повторю (выше в теме и пример был), напиши свою с 1ым блоком кода на базе hmg_Alert(), назови My_Alert() и используй. Фонт ставь от кол-ва строк в массиве и мах. ширины строки в нем, а не в лоб 18 и все. Может на 14 все поместится, на 18 нет. На мой взгляд, свою роль hmg_Alert() и производные от нее выполняют нормально. Расширение возможностей, пожалуйста, через bInit, что угодно делай, хоть контролы добавляй.

Andrey: Всем привет ! Сделал свою функцию MG_Stop(), MG_Info() и т.д. на базе hmg_Alert(). Всё хорошо, но иногда происходит сбой... MsgStop() работает, а MG_Stop() вылетает с ошибкой: Error MGERROR/0 ACTIVATE WINDOW: activate windows within an ON RELEASE window procedure is not allowed. Program terminated. --------------------------------- Stack Trace --------------------------------- Called from MSGMINIGUIERROR(100) in module: h_error.prg Called from _ACTIVATEWINDOW(1294) in module: h_windows.prg Called from HMG_ALERT(167) in module: h_alert.prg Called from MG_STOP(59) in module: util_Alert.prg Почему ? Что нужно сделать, чтобы не вылетало ? МиниГуи последний.

SergKis: Andrey пишет Почему ? Активировать окна в ON RELEASE не разрешено, так вроде переводится.

Andrey: SergKis пишет: Активировать окна в ON RELEASE не разрешено, так вроде переводится. А почему тогда MsgStop работает нормально ? Как сделать, чтобы hmg_Alert() тоже заработал в этом режиме ?

SergKis: Andrey пишет А почему тогда MsgStop работает нормально ? Это winapi. Как сделать, чтобы hmg_Alert() тоже заработал в этом режиме ? Это hmg, т.е. DEFINE WINDOW ... END WINDOW Писать, наверно, по другому.

Andrey: Всем привет! Опять очередная загадка... В таблице клавишей DEL удаляю цифры. Происходит вылет по HMG_ALERT() ! Вот ошибка: Error MGERROR/0 Control: Btn_01 Of Form_AYC Not defined. Program terminated. --------------------------------- Stack Trace --------------------------------- Called from MSGMINIGUIERROR(100) in module: h_error.prg Called from SETPROPERTY(3792) in module: h_controlmisc.prg Called from (b)MG_YESNO(137) in module: util_Alert.prg Called from DO_WINDOWEVENTPROCEDURE(82) in module: h_objmisc.prg Called from FILLDLG(342) in module: h_alert.prg Called from (b)HMG_ALERT(167) 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(167) in module: h_alert.prg Called from MG_YESNO(147) in module: util_Alert.prg Called from AYC_DELREC(1975) in module: form_AbonYearCalc.prg Called from (b)TAB_AYC(793) in module: form_AbonYearCalc.prg Called from _DOCONTROLEVENTPROCEDURE(1865) in module: h_windows.prg Called from EVENTS(699) in module: h_events.prg Called from DOMESSAGELOOP(0) Called from _ACTIVATEWINDOW(1499) in module: h_windows.prg MG_YESNO() моя функция для HMG_ALERT(), вот код: [pre2]FUNCTION MG_YesNo( cMsg, cTitle, cIcoRes, nIcoSize, bInit, aBackColor, aFontColor ) LOCAL aButton := {" &Да "," &Нет "} ................ DEFAULT cTitle := "Внимание!" , bInit := {|| this.topmost := .t. ,; this.Btn_01.Fontcolor := BLACK ,; this.Btn_02.Fontcolor := BLACK } // строка 137 [/pre2] Почему ? Если цифры вбивать, то всё нормально.

Andrey: Я понял почему. Григорий давно уже мне помогал делать и сделал на окно обработку кнопок: [pre2] // --------------- назначение клавиш ------------------- on key INSERT action AYC_InsRec(Int(Val(aTabName[ GetProperty(_HMG_ThisFormName,"Tab_1","Value") ])),"Set_Columns" + hb_ntos(GetProperty(_HMG_ThisFormName,"Tab_1","Value"))) on key DELETE action AYC_DelRec(Int(Val(aTabName[ GetProperty(_HMG_ThisFormName,"Tab_1","Value") ])),"Set_Columns" + hb_ntos(GetProperty(_HMG_ThisFormName,"Tab_1","Value")))[/pre2] При редактирование таблицы при нажатии клавиши DEL происходит вызов на функцию AYC_DelRec(). Как исправить данную коллизию ?

SergKis: Andrey пишет При редактирование таблицы при нажатии клавиши DEL происходит вызов на функцию AYC_DelRec() [pre2] 1. Делал проверку наличия кнопок на форме bInit := {|cw,ab| cw := This.Name, ab := {'Btn_01', 'Btn_02', 'Btn_03', 'Btn_04'}, this.topmost := .t., ; AEval(ab, {|cb| iif( _IsControldefined(cb, cw), SetProperty(cw, cb, 'FONTCOLOR', BLACK), ) }) 2. Перенес назначение кнопок с окна на таблицу (держал бы ее всегда в фокусе) oBrw:UserKeys( VK_INSERT, {|ob| _wPost(1, ob) } ) oBrw:UserKeys( VK_DELETE, {|ob| _wPost(2, ob) } ) 3. Сохранять\восстанавливать клавиши и блоки кода, можно делать, но это не предлагаю, т.к. лично мне не он нравится. [/pre2]

Andrey: SergKis пишет: 3. Сохранять\восстанавливать клавиши и блоки кода, можно делать, но это не предлагаю, т.к. лично мне не он нравится. Да это более простой метод. Как считать какая обработка была назначена на клавишу ? Можно ее считать, а потом восстановить ?



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