Форум » GUI » Вопросы новичка [MiniGUI] » Ответить

Вопросы новичка [MiniGUI]

Dima: MAIN окно не получило фокус ввода при запуске , почему ? Пример самодостаточный. [pre2] #include "minigui.ch" REQUEST HB_CODEPAGE_RU1251, HB_CODEPAGE_RU866, HB_LANG_RUWIN REQUEST HB_LANG_RUWIN REQUEST HB_LANG_RU866 Func Main() DEFINE WINDOW Form_0 AT 321 , 491 WIDTH 558 HEIGHT 175 TITLE "Почему окно не в фокусе при запуске ?" ; MAIN NOSIZE NOSYSMENU TOPMOST ON INIT {|| MdiMain()} DEFINE BUTTONex Button_1 ROW 32 COL 424 WIDTH 110 HEIGHT 28 CAPTION "Вход" ACTION { || ret:=.t., DoMethod("Form_0","Hide") , DoMethod("Form_1","show") } FONTBOLD .t. END BUTTONex DEFINE BUTTONex Button_2 ROW 71 COL 424 CAPTION "Отмена" ACTION { || DoMethod("Form_0","Release") } WIDTH 110 HEIGHT 28 FONTBOLD .t. END BUTTONex END WINDOW Form_0.Activate Form_0.Setfocus return nil ***************************** Func Mdimain() DEFINE WINDOW Form_1 at 0,0 ; WIDTH 200 HEIGHT 300 TITLE "MDI windows" ; MDI ; NOSHOW END WINDOW Form_1.Center Form_1.Activate Form_0.Release return [/pre2]

Ответов - 289, стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 All

gfilatov2002: SergKis пишет: добавить в языковый массив _HMG_MESSAGE [10] := 'Attention' _HMG_MESSAGE [11] := 'Information' _HMG_MESSAGE [12] := 'Stop' и применить в Msg...(), Hmg_Alert() Благодарю за подсказку Сделал

rvu: rvu пишет: SET INTERACTIVECLOSE OFF - у окон CHILD это работает, а у окна MAIN продолжает быть активным, разве что при нажатии на него выдает, что так нельзя закрыть программу. А как сделать, чтобы вместо стандартного окна Стоп выполнялась моя собственная процедура?

rvu: Такой вопрос: Делаю LISTBOX, хочу чтобы при нажатии на отдельно стоящую кнопку BUTTON его содержимое менялось. Как это сделать? Первая мысль была, что-то вроде: SetProperty(ThisWindow.Name, "List_1" , "ITEMS", aList0), но так это не работает. Дальше мысли вообще менять окно, но как-то это муторно, наверное есть простой способ, который я не нашел.


Haz: rvu пишет: наверное есть простой способ, который я не нашел. Удалить все элементы form_1.ListBox_1.DeleteAllItems и добавить по одному новые form_1.ListBox_1.AddItem( 'new item1' ) ) ... form_1.ListBox_1.AddItem( 'new item2' ) ) ...

Andrey: rvu пишет: хочу чтобы при нажатии на отдельно стоящую кнопку BUTTON его содержимое менялось. Как это сделать? На кнопку вешаешь вызов: [pre2] ACTION {|| UpdateList2() }[/pre2] И ставишь готовую функцию свою (в качестве примера считывание файлов по маске): [pre2]FUNCTION UpdateList2() LOCAL aDimDir, nI, cFile // Считываю массив DBF-файлов ... aDimDir := Directory( M->cPubPathTo + "*.dbf" ) aDirTo := {} IF Len( aDimDir ) > 0 FOR nI := 1 TO Len( aDimDir ) cFile := aDimDir[ nI, 1 ] AAdd( aDirTo, cFile ) NEXT ENDIF FormaMain.List_2.DeleteAllItems() IF Len(aDirTo)>0 FOR nI:=1 TO Len(aDirTo) FormaMain.List_2.AddItem(ADirTo[nI]) Next ENDIF RETURN Nil[/pre2]

Haz: Andrey пишет: FormaMain.List_2.DeleteAllItems() IF Len(aDirTo)>0 FOR nI:=1 TO Len(aDirTo) FormaMain.List_2.AddItem(ADirTo[nI]) Next ENDIF Можно проще двумя строчками [pre2] FormaMain.List_2.DeleteAllItems() Aeval( aDirTo, { ¦e¦ FormaMain.List_2.AddItem(e)}) [/pre2] Да и всю эту функцию можно в этот Aeval засунуть. Расписывать по действиям конечно нагляднее, но не всегда оптимально.

Andrey: Haz пишет: Можно проще двумя строчками Согласен. Это конечно лучше. Свой код писал ещё в 2016, когда начинал разбираться с МиниГуи. Только проверку нужно на нулевой массив сделать.

Haz: Andrey пишет: Только проверку нужно на нулевой массив сделать. не нужно цикл сам проверит. Как уже добавил, я бы всю функцию( кроме удаления) в один вызов аевал завернул после отладки логики, но это не критично. Просто в большом проекте объемный код затрудняет понимание в двльнейшем. Так что на любителя

rvu: Спасибо всем откликнувшимся! Заработало.

rvu: Я как-то про UTF8 уже спрашивал. С русским понятно: gfilatov2002 пишет: hb_Translate( cText, "UTF8", "CP1251" ) А как всякие знаки показывать? Стрелочки, например?

Andrey: rvu пишет: А как всякие знаки показывать? Стрелочки, например? Смотри пример MiniGUI\SAMPLES\BASIC\ScreenMode Там кнопка со значком папки.

