Форум » GUI » Примеры из Минигуи -ошибки, вопросы..... (продолжение) » Ответить

Примеры из Минигуи -ошибки, вопросы..... (продолжение)

Andrey: Всем привет. Взялся смотреть примеры из МиниГуи, так не все работают. Может кто подскажет что там "допилить" нужно ? А заодно может и исправить и добавить новые.... Очень красочный пример: \MiniGUI\SAMPLES\Advanced\AVI_Animation - не работает под Win7 (наверно AVI-шки нет в ресурсах) Предложение Григорию: Можно ли добавить еще один пример с отдельным AVI-файлом в ресурсах проекта и показом такого же бегунка ? Пример: \MiniGUI\SAMPLES\Advanced\DisplayMode - не работает под ХР и далее.... Пример: \MiniGUI\SAMPLES\Advanced\Tsb_filter - вылетает на ХР -------------------------------------------------------------------------------- Harbour MiniGUI Errorlog File Harbour MiniGUI Extended Edition 2.0.1 - 2011.09.21 -------------------------------------------------------------------------------- Date: 11/15/2011 Time: 22:13:24 Error BASE/1124 Argument error: LEFT Called from LEFT(0) Called from SCANSOFT(195) Called from MAIN(84) Пример: \MiniGUI\SAMPLES\BASIC\MsgEdit - не собирается... Z:\MiniGUI\SAMPLES\BASIC\MsgEdit>call ..\..\..\batch\compile.bat demo /L shell32 Harbour 3.1.0dev (Rev. 17042) Copyright (c) 1999-2011, http://harbour-project.org/ Compiling 'demo.prg'... Lines 20133, Functions/Procedures 30 Generating C source output to 'demo.c'... Done. Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland demo.c: Error E2141 demo.prg 993: Declaration syntax error *** 1 errors in Compile *** C compile error.

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

SergKis: Andrey пишет ENTER зацикливается ? Конечно. Измени[pre2] WITH OBJECT This.Object :Event( 0, {| | InkeyGui(200) } ) :Event( 1, {| | Form_Main.Btn_Start1.Setfocus , _PushKey( VK_SPACE ) } ) :Event( 2, {| | Form_Main.Btn_Start2.Setfocus , _PushKey( VK_SPACE ) } ) :Event( 3, {| | Form_Main.Btn_Start3.Setfocus , _PushKey( VK_SPACE ) } ) :Event( 4, {| | Form_Main.Btn_Start4.Setfocus , _PushKey( VK_SPACE ) } ) :Event( 5, {| | Form_Main.Btn_Start5.Setfocus , _PushKey( VK_SPACE ) } ) :Event(99, {|ow| ow:Release() } ) END WITH [/pre2]

SergKis: Andrey пишет Это каждый раз мне придётся в МиниГуи \include\ править ? Что то мне подсказывает, что Григорий и HOTKEY добавит в BUTTONEX и команду поправит. Команду предлагаю так сделать[pre2] #xcommand ON KEY <key> [ OF <parent> ] ACTION <action> [ RESULT ] [ TO <lresult> ] ; => ; [ <lresult> := ] iif( HB_ISNUMERIC( <key> ) , _DefineHotKey ( <"parent"> , 0 , <key> , <{action}> ) , ; _SetHotKeyByName ( <"parent"> , <"key"> , <{action}> ) ) [/pre2] тогда можно писать ON KEY VK_7 ACTION ... и ON KEY 7 ACTION ...

SergKis: SergKis пишет Команду предлагаю так сделать Нет, так не пойдет команда, все время число будет. Возможно, в функцию добавить[pre2] FUNCTION _SetHotKeyByName ( cParentForm, cKey, bAction ) ... ENDIF IF Val(cKey) ) >= 1 RETURN _DefineHotKey( cParentForm, 0, Val(cKey), bAction ) ENDIF IF !Empty ( cKey ) .AND. ISCHARACTER ( cKey ) [/pre2]


SergKis: SergKis пишет Возможно, в функцию добавить Будет то же самое - число. Куда то меня унесло, ушел отдыхать.

