Форум » [x]Harbour » Помогите сделать меню ..... » Ответить

Помогите сделать меню .....

Andrey: Всем привет ! Сделал простое меню через GET.... Но что-то у меня оно не работает, то мышка неправильно отображается, то клавишей ENTER не могу определить какая кнопка была нажата... Подскажите, где я наколбасил.... [more] #include "inkey.ch" FUNCTION MAIN() REQUEST HB_CODEPAGE_RU866 hb_SetCodepage( "RU866" ) REQUEST HB_LANG_RU866 HB_LANGSELECT("RU866") SET EVENTMASK TO INKEY_ALL CLEAR SCREEN ? Quest_My() wait RETURN NIL ******************************************************************** FUNCTION Quest_My() LOCAL nY := 6, nX := 10, nY2 := 16, nX2 := 70, nI LOCAL lCancel := .T., lAns := .T., lOk := .T., nKey LOCAL lEditForm := .T., lPrint := .T., lEditShabl := .T. LOCAL cButtonClr := "15/3,0/12,4/15,12/3", cButtCol := "0/15" LOCAL nVar := 1, aGroup := {} , getlist := {}, nKnopka := 0 LOCAL cScrTemp := SaveScreen(,,,) , cColor := SETCOLOR() SETCOLOR("1/15,0/15,1/15,4/15,5/15,3/1,10/1,1/2") @ nY+2, nX+30 GET lEditForm PUSHBUTTON ; CAPTION " Открыть форму " ; STATE { || IsOk(@lAns, 1), ReadKill(.T.) } ; COLOR cButtonClr ; MESSAGE "Вызов редактора с формой" @ nY+4, nX+30 GET lPrint PUSHBUTTON ; CAPTION " Печать формы " ; STATE { || IsOk(@lAns, 1), ReadKill(.T.) } ; COLOR cButtonClr ; MESSAGE "Печатать форму на текущий принтер" @ nY+6, nX+30 GET lEditShabl PUSHBUTTON ; CAPTION " Редактировать шаблон " ; STATE { || IsOk(@lAns, 1), ReadKill(.T.) } ; COLOR cButtonClr ; MESSAGE "Редактировать шаблон формы в редакторе" @ nY+8, nX+30 GET lCancel PUSHBUTTON ; CAPTION " Выход " ; STATE { || IsOk(@lAns, 1), ReadKill(.T.) } ; COLOR cButtonClr ; MESSAGE "Выход из меню" READ MSG AT MAXROW(),0,MAXCOL() nKey := LASTKEY() @ 0,0 SAY "" ?? "KEY=",nKey, " lEditForm=",lEditForm," lPrint=",lPrint,"lEditShabl=",lEditShabl, "lCancel=",lCancel wait IF nKey == K_ESC nKnopka := 0 ELSEIF nKey == K_ENTER // ---------------- не могу распознать кнопку выбранную клавишей ENTER ---------------- nKnopka := -13 ELSEIF nKey > 999 IF lEditForm == .F. nKnopka := 1 ELSEIF lPrint == .F. nKnopka := 2 ELSEIF lEditShabl == .F. nKnopka := 3 ELSEIF lCancel == .F. nKnopka := 0 ENDIF ELSE nKnopka := 0 ENDIF CLEAR GETS RestScreen(,,,, cScrTemp ) SETCOLOR( cColor ) Return nKnopka ************************************* STATIC Function IsOk(lAns, n) IF n == 1 lAns := .T. Else lAns := .F. ENDIF Return .T. [/more]

Ответов - 2

santy: Попробуй так FUNCTION Quest_My() LOCAL nY := 6, nX := 10, nY2 := 16, nX2 := 70, nI LOCAL lCancel := .T., lAns := .T., lOk := .T., nKey LOCAL lEditForm := .T., lPrint := .T., lEditShabl := .T. LOCAL cButtonClr := "15/3,0/12,4/15,12/3", cButtCol := "0/15" LOCAL nVar := 1, aGroup := {} , getlist := {}, nKnopka := 0 LOCAL cScrTemp := SaveScreen(,,,) , cColor := SETCOLOR() LOCAL nBtn := 0 SETCOLOR("1/15,0/15,1/15,4/15,5/15,3/1,10/1,1/2") @ nY+2, nX+30 GET lEditForm PUSHBUTTON ; CAPTION " Открыть форму " ; STATE { || nBtn := 1, IsOk(@lAns, 1), ReadKill(.T.) } ; COLOR cButtonClr ; MESSAGE "Вызов редактора с формой" @ nY+4, nX+30 GET lPrint PUSHBUTTON ; CAPTION " Печать формы " ; STATE { || nBtn := 2, IsOk(@lAns, 1), ReadKill(.T.) } ; COLOR cButtonClr ; MESSAGE "Печатать форму на текущий принтер" @ nY+6, nX+30 GET lEditShabl PUSHBUTTON ; CAPTION " Редактировать шаблон " ; STATE { || nBtn := 3, IsOk(@lAns, 1), ReadKill(.T.) } ; COLOR cButtonClr ; MESSAGE "Редактировать шаблон формы в редакторе" @ nY+8, nX+30 GET lCancel PUSHBUTTON ; CAPTION " Выход " ; STATE { || nBtn := 4, IsOk(@lAns, 1), ReadKill(.T.) } ; COLOR cButtonClr ; MESSAGE "Выход из меню" READ MSG AT MAXROW(),0,MAXCOL() nKey := LASTKEY() @ 0,0 SAY "" ?? "KEY=",nKey, " lEditForm=",lEditForm," lPrint=",lPrint,"lEditShabl=",lEditShabl, "lCancel=",lCancel," Button number ---> ",nBtn wait IF nKey == K_ESC nKnopka := 0 ELSEIF nKey == K_ENTER // ---------------- не могу распознать кнопку выбранную клавишей ENTER ---------------- nKnopka := -13 ? " Button --- ",nBtn," ---- " wait ELSEIF nKey > 999 IF lEditForm == .F. nKnopka := 1 ELSEIF lPrint == .F. nKnopka := 2 ELSEIF lEditShabl == .F. nKnopka := 3 ELSEIF lCancel == .F. nKnopka := 0 ENDIF ELSE nKnopka := 0 ENDIF CLEAR GETS RestScreen(,,,, cScrTemp ) SETCOLOR( cColor ) Return nKnopka

Andrey: santy пишет: Попробуй так Спасибо большое ! Заработало ! Только тогда можно выкинуть наверно функцию IsOk(@lAns, 1) .... Я где-то взял с готового примера, и не понял зачем она... И все равно не пойму зачем нужна тогда конструкция типа: GET lEditShabl PUSHBUTTON ? Эта переменная ( lEditShabl ) должна возвращать значение .T. , если эта кнопка была нажата !!!



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