Define um bloco de código para tratar qualquer alteração do texto e capturar qualquer tecla no TComboBox. O bloco de código possui três parâmetros, sendo o primeiro o próprio objeto e o segundo o texto atual do TComboBox (após a alteração) e o terceiro o código da tecla pressionada. Ex: oComboBox:bGetKey := {|self,cText,nKey|trataTxt(cText,nKey)}. Para desabilitar esse tratamento passar no parâmetro um bloco de código vazio "{||}" (sem as apas). Disponível apenas em build iguais ou superiores a 7.00.170117A - 17.2.1.3
Tipo | Valor Padrão | Somente Leitura |
---|---|---|
bloco de código | { || } | N |
Observações
- Atenção: Esse bloco de código "trava" a digitação do usuário, isto é, espera o retorno do código para continuar a processar novas entradas no SmartClient.
- O código das teclas está disponível em: http://doc.qt.io/qt-5/qt.html#Key-enum e http://doc.qt.io/qt-5/qt.html#KeyboardModifier-enum
- Só será considerado se o TComboBox for editável (TComboBox:lEditable)
- Para definir qual tecla foi pressionada deve-se utilizar operações lógicas para isolar os 25 bits menos significativos (tecla real) dos 7 bits mais significativos (modificadores, control, shift, etc).
Exemplos
#include "totvs.ch" user function exBGetKey() local oDlg := nil, oEdit := nil Local aItems:= {'Item1','Item2','Item3','Item4','Item5','Item6','Item7','Item8','Item9','Item7','Item11','Item12'} Local cTMultiget1 := "", cTGet1 := "" Local cCombo1 DEFINE DIALOG oDlg TITLE "tSimpleEditor" FROM 180, 180 TO 640, 900 PIXEL oEdit := tSimpleEditor():New(0, 0, oDlg, 100, 100) oEdit:Load("TSimpleEditor") oEdit:bGetKey := {|self,cText,ckey|texto(self,cText,ckey,oDlg)} cTMultiget1 := "TMultiget" oMulti := TMultiget():New(100,00,{|u|if(Pcount()>0,cTMultiget1:=u,cTMultiget1)},oDlg,100,100,,,,,,.T.) oMulti:bGetKey := {|self,cText,nkey|texto(self,cText,nkey,oDlg)} cTGet1 := "TGet " oTGet1 := TGet():New( 000,100,{|u|if(Pcount()>0,cTGet1:=u,cTGet1)},oDlg,096,009,"",,0,,,.F.,,.T.,,.F.,,.F.,.F.,,.F.,.F.,,cTGet1,,,, ) oTGet1:bGetKey := {|self,cText,nkey|texto(self,cText,nkey,oDlg)} cCombo1 := aItems[1] oCombo1 := TComboBox():New(100,100,{|u|if(PCount()>0,cCombo1:=u,cCombo1)},aItems,65,10,oDlg,,,,,,.T.,,,,,,,,,'cCombo1') oCombo1:bGetKey := {|self,cText,nkey|texto(self,cText,nkey,oDlg)} oTButton1 := TButton():New( 200, 002, "Off SimpleEditor",oDlg,{||oEdit:bGetKey := {||} }, 30,10,,,.F.,.T.,.F.,,.F.,,,.F. ) oTButton2 := TButton():New( 200, 035, "Off Multiget",oDlg,{||oMulti:bGetKey := {||} }, 30,10,,,.F.,.T.,.F.,,.F.,,,.F. ) oTButton3 := TButton():New( 200, 068, "Off TGet",oDlg,{||oTGet1:bGetKey := {||} }, 30,10,,,.F.,.T.,.F.,,.F.,,,.F. ) ACTIVATE DIALOG oDlg CENTERED return static function texto (objeto,ctext,nKey,oDlg) local realkey := nkey, tecla := "" // O exemplo abaixo serve para identificar qual tecla foi pressionada para um caso geral. // // Se for necessário apenas testar uma tecla específica, pode-se testar diretamente o nKey, por exemplo: // Necessário verificar se a tecla pressionada é a letra R, pode-se fazer o seguinte: // if nKey == 82 //0x52 // conout("tecla R pressionada") // endif // // Se precisa saber se a tecla CONTROL-R for pressionada presisa primeiramente realizar um OR entre o código da tecla R com o código do modifier CONTROL, por exemplo: // Local controlR := NOR(82, 67108864) // if nKey == controlR // conout("tecla Control-R pressionada") // endif // // Se precisa saber se a tecla R for pressionada independente de modifier, deve-se fazer o seguinte: // Local realKey := NAND(nKey, 33554431) // Número utilizado para isolar os 25 bits da tecla sem os modifiers // if nKey == 82 //0x52 // conout("tecla R pressionada") // endif // Os valores abaixo foram retirados da tabela disponível em: http://doc.qt.io/qt-5/qt.html#KeyboardModifier-enum //local kmodifiers := {33554432 /Shift 0x02000000/, 67108864 /Control 0x04000000/, 134217728 /Alt 0x08000000/, 268435456 /Meta 0x10000000/, 536870912 /KeyPad 0x20000000/, 1073741824 /GroupSwitch 0x40000000/} // O código em nKey se refere ao código da tecla pressianada com uma operação lógica OR com os modifiers pressionados (Control, Shift, etc) // A operação abaixo serve para saber se existe algum modifier pressionado isMod := NAND(nKey, NOR(kmodifiers[1],kmodifiers[2],kmodifiers[3],kmodifiers[4],kmodifiers[5],kmodifiers[6])) > 0 if isMod // Para pegar a tecla real que foi pressionada (sem o modifier) é necessário isolar só os 25 bits menos signaficativos por isso é feito o AND abaixo realkey := NAND(nKey, 33554431) //Not de kmodifiers, para isolar a tecla sem o modifier // Aqui eu testo todos os modifiers para saber qual está pressionado iif(NAND(nKey, kmodifiers[1]) > 0, tecla += "SHIFT-",) iif(NAND(nKey, kmodifiers[2]) > 0, tecla += "CONTROL-",) iif(NAND(nKey, kmodifiers[3]) > 0, tecla += "ALT-",) iif(NAND(nKey, kmodifiers[4]) > 0, tecla += "META-",) iif(NAND(nKey, kmodifiers[5]) > 0, tecla += "KP-",) iif(NAND(nKey, kmodifiers[6]) > 0, tecla += "GW-",) endif // Os códigos abaixo de 255 são (em sua marioria) "printáveis", o resto é necessário verificar a tabela if realkey < 255 tecla += chr(realkey) else // verificar tabela em: http://doc.qt.io/qt-5/qt.html#Key-enum tecla += "??" endif conout("Tecla - " + tecla) conout(ctext) return .T.
Veja também
Visão Geral
Import HTML Content
Conteúdo das Ferramentas
Tarefas