Andrey: SergKis пишет: Конечно. Измени Не работает. В другом окне делаю так: [pre2] ON KEY RETURN OF Form_NewZ ACTION {|| Form_NewZ.Button_Find.Setfocus, InkeyGui(200), _PushKey( VK_SPACE ) } ON KEY ESCAPE OF Form_NewZ ACTION {|| aRet := {}, Form_NewZ.Release() } END WINDOW[/pre2] Видно что курсор прыгает на кнопку, а отработки нет. ESC - срабатывает нормально. Дело в том что у меня на кнопке Button_Find - большой код, там несколько функций. Хотелось бы не переписывать, а заставить кнопку Button_Find срабатывать на ENTER !

SergKis: Andrey пишет Пример от Григория поправил (2а варианта назначения)[pre2] #include "hmg.ch" FUNCTION main Local nW := 40, nX := 10, nS := 10 SET CENTURY ON SET DATE GERMAN SET OOP ON DEFINE WINDOW button_test ; AT 0,0 ; WIDTH 800 ; HEIGHT 400 ; MAIN ; TITLE "button program test" @ 100, nX BUTTON butt_1 ; CAPTION " 1 " ; ACTION MsgInfo(This.Caption+' '+This.Name, ThisWindow.Name) ; WIDTH nW ; HEIGHT 30 nX += nW + nS @ 100, nX BUTTON butt_2 ; CAPTION " 2 " ; ACTION MsgInfo(This.Caption+' '+This.Name, ThisWindow.Name) ; WIDTH nW ; HEIGHT 30 nX += nW + nS @ 100, nX BUTTON butt_3 ; CAPTION " 3 " ; ACTION MsgInfo(This.Caption+' '+This.Name, ThisWindow.Name) ; WIDTH nW ; HEIGHT 30 nX += nW + nS @ 100, nX BUTTON butt_4 ; CAPTION " 4 " ; ACTION MsgInfo(This.Caption+' '+This.Name, ThisWindow.Name) ; WIDTH nW ; HEIGHT 30 nX += nW + nS @ 100, nX BUTTON butt_5 ; CAPTION " 5 " ; ACTION MsgInfo(This.Caption+' '+This.Name, ThisWindow.Name) ; WIDTH nW ; HEIGHT 30 nX += nW + nS @ 100, nX BUTTON butt_6 ; CAPTION " 6 " ; ACTION MsgInfo(This.Caption+' '+This.Name, ThisWindow.Name) ; WIDTH nW ; HEIGHT 30 nX += nW + nS @ 100, nX BUTTON butt_7 ; CAPTION " 7 " ; ACTION MsgInfo(This.Caption+' '+This.Name, ThisWindow.Name) ; WIDTH nW ; HEIGHT 30 nX += nW + nS @ 100, nX BUTTON butt_8 ; CAPTION " 8 " ; ACTION MsgInfo(This.Caption+' '+This.Name, ThisWindow.Name) ; WIDTH nW ; HEIGHT 30 nX += nW + nS @ 100, nX BUTTON butt_9 ; CAPTION " 9 " ; ACTION MsgInfo(This.Caption+' '+This.Name, ThisWindow.Name) ; WIDTH nW ; HEIGHT 30 nX += nW + nS * 5 /* @ 100, nX BUTTON butt_F ; CAPTION " F " ; ACTION MsgInfo(This.Caption+' '+This.Name, ThisWindow.Name) ; WIDTH nW ; HEIGHT 30 */ @ 100, nX BUTTON butt_F ; CAPTION " F " ; ACTION _wPost(11, This.Index) ; WIDTH nW ; HEIGHT 30 WITH OBJECT This.Object :Event( 1 , {|| This.butt_1.SetFocus, DoEvents(), _PushKey( VK_SPACE ) } ) :Event( 2 , {|| This.butt_2.SetFocus, DoEvents(), _PushKey( VK_SPACE ) } ) :Event( 3 , {|| This.butt_3.SetFocus, DoEvents(), _PushKey( VK_SPACE ) } ) :Event( 4 , {|| This.butt_4.SetFocus, DoEvents(), _PushKey( VK_SPACE ) } ) :Event( 5 , {|| This.butt_5.SetFocus, DoEvents(), _PushKey( VK_SPACE ) } ) :Event( 6 , {|| This.butt_6.SetFocus, DoEvents(), _PushKey( VK_SPACE ) } ) :Event( 7 , {|| This.butt_7.SetFocus, DoEvents(), _PushKey( VK_SPACE ) } ) :Event( 8 , {|| This.butt_8.SetFocus, DoEvents(), _PushKey( VK_SPACE ) } ) :Event( 9 , {|| This.butt_9.SetFocus, DoEvents(), _PushKey( VK_SPACE ) } ) :Event( 10 , {|| This.butt_F.SetFocus, DoEvents(), _PushKey( VK_SPACE ) } ) :Event( 11 , {|ob| MsgInfo(ob:Name+' '+This.Caption+' '+This.Name, 'Find button') } ) :Event( 99 , {|ow| ow:Release() } ) END WITH ON KEY ESCAPE ACTION _wPost(99) ON KEY 1 ACTION _wPost(1) ON KEY 2 ACTION _wPost(2) ON KEY 3 ACTION _wPost(3) ON KEY 4 ACTION _wPost(4) ON KEY 5 ACTION _wPost(5) ON KEY 6 ACTION _wPost(6) ON KEY 7 ACTION _wPost(7) ON KEY 8 ACTION _wPost(8) ON KEY 9 ACTION _wPost(9) // ON KEY RETURN ACTION _wPost(10) ON KEY RETURN ACTION _wPost(11, This.butt_F.Index) END WINDOW CENTER WINDOW button_test ACTIVATE WINDOW button_test RETURN [/pre2]

