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

[resolvido] Travar Dbgrid


Bruno Souza

Pergunta

Olá amigos

meu problema é o seguinte, tenho um formulário que tem apenas um menu de funções e um DBGrid, onde serão incluidas as informações... conforme na figura abaixo:

printzh7.gif

Ele funciona perfeitamente, só que quando o usuário está digitando uma informação no campo do DBGrid ele sempre acaba apertando a seta pra baixo do teclado, e isso gera um novo registro do DBGrid e por mais que ele aperte seta pra cima pra voltar e continuar editando a linha anterior na hora de gravar o registro da erro.

Então eu gostaria de saber se tem algum jeito de atribuir o append somente ao botão, e não aos comando do DBGrid, eu queria que o DBGrid fosse utilizado somente para digitação dos dados.

Eu até cheguei a interceptar a msg do botão seta pra baixo só que não vai ter como ficar sem este botão, o ideal mesmo é que as funções de DB fosse executadas somente a partir dos botões de menu.

Quem tiver alguma idéia. posta aí

Obrigado

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0
Guest --Jonas --

Coloque este codigo no envento onkeypress do dbgrid e faça as modificações necessarias, a tecla de seta para baixo mesmo sendo clicada, abrira novo registro no dbgrid mas a tecla de seta para cima desfara o registro.

if (Key = #13) then   // tecla enter 
      if not (ActiveControl is TDBGrid) then
         begin
            Key := #0;
            Perform(WM_NEXTDLGCTL, 0, 0);
         end
      else if (ActiveControl is TDBGrid) then
         with TDBGrid(ActiveControl) do
         if selectedindex < (fieldcount -1) then
            begin
               selectedindex := selectedindex +1;
               CDS_Cadastro.Edit;
               case selectedindex of
                1 : // codigo que voce quiser;
                2 : //...;
               
               end;
  
            end
         else
            begin
               CDS_Cadadtro.Post;
               CDS_Cadastro.Last;
               CDS_Cadastro.Append;
               selectedindex := 0;
            end;

   if (Key = #9) then   // tecla Tab                    
      if not (ActiveControl is TDBGrid) then
         begin
            Key := #0;
            Perform(WM_NEXTDLGCTL, 0, 0);
         end
      else if (ActiveControl is TDBGrid) then
         with TDBGrid(ActiveControl) do
         if selectedindex < (fieldcount) then
            begin
               CDS_Cadadtro.Edit;
               case selectedindex of
                1 : // codigo que voce quiser;
                2 : //...;
     
               end;

            end
         else
            begin
               CDS_Cadadtro.Post;
               CDS_Cadastro.Last;
               CDS_Cadastro.Append;
               selectedindex := 0;
            end;

Link para o comentário
Compartilhar em outros sites

  • 0
..., só que quando o usuário está digitando uma informação no campo do DBGrid ele sempre acaba apertando a seta pra baixo do teclado, e isso gera um novo registro do DBGrid e por mais que ele aperte seta pra cima pra voltar e continuar editando a linha anterior na hora de gravar o registro da erro.
tratando especificamente deste problema, e sem alterar outros comportamentos da sua tela, acho que você poderia apenas interceptar as teclas DOWN e UP (no evento OnKeyDown do seu DBGrid) durante a edição ou inserção evitando o efeito mencionado:

procedure TBrwTesteDBEdit.DBGrid1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  if ((Key = VK_DOWN) or (Key = VK_UP)) and // seta para baixo ou para cima
     ((Sender as TDBGrid).DataSource.State in [dsInsert, dsEdit]) then  // e estando em modo inserção/edição
    Key := 0;  // descarta a tecla
end;

o código é genérico e pode ser copiado/colado em qualquer outro dbgrid

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

Obrigado Jonas pelo código, mas não usei... tenho alguns campos de preenchimento obrigatório então da muito pau na hora de criar um novo registro e deixar campos em branco...

... Micheus, eu já tinha tentado interceptar as teclas, mas eu estava travando o DBGrid todo e não só no Insert ou Edit...

..... assim da pra usar tranquilo, Obrigado.

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,3k
×
×
  • Criar Novo...