Array
(
)

Pesquisando com dbgrid

Aldus
   - 04 set 2004

Olá amigos, como iniciante em delphi, recorro a vocês para o seguinte:

Como programava em DOS, em uma lista de clientes por exemplo, ia digitando o nome do cliente e o sistema ia se posicionando ao que perto se assemelhava, como já estava em cima do nome, dava enter e carregava aquele cliente.

Como poderia fazer isso em delphi, coloquei um dbgrid e um edit, vou digitando no edit e o sistema filtra corretamente através de instrução sql, só que o usuário é obrigado a dar um clique sobre o cliente que aparece no dbgrid para selecioná-lo, teria como digitar a procura sob o dbgrid, aí o foco já estaria no dbgrid e estaria resolvido.

Na verdade, essa é uma necessidade que temos em usuários de pequenas empresa, que são inimigos de mouse, então o que podermos fazer para facilitar, eles agradecem.

Espero contar com ajuda de vocês.
Uso delphi 7, dbexpress e firebird

Obrigado

Mario


Vinicius2k
   - 04 set 2004

Colega,

Tente usar sua DBGrid com a opção ´AlwaysShowSelection´ como ´True´...

Isto causa um efeito visual, mas é, digamos, desnecessário... o ponteiro já está posicionado no registro desejado, e creio o seu evento do TEdit que dispara a seleção do cliente seria executado normalmente, a não ser que exista alguma particularidade que vc não mencionou...

Espero ter ajudado...
T+


Carlos Rausch
   - 01 out 2004

Eu uso assim...

Se o cara pressionar o enter do edit1

no evento onkeypress do edit

if Key = #13 then
begin
Perform( WM_NEXTDLGCTL, 0, 0 );
Key := 0;
dbgrid1.OnColExit(form2);
end;

se o cara pressionar as teclas <UP> ou <DOWN>

no evento onkeydown do edit

if key = vk_down then
begin
dbgrid1.SetFocus;
dm.tblProduto.Next;
end;
if key = vk_up then
begin
dbgrid1.SetFocus;
dm.tblProduto.Prior;
end;

e caso ele vá até o registro q quer selecionar pelo dbgrid, então:

no evento oncolexit do dbgrid :

fPedidoVenda.Enabled := True;
fPedidoVenda.dbgrid1.columns[0].field.text := dbgrid1.Columns[0].field.Text;
self.close;

no evento onkeydown do dbgrid :

case key of
13 : Key := 9;
end;
if (Shift = [ssCtrl]) and (Key = 46) Then
KEY := 0;

é mais ou menos isso, se tiver alguma dúvida, manda ae...