Andrey: SergKis пишет: Пример от Григория поправил (2а варианта назначения) Спасибо ! То что нужно ! SergKis пишет: ставим oBrw:UserKeys(VK_1, {|ob| _wPost(1, ob, ob) }) oBrw:UserKeys(VK_2, {|ob| _wPost(2, ob, ob) }) и т.д. За это тоже СПАСИБО !

Andrey: SergKis пишет: :Event( 1 , {|| This.butt_1.SetFocus, DoEvents(), _PushKey( VK_SPACE ) } ) :Event( 2 , {|| This.butt_2.SetFocus, DoEvents(), _PushKey( VK_SPACE ) } ) :Event( 3 , {|| This.butt_3.SetFocus, DoEvents(), _PushKey( VK_SPACE ) } ) Как можно сделать эмуляцию перехода мышкой на кнопку если включён градиент на кнопке ? Т.е. на кнопке сделано[pre2] aColor := CLR_GREEN aGrOverB2 := { { 0.5, CLR_BLACK, aColor }, { 0.5, aColor , CLR_BLACK } } aGrFillB2 := { { 0.5, aColor , CLR_WHITE }, { 0.5, CLR_WHITE, aColor } } ..... BACKCOLOR aGrOverB2 GRADIENTFILL aGrFillB2 ; ON MOUSEHOVER ( This.Fontcolor := aBtnClr2, This.Icon := cIco2x2, This.GradientFill := aGrFillB2 ) ; ON MOUSELEAVE ( This.Fontcolor := aBtnClr0, This.Icon := cIco2x1, This.GradientOver := aGrOverB2 ) ; ACTION {|| _wPost(2) } [/pre2] Использование This.butt_2.SetFocus - не подсвечивает кнопку ! Только текст кнопки подсвечивает. Хотелось бы - нажал горячую клавишу, кнопка под светилась и юзер понял какую кнопку нажал. Это для красоты.

SergKis: Andrey пишет Как можно сделать эмуляцию перехода мышкой на Как то так [pre2] FUNCTION HMG_SetMousePos( nHandle, y1, x1 ) Local y := GetWindowRow(nHandle) Local x := GetWindowCol(nHandle) Default y1 := 1, x1 := 1 SetCursorPos( x + x1, y + y1 ) RETURN Nil [/pre2] В примере выше добавить :Event( 12, {|| HMG_SetMousePos(This.butt_F.Handle) } ) ... ON KEY F3 ACTION _wPost(12) ...

