Como fazer uma pesquisa quot;tipo dbgridquot; prática e ef
02/07/2004
0
Exemplificando:
O usuario está no cadastro de clientes quando chega ao código da cidade, teclando zero e enter, abre (aqui está o dilema) a lista de cidades e a medida que o usuário digita a cidade desejada o sistema vai filtrando, podendo também navegar com as setas direcionais, quando encontrar a cidade desejada, tecla enter (para usar somente o teclado) e então retorna ao cadastro de clientes com o código da cidade selecionada.
Este é um modelo usado nos sistemas d.o.s., que alia praticidade e eficiência, pois a produtividade em um sistema comercial é bem maior utilizando-se apenas o teclado.
Não quero usar um combo, pois eu quero também habilitar as teclas de função para consultar a lista de produtos, por exemplo, sem precisar estar no campo produto.
Consegui sem problemas usando edit e dbgrid, só que o foco permanece no edit e querendo navegar teria que mudar o foco, mas se o usuário quizesse digitar outro nome, teria que retornar ao edit.
Espero que possam me ajudar ou exemplificar uma outra forma, que prestigia-se a velocidade na execução das tarefas, pois temos usuário, digo de balcão de loja, que não é amigo do mouse.
Obrigado
Mario
Aldus
Posts
02/07/2004
D4n13l
Eu tive esse mesmo dilema com um cliente que queria a praticidade das aplicações em DOS, só que em Windows.
Bom, o que eu fiz é criar uma tela que pressionando <F2> eu alterno de opção de consulta por ex: nome,cidade,estado....
O problema que vc está enfrentando com o dbgrid eu resolvi assim:
1 - o foco sempre está na grid;
2 - qdo algo é digitado eu envio o caracter para um edit;
3 - faço a consulta no dataset que está relacionado ao dbgrid (dados);
4 - volto o foco para o dbgrid;
A única coisa é que o edit não fica com o cursor piscando (eh claro)...
[]´s
D4N13L
02/07/2004
Aldus
Mas qual evento usar para capturar a tecla pressionada, já que o dbgrid não possui OnClick?
Se você tiver um fragmento do código agradeceria.
Mario
02/07/2004
D4n13l
vai lah :
no evento onkeypress do dbgrid vc atribui o que a pessoa está digitando no edit:
...
edit1.text := edit1.text + key;
...
depois vc vai no evento onkeypress do edit e coloca isso:
...
DBGrid1.SetFocus;
DBGrid1.SelectedIndex := 0;
...
a instrucao selectedindex quer dizer para colocar o foco na primeira coluna do dbgrid (coluna 0).....
enjoy !
[]´s
D4N13L
02/07/2004
Thiago Vidal
Segue um Exemplo:
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if (Key in [VK_UP, VK_DOWN]) then begin if (Key = VK_UP) then DBGrid1.DataSource.DataSet.Prior else DBGrid1.DataSource.DataSet.Next; Edit1.SetFocus; end; end; procedure TForm1.Edit1Change(Sender: TObject); begin DBGrid1.DataSource.DataSet.Locate(´CIDADE´, Edit1.Text, [loCaseInsensitive]); end;
Assim, cada vez que o Edit for alterado (OnChange) sera efetuada a busca nos registros do grid, se forem pressionadas as teclas para cima ou para baixo, o cursor será deslocado no DataSet do Grid.
02/07/2004
Aldus
Exemplo:
if key = ????????
edit1.text := edit1.text + key;
Mario
02/07/2004
Aldus
Não é possível ter duplo foco?
Outra dúvida, eu uso uma função no form principal pra trocar o enter por tab em toda a aplicação, e com ela ativa não tenho controle sobre o enter e as setas, como posso desativá-la momentaneamente.
Está assim declarada:
procedure TfPrincipal.FormCreate(Sender: TObject); begin Application.OnMessage := ProcessaMsg; end;
05/07/2004
Aldus
Alguém já fez uma consulta assim ou tem outra dica?
Atenciosamente
Mario
Clique aqui para fazer login e interagir na Comunidade :)