Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Setas no DBGrid


José Luiz

Pergunta

3 respostass a esta questão

Posts Recomendados

  • 0
Quando estou em um DBGrid e pressiono as teclas de setas ( diretita ou esquerda ), o foco muda de coluna, mas se estou com a opção DgRowSelect = True, muda de registro.

Como posso fazer para que em modo DgRowSelect = True o DBGrid não mude de registro ?

José Luiz, selecione o seu DBGrid e na janela Object Inpector, acesse o evento OnKeyPress e escreva este código:

procedure TForm1.DBGrid1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  if (Key = VK_LEFT) or (Key = VK_RIGHT) then
    Key := 0;  // descarta a tecla
end;
caso este seu DBGrid opere hora com dgRowSelect = True e hora com dgRowSelect = False, você precisará incluir este teste no if..then:
if (dgRowSelect in TDBGrid(Sender).Options) and
   ((Key = VK_LEFT) or (Key = VK_RIGHT)) then

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

Obrigado pela resposta.

Em princípio resolveria o meu problema, porém vou explicar melhor a minha necessidade.

Tenho um DBGrig, com uma tabela Paradox, indexado por três campos diferentes, ou sejam

DATA, CODIGO e DESCRICAO.

Inicialmente o meu DBGrid está indexado por DATA. Ao pressionar a seta para a direita, o índice deve passar para CODIGO.

Estando em CODIGO, se eu pressionar a seta para a esquerda, volta para DATA, e se pressionar para a direita passa para DESCRICAO.

A rotina funciona normalmente, porém não permanece no mesmo registro.

já tentei usar o BookMark, mas como muda de índice, dá erro.

já tentei criar variáveis como mDATA, mCODIGO E mDESCRICAO, e depois um FindKey. Também não funcionou. Acho que a função interna do Delphi que faz mudar de registro age antes de eu salvar as variáveis de memória.

Tem alguma outra solução ?

Obrigado,

José Luiz.

Link para o comentário
Compartilhar em outros sites

  • 0

Depois de postar a nova descrição, utilizei a tua dica, e fiz o seguinte.

Criei uma variável DIRECAO, e fiz

DIRECAO := '' ;

if (Key = VK_LEFT) or (Key = VK_RIGHT) then begin

if Key = VK_LEFT then DIRECAO := 'ESQ' ;

if Key = VK_RIGHT then DIRECAO := 'DIR;'

Key := 0;

end

Depois foi só verificar se a variável DIRECAO era <> de ''.

Obrigado, resolvido.

José Luiz.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...