duvida sobre dbgrid
Boa tarde pessoal.. estou com um problema urgente!! meu cliente me pediu pra mim fazer uma coisa que não sei.. e gostaria de pedir a ajuda de vcs..
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
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
Curtidas 0
Respostas
Japa
11/08/2005
Amizade descupe-me se eu não entendi a sua pergunta...
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
Boa sorte amizade... tomara que seja isso...
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
Eric.miranda
11/08/2005
Vale Japa.. mas não é bem isso.. consegui resolver parcialmente meu problema..
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
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
Marco Salles
11/08/2005
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
Eric.miranda
11/08/2005
Valeu mesmo Marco Salles...
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
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
Marco Salles
11/08/2005
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..
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
Eric.miranda
11/08/2005
Não Marcos Salles..
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
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