Fórum duvida sobre dbgrid #291520
11/08/2005
0
tenho um dbgrid.. nele o meu primeiro campo é produto.. tenho que selecionar o produto.. mas para selecionar tenho que clicar com o mouse para abrir a caixa e assim escolher o campo..
queria saber se tem como fazer isso via teclado.. usando somente ´seta pra baixo´..
procurei já no forum e vi que para abrir precisa enter + alt + seta pra baixo..
teria como altomatizar isso.. ou seja.. qdo eu pressionar ´seta pra baixo´ no dgrid1.selectedindex = 1 .. ele fazer enter +alt +seta pra baixo..
valeu pela força dinovo.
Eric
Eric.miranda
Curtir tópico
+ 0Posts
11/08/2005
Japa
Mas pelo que entendi vc quer usar somente a seta para baixo e para cima para pegar o produto certo ne?
Se for isso faça assim:
de um Dbgrid1.SetFocus;
Depois que ele focar o Dbgrid1 para que vc faça algo:
no Evendo Onkeypress coloque esse comando
if key=#13 then begin //Comando para abrir a caixa end;
Boa sorte amizade... tomara que seja isso...
Gostei + 0
11/08/2005
Eric.miranda
eis o código
procedure TFrmIncluir.DBGrid1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
If Dbgrid1.SelectedIndex = 0 then
begin
IF KEY = 40 THEN
begin
SENDKEYS(PCHAR(´¬´),FALSE);
exit;
end
else
begin
if (Chr(Key)<>#13) then exit;
if (DBGrid1.SelectedIndex+1<>DBGrid1.FieldCount) then
DBGrid1.SelectedIndex:=DBGrid1.SelectedIndex+1
else
begin
if (DBGrid1.SelectedIndex=DBGrid1.FieldCount-1) then
begin
Dtmdb.ItensRequisicao.Next;
if Dtmdb.ItensRequisicao.EOF then Dtmdb.ItensRequisicao.Append;
DBGrid1.SelectedIndex:=DBGrid1.SelectedIndex-DBGrid1.FieldCount-1;
end;
end;
end;
end;
end;
ou seja.. no primeiro campo do meu dbgrid ele é um campo lookup.. ou seja.. eu posso escolher um entre vários produtos de outra tabela..
qdo eu caia nele eu tinha que pegar o mouse clicar na célula para abrir a setinha do lado e aí aparecerem todos os produtos.. aí eu selecionaria 1 deles..
com o SENDKEYS(PCHAR(´¬´),FALSE); eu estou abrindo esse campo com apenas a seta pra baixo..
mas agora está o problema.. é que meu primeiro parametro é ENTER.. e como visto abaixo eu uso enter para percorrer os campos do dbgrid.. então tenho que arrumar um jeito de fazer os dois funcionarem juntos..
obrigado
Eric
Gostei + 0
12/08/2005
Marco Salles
procedure TForm1.DBGrid1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin case key of Vk_Down :begin if DbGrid1.SelectedIndex = 0 Then begin DbGrid1.OnKeyDown:=nil; Key:=Vk_Return; DbGrid1.EditorMode:=true; keybd_event(VK_MENU, 0, 0, 0); keybd_event(VK_UP, 0, 0, 0); sleep(100); keybd_event(VK_UP, 0, KEYEVENTF_KEYUP, 0); keybd_event(VK_MENU, 0, KEYEVENTF_KEYUP, 0); end; end; Vk_Return :Begin if (DBGrid1.SelectedIndex+1<>DBGrid1.FieldCount) then DBGrid1.SelectedIndex:=DBGrid1.SelectedIndex+1 else begin if (DBGrid1.SelectedIndex=DBGrid1.FieldCount-1) then begin Dtmdb.ItensRequisicao.Next; if Dtmdb.ItensRequisicao.EOF then Dtmdb.ItensRequisicao.Append; DBGrid1.SelectedIndex:= DBGrid1.SelectedIndex-DBGrid1.FieldCount-1; end; end; end; end; end;
procedure TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char);
begin
DbGrid1.OnKeyDown:=DBGrid1KeyDown;
end;
Gostei + 0
12/08/2005
Eric.miranda
putz...funcionou perfeitamente..
kra te agradeço mto pela ajuda... tava quebrando a cabeça com isso a um tempão..
se não for abusar demais.. eu não entendi mto bem como funcionou isso..
por exemplo... se no caso eu quisesse abrir essa caixa qdo eu clicasse na tecla.. por exemplo.. tenho nos produtos gasolina... eu digitasse g.. e ele ja abriria a caixa..
seria só eu por um case key of ord(key)... isso é so pra entender melhor como funcionou..
valeu mesmo
Gostei + 0
12/08/2005
Marco Salles
Agora eu é que não estou entendendo o que voce esta querendo
Voce alem de abrir a lista voce esta querendo ja abrir no produto que incicia com a tecla :?: :?: :?:
Por exemplo clicando a tecla g , a lista se abriria e o Produto gasolina da lista estaria evidenciado :?: :?: :?: Seria isto :?: :?:
Gostei + 0
15/08/2005
Eric.miranda
sua resposta já atendeu perfeitamente o que eu precisava.. está rodando direitinho.. do jeito que eu preciso..
só queria entender como que funciona esta parte do código.
DbGrid1.OnKeyDown:=nil;
Key:=Vk_Return;
DbGrid1.EditorMode:=true;
keybd_event(VK_MENU, 0, 0, 0);
keybd_event(VK_UP, 0, 0, 0);
sleep(100);
keybd_event(VK_UP, 0, KEYEVENTF_KEYUP, 0);
keybd_event(VK_MENU, 0, KEYEVENTF_KEYUP, 0);
end;
mas dei uma estudada nele e já descobri..
agradeço mto sua ajuda.. valeu mesmo :D :D
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)