Andrey: SergKis пишет: Как то так Да ! Классно выходит. СПАСИБО ! SergKis пишет: Пример от Григория поправил (2а варианта назначения)С Что то не получается в моём случае. Делаю так:[pre2] @ ... BUTTONEX Button_Find ; ........ ACTION { || SaveSeekAdres(cFileMemo,nCity,cCity,nStreet,cStreet,nDom,cDom,; nStro,cStro,nKorp,cKorp,nPodz,cPodz,nKvar,cKvar),; SaveZaivkMenu(cFileMemo2, nZDmfAnt, nZDBase, nZDogAb) ,; aDimAdr := {nCity,cCity,nStreet,cStreet,nDom,cDom,nStro,cStro,nKorp,cKorp,nPodz,cPodz,nKvar,cKvar} ,; aDimZaS := {nLastDay,lOtmena,lOst,lKeyOff,lZClose,lDClose } ,; cVal := Form_NewZ.Label_Adres.Value ,; aRet := FindListZaivka(nZDmfAnt, nZDBase, nZDogAb, aDimZaS, aDimAdr, cVal) ,; Form_NewZ.Release() } @ ........ BUTTONEX Button_Exit ; ........... ACTION { || aRet := {}, DoEvents(), Form_NewZ.Release() } ........... WITH OBJECT This.Object :Event( 1, {|| Form_NewZ.Button_Find.Setfocus, DoEvents(), _PushKey( VK_SPACE ) } ) :Event(99, {|ow| ow:Release() } ) END WITH ON KEY RETURN OF Form_NewZ ACTION _wPost(1 , This.button_Find.Index) ON KEY ESCAPE OF Form_NewZ ACTION _wPost(99, This.button_Exit.Index) END WINDOW[/pre2] Как сделать не перетаскивая код-блока из кнопки, чтобы срабатывал _wPost(1) и _wPost(99) ? Не хочется перетаскивать код из кнопки. Или так нельзя делать ? Если перетащу код из кнопки в :Event( 1, {|| ..... - то всё работает отлично !

SergKis: Andrey пишет Что то не получается в моём случае. Из своего примера[pre2] (This.Object):Event(11, {|| SetMousePos(This.Btn_1.Handle), This.Btn_1.SetFocus, DoEvents(), _PushKey( VK_SPACE ) }) ... ON KEY F3 ACTION _wPost(11) [/pre2]Если перетащу код из кнопки в :Event( 1, {|| ..... - то всё работает отлично ! Именно так и должно быть, на контролах, всегда, только сообщения

SergKis: PS [pre2] ACTION _wPost(1, This.Index) :Event( 1, { || SaveSeekAdres(cFileMemo,nCity,cCity,nStreet,cStreet,nDom,cDom,; nStro,cStro,nKorp,cKorp,nPodz,cPodz,nKvar,cKvar),; SaveZaivkMenu(cFileMemo2, nZDmfAnt, nZDBase, nZDogAb) ,; aDimAdr := {nCity,cCity,nStreet,cStreet,nDom,cDom,nStro,cStro,nKorp,cKorp,nPodz,cPodz,nKvar,cKvar} ,; aDimZaS := {nLastDay,lOtmena,lOst,lKeyOff,lZClose,lDClose } ,; cVal := Form_NewZ.Label_Adres.Value ,; aRet := FindListZaivka(nZDmfAnt, nZDBase, nZDogAb, aDimZaS, aDimAdr, cVal) ,; _wSend(99) } ) ON KEY RETURN OF Form_NewZ ACTION ( SetMousePos(This.button_Find.Handle), This.button_Find.SetFocus, DoEvents(), _wPost(1, This.button_Find.Index) ) ON KEY ESCAPE OF Form_NewZ ACTION _wPost(99) [/pre2]

SergKis: PPS Для кнопки Exit [pre2] @ ........ BUTTONEX Button_Exit ; ........... ACTION _wPost(2, This.Index) ; :Event( 2, { || aRet := {}, _wSend(99) } ) ON KEY ESCAPE OF Form_NewZ ACTION ( SetMousePos(This.button_Exit.Handle), This.button_Exit.SetFocus, DoEvents(), _wPost(2, This.button_Exit.Index) ) или если есть LOCAL aRet := {} то сразу делать @ ........ BUTTONEX Button_Exit ; ........... ACTION _wPost(99) ; ON KEY ESCAPE ACTION ( SetMousePos(This.button_Exit.Handle), This.button_Exit.SetFocus, DoEvents(), _PushKey( VK_SPACE ) /* или _wPost(99) или _wSend(99) */ ) [/pre2]

Andrey: Всем привет. А как объявить в проге, что нужно линковать функцию, у которой нет явного вызова ? Т.е. вызов функции объявлен в массиве меню, примерно так: AADD( aDim, {"FLAG_RU.bmp" , "Test menu - Russian ", "RunTest1", "Stroka1" , 1 } ) чтобы потом можно было вызвать RunTest1() ? А то сейчас пишет, что нет такой функции в ехе-файле. В библиотеке которую линкую эта функция есть.

gfilatov2002: Andrey пишет: как объявить в проге, что нужно линковать функцию Попробуй добавить REQUEST RunTest1

Andrey: gfilatov2002 пишет: Попробуй добавить Спасибо !

Andrey: Обнаружил небольшой баг в примере MiniGUI\SAMPLES\BASIC\Menu\menudemo5.prg Выбираем меню Options и потом любое другое меню. После выхода из меню можно кликнуть правой кнопкой мышки и это же меню появиться опять на форме. В Options-2 и Options-3 от этого избавился, как рекомендовал раньше. Больше такого избавления в примерах нигде нет ! А новичкам это тоже будет интересно. Последний пример совместно написанный с Сергеем выслал на почту.

gfilatov2002: Andrey пишет: Обнаружил небольшой баг в примере Благодарю за сообщение Добавил две новые функции для проверки - New: function IsContextMenuDefined ( cFormName ); - New: function IsNotifyMenuDefined ( cFormName ). Andrey пишет: Больше такого избавления в примерах нигде нет Посмотри как это работает в примере из папки \samples\Basic\MENU_Dynamic Andrey пишет: пример совместно написанный с Сергеем выслал на почту Благодарю за пример Уже включил его в первую бету новой сборки, которую подготовил сегодня * New: 'Extended Dynamic Context Menu' sample. Contributed by Sergej Kiselev and Verchenko Andrey (see menudemo6.prg in folder \samples\Basic\Menu)

Andrey: Можно ли включить в Минигуи стандартную функцию расчёта размера фонта в зависимости от ширины и высоты LABEL ? Свои есть, но что-то не дотягивают до стандарта. И не знаю как рассчитать размеры для фонтов BOLD ? Вот например есть такая у меня функция: [pre2]////////////////////////////////////////////////////////////////// // Функция вернёт максимальный размер фонта для заданной строки по заданной ширине FUNCTION FontSizeMaxAutoFit( cText, cFName, nWinWidth ) LOCAL nTxtWidth, nFSize, lExit := .T. nFSize := 6 DO WHILE lExit nTxtWidth := GetTxtWidth( cText, nFSize, cFName ) IF nTxtWidth >= nWinWidth lExit := .F. ELSE nFSize++ ENDIF ENDDO RETURN nFSize[/pre2] Если текст короткий то половина слова показывается на LABEL, нижняя часть слова обрезается, слишком большой фонт. Помогите сделать такие универсальные функции !

SergKis: Andrey пишет Помогите сделать такие универсальные функции ! Они уже в тек. версии есть, для регистрированного фонта, посмотри changelog[pre2] * New: Added the useful pseudo-functions GetFontWidth( FontName, nLen ) and GetFontHeight( FontName ) for receiving of the font's parameters. Note that a font should be defined by command DEFINE FONT <FontName> FONTNAME <sysfont> ... [/pre2] и пример, который отсылал Григорию, там есть применение GetFontWidth( FontName, nLen ) для меню. Универсальность nW := 0; AEval(aText, {|ct| nW := Max(nW, GetFontWidth( 'Font_1', Len(ct) ) })



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