Форум » [x]Harbour » Get Listbox » Ответить

Get Listbox

Dima: Пара вопросов. [pre2] @ 12,45 ,19 ,71 get vid5 listbox {" Не печатать",; " 12 штук на A4 (70 x 65)",; " 88 штук на A4 (25 x 25)",; " 190 штук на A4 (15 x 20)",; " 10 штук на A4 (50 x 90)"} ; caption "Печать ценников " ; DROPDOWN SCROLLBAR @ 13,45 ,17,55 get vid listbox {" Широкая "," Узкая "} ; caption "Масштаб печати " ; DROPDOWN SCROLLBAR @ 14,27 say "Количество копий " get kolcop picture "9" read [/pre2] 1. Как при входе в READ сразу оказаться на последнем GET c количеством копий ? 2. Хотелось бы между GET перемещаться стрелками вверх/вниз а не с помощью TAB , как это сделать ?

Ответов - 40, стр: 1 2 All

AlexMyr: Dima пишет: 1. Как при входе в READ сразу оказаться на последнем GET c количеством копий ? может так kolcop:setfocus()

Dima: AlexMyr пишет: может так kolcop:setfocus() что то новенькое и мысли не понял. так ведь не будет работать если тупо перед READ написать kolcop:setfocus()

Andrey: Я делаю так: FOR nI TO (кол-во GET'ов) HB_KeyPut( K_DOWN ) NEXT У меня в GET стрелками перемещается... Я уж забыл как это сделал... Типа: SET SCOREBOARD OFF && переключение сообщения вывода для READ Не помню короче...


Dima: Andrey пишет: FOR nI TO (кол-во GET'ов) HB_KeyPut( K_DOWN ) NEXT Да это понятно. И да так работает когда в GET нет LISTBOX а с ним ты на первом же листбоксе и останешься и не важно сколько HB_KeyPut( K_DOWN ) будет послано.

nick_mi: А почему нельзя кол листов поставить первым в выводе GETов ? Но вообще-то предложение может так kolcop:setfocus() можно поставить в условие WHEN первого GETа, с какой-то логикой конечно, чтобы повторный заход внутри READ не выбрасывал постояннно на последний GET

Dima: nick_mi пишет: А почему нельзя кол листов поставить первым в выводе GETов ? Заказчик против.

nick_mi: И только что попробовал для GTWVT перемещение между полями происходит по клавишам стрелка вверх/вниз . Программа для всяких экспериментов сделана на базе тестовой программы от ANDREY click here Установки в программе не менял

nick_mi: В списке GETов ее можно поставить первой, а выводить в последней строке. Тогда, правда Стрелка вверх работать в этом поле не будет, а по стрелке вниз перемещение будет вверх на строку @ 12,45 ,19 ,71 get vid5 listbox {" Не печатать",; " 12 штук на A4 (70 x 65)",; " 88 штук на A4 (25 x 25)",; " 190 штук на A4 (15 x 20)",; " 10 штук на A4 (50 x 90)"} ; caption "Печать ценников " ; DROPDOWN SCROLLBAR

Dima: ладно оставим вопрос о переходе на последний GET. Он в принципе решаем если решить вопрос 2 Dima пишет: 2. Хотелось бы между GET c LISTBOX перемещаться стрелками вверх/вниз а не с помощью TAB , как это сделать ? Какой исходник править я уже нашел (tgetlist.prg из сырцов) , смотрю где нужно переделать и пока не вижу.

Dima: Был там такой код [pre2] ELSEIF oTheClass == "LISTBOX" IF nKey == K_UP oGUI:PrevItem() nKey := 0 ELSEIF nKey == K_DOWN oGUI:NextItem() nKey := 0 ELSEIF nKey == K_SPACE IF ! oGUI:DropDown ELSEIF ! oGUI:IsOpen oGUI:Open() nKey := 0 ENDIF [/pre2] переделал на [pre2] ELSEIF oTheClass == "LISTBOX" IF nKey == K_UP if oGUI:Isopen oGUI:PrevItem() nKey := 0 else oGet:exitState := GE_UP endif ELSEIF nKey == K_DOWN if oGUI:Isopen oGUI:NextItem() nKey := 0 else oGet:exitState := GE_DOWN endif ELSEIF nKey == K_SPACE IF ! oGUI:DropDown ELSEIF ! oGUI:IsOpen oGUI:Open() nKey := 0 ENDIF [/pre2] Вроде работает ;)

Dima: Пробую там же переделать реакцию на ESC когда сижу внутри LISTBOX. Ранее по ESC закрывались все GET и из READ я выходил. Так мне не подходит. Сделал так [pre2] ELSEIF nKey == K_ESC if oGUI:Isopen .and. oGUI:DropDown OGui:Close() oGUI:Display() nKey := 0 endif [/pre2] Есть правда не увязочка. [pre2] {" 1. Не печатать",; " 2. 12 штук на A4 (70 x 65)",; " 3. 88 штук на A4 (25 x 25)",; " 4. 190 штук на A4 (15 x 20)",; " 5. 10 штук на A4 (50 x 90)"} ; Если я открыл LISTBOX и оказался на пункте 3 в LISTBOX , затем побегал в нем курсором и нажимаю ESC , хотелось бы снова оказаться на пункте 3 в GET , но реально попадаю на тот пункт который был выбран перед нажатием ESC. [/pre2]

Andrey: Вопрос про GET (что то не нашел сходу): Как для @ y,x GET "Список.........1" PUSHBUTTON сделать выход кроме ENTER еще по клавише F3 и F4 ?

Dima: set key -2 to hb_KeyPut(chr(13)) set key -3 to hb_KeyPut(chr(13)) твой GET set key -2 to set key -3 to ну или исходник переделать

Andrey: Dima пишет: set key -2 to hb_KeyPut(chr(13)) Тогда я потом не отловлю какая была нажата клавиша, для дальнейшего анализа ! Как то назначались такие действия, помню по Клиперу еще.

Dima: может тогда GetApplyKey(<Get-объект>,<INKEY-код>)

Andrey: Вот есть пример. ******************************************************************** 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 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. Как сделать выход допустим по клавише F2 но чтобы по Lastkey() можно было потом определить, что была нажата клавиша F2 ?

Dima: Andrey пишет: Тогда я потом не отловлю какая была нажата клавиша, для дальнейшего анализа ! а если так private lF2:=.f. setkey(K_F3,{|| lF2:=.t., hb_Keyput(chr(13))} )

Andrey: Dima пишет: а если так private lF2:=.f. setkey(K_F3,{|| lF2:=.t., hb_Keyput(chr(13))} ) Спасибо, попробую !

Andrey: Делаю так: READ MSG AT MAXROW(),0,MAXCOL() IF lF2 == .t. CLEAR TYPEAHEAD HB_KeyPut(K_F3) ENDIF nKey := LASTKEY() nKey возвращает 13 ! Как правильно нужно сделать ?

Dima: Andrey пишет: IF lF2 == .t. Ну достаточно вот так IF LF2 Andrey пишет: IF lF2 == .t. CLEAR TYPEAHEAD HB_KeyPut(K_F3) ENDIF Уверен что условие срабатывает и LF2==.t. ?



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