Jump to content
Fórum Script Brasil
  • 0

[resolvido] Travar Dbgrid


Bruno Souza
 Share

Question

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 to comment
Share on other sites

3 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share



  • Forum Statistics

    • Total Topics
      150.2k
    • Total Posts
      647.4k
×
×
  • Create New...