rvu: Andrey пишет: Там кнопка со значком папки. Да, все гениальное просто, и UTF даже не нужна. А дальше хотелось поместить на кнопку надпись со стрелкой. А это разные шрифты. Так можно? Там же фонт сразу для всей кнопки задается.

Andrey: rvu пишет: А дальше хотелось поместить на кнопку надпись со стрелкой. А это разные шрифты. Так можно? Там же фонт сразу для всей кнопки задается. Я не знаю, можно ли задать 2 шрифта на одной кнопке, но на кнопке можно задать иконку и текст одновременно. Это самый простой и лучший вариант.

rvu: Andrey пишет: на кнопке можно задать иконку и текст одновременно. Это самый простой и лучший вариант. Могут быть проблемы, если пользователю разрешено менять размер шрифта. Собственно, я в сторону UTF8 и смотрел, чтобы можно было писать любые знаки в одной строке не задумываясь о их совместимости.

Andrey: rvu пишет: Могут быть проблемы, если пользователю разрешено менять размер шрифта. Задай автоматом максимальный шрифт на кнопках и запрети юзеру это делать. Как это сделать смотри пример MiniGUI\SAMPLES\BASIC\ButtonEx_DynamicMenu

rvu: Можно ухватить мышкой окно за край и менять его размер. А можно ли соответственно менять LISTBOX? Т.е. чтобы он при расширении окна тоже расширялся или сужался?

SergKis: rvu пишет А можно ли соответственно менять LISTBOX? Т.е. чтобы он при расширении окна тоже расширялся или сужался? Поищите в примерах ON SIZE, будет много вариантов, к примеру такой BASIC\DirSelect\... Меняте от размера клиентской части окна размеры ListBox

rvu: SergKis пишет: к примеру такой BASIC\DirSelect\... Здорово!

rvu: В окне отображается какой-то текст, допустим, LABEL-ами. Хочу что-то из него скопировать, но нет, текст мышкой даже не выделяется. То же с окнами ошибок, что совсем неудобно. А можно сделать, чтобы выделялся и копировался?

SergKis: rvu А можно сделать, чтобы выделялся и копировался? Самое простое для label назначить[pre2] [ <dummy2: ACTION, ON CLICK, ONCLICK> <action> ] ; [ ON DBLCLICK <dblclick> ] ; вызов меню, как в примере Advanced\App_OopReport или см. другие примеры с меню [pre2] *-----------------------------------------------------------------------------* FUNCTION _ShowFormContextMenu( cForm, nRow, nCol, lCenter ) *-----------------------------------------------------------------------------* LOCAL xContextMenuParentHandle := 0, hWnd, aRow DEFAULT nRow := -1, nCol := -1, lCenter := .F. If .Not. _IsWindowDefined(cForm) xContextMenuParentHandle := _HMG_xContextMenuParentHandle Else xContextMenuParentHandle := GetFormHandle(cForm ) Endif If xContextMenuParentHandle == 0 MsgMiniGuiError("Context Menu is not defined. Program terminated") EndIf lCenter := lCenter .or. ( nRow == 0 .or. nCol == 0 ) hWnd := GetFormHandle(cForm) If lCenter If nCol == 0 nCol := int( GetWindowWidth (hWnd) / 2 ) EndIf If nRow == 0 nRow := int( GetWindowHeight(hWnd) / 2 ) EndIf ElseIf nRow < 0 .or. nCol < 0 aRow := GetCursorPos() nRow := aRow[1] nCol := aRow[2] EndIf TrackPopupMenu ( _HMG_xContextMenuHandle , nCol , nRow , xContextMenuParentHandle ) RETURN Nil *-----------------------------------------------------------------------------* STATIC FUNC MenuReport( oWnd, aTxt, lPost, nRow, nCol, lCenter, nZeroLen ) *-----------------------------------------------------------------------------* LOCAL cWnd := oWnd:Name LOCAL nItm := 0, cNam, cImg, i LOCAL lDis := .F. LOCAL bAct := {|| nItm := Val(This.Name) } Default nZeroLen := 4, lPost := .T. Default aTxt := { ; 'Column report FIRST', ; 'Column report LAST ', ; 'Column report AGE ', ; 'Column report STATE', ; 'Column report CITY ', ; 'Column report STATE + Left(LAST, 1)', ; 'Column report CITY + Left(LAST, 1) ' ; } DEFINE CONTEXT MENU OF &cWnd For i := 1 To len(aTxt) cNam := StrZero(i, nZeroLen) If i > 9 cImg := Nil Else cImg := 'n' + hb_ntos(i) EndIf _DefineMenuItem( aTxt[ i ], bAct, cNam, cImg, .F., lDis, , , , .F., .F.) NEXT SEPARATOR MENUITEM 'Exit' ACTION NIL END MENU _ShowFormContextMenu(cWnd, nRow, nCol, lCenter ) DEFINE CONTEXT MENU OF &cWnd END MENU DO EVENTS If nItm > 0 .and. lPost oWnd:PostMsg(nItm) EndIf RETURN nItm [/pre2] Но проще исп. EditBox пример Advanced\LetoDbf\Client [pre2] @ y, x EDITBOX Edit WIDTH w HEIGHT h VALUE '' ; FONT "Courier New" Size 12 READONLY ... :Event(21, {| | This.Edit.Value := hb_memoread('_Msglog.txt') }) ... [/pre2] Будет работать посимвольное выделение [/pre2]



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