Fórum duvida sobre dbgrid #291520

11/08/2005

0

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


Eric.miranda

Eric.miranda

Responder

Posts

11/08/2005

Japa

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
   if key=#13 then
     begin
         //Comando para abrir a caixa
   end;



Boa sorte amizade... tomara que seja isso...


Responder

Gostei + 0

11/08/2005

Eric.miranda

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


Responder

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;


Responder

Gostei + 0

12/08/2005

Eric.miranda

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


Responder

Gostei + 0

12/08/2005

Marco Salles

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 :?: :?:


Responder

Gostei + 0

15/08/2005

Eric.miranda

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


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar