Fórum dbGrid/Enter #230330

06/05/2004

0

Meus clientes vem da cultura Dos, estão acostumados a utilizar a tecla enter, nos campos normais isto já está fazendo, a minha dificuldade está na grid:

Tenho uma Grid que contem 3 campos(parcela, data do vencimento e valor), no momento que o usuário acionar a tecla enter no campo valor
quero que o cursor avance automaticamente para a próxima linha e na primeira coluna(numero da parcela)

Obs. Avancar para opróximo campo isto já faz, a dificuldade é avançar
para a próxima linha.

Ontem obtive algumas orientações, mas não funcionou.


Placido

Placido

Responder

Post mais votado

06/05/2004

Colega,

Tenho um sistema que possui vários DBGrids e utilizo tanto tab como enter para pular de campo e inserir nova linha.

Tente assim no OnKeyDown do DBGrid:

procedure TfmPedidos.DBGrid4KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
case Key of
13 : Key := 9;
end;
end;

Deverá observar tbém a configuração da propriedade options do seu DBGrid.

Espero ter ajudado

CBier


Cbier

Cbier
Responder

Gostei + 1

Mais Posts

06/05/2004

Eniorm

Especificamente como fazer isso eu não sei, mas obtive esse mesmo resultado implementando um procedimento pra mudar de edit ao pressionar enter:

no form principal do seu aplicativo declare StrCtrls
e implemente isso:

procedure TFormPrincipal.ProcessaMsg(var Msg: TMsg;
  var Handler: Boolean);
begin
     if (Msg.message = WM_KEYDOWN) then
        if not (Screen.ActiveControl is TCustomMemo) and
           not (Screen.ActiveControl is TButtonControl) then begin
             if not (Screen.ActiveControl is TCustomControl) then begin
                if (Msg.wParam = VK_Down) and
                   not(Screen.ActiveControl is TListBox) and
                   not(Screen.ActiveControl is TComboBox) then
                   Msg.wParam:= VK_Tab;
                if (Msg.wParam = VK_UP) and
                   not(Screen.ActiveControl is TListBox) and
                   not(Screen.ActiveControl is TComboBox) then begin
                   Msg.wParam:= VK_CLEAR;
                   Screen.ActiveForm.Perform(WM_NextDlgCtl,1,0);
                end;
                if (Msg.wParam = VK_Escape) and
                  not (Screen.ActiveForm is TSimoformPrincipal) then
                   Screen.ActiveForm.Close;
             end;
             if (Msg.wParam = VK_Return) then
                Msg.wParam:= VK_Tab;
        end;
end;


Agora no OnCreate do form principal:

Application.OnMessage := ProcessaMsg;


Isso faz com que mude de campo ao pressionar enter,
inclusive no dbgri


Responder

Gostei + 0

06/05/2004

Marco Salles

Amigo , voce ja fez esta mesma pergunta antes no topico:
http://www.clubedelphi.com.br/novo/index.html
Neste topico voce obteve algumas dicas de alguns colegas
As dicas não deram efeito :?: :?:
O que há nas dicas que não funcionou :?:
Acho que as Correspostas aquelas dicas são importantes para afinilar e filtrar o problema..e assim chegar a um denominador comum..Eu, por exemplo, olhei rapidamente as dicas e concordei com elas :( ...Meu objetivo não e te corrigir, te informar, nada disto..apenas tentar lhe ajudar..mas parar isto, quanto mais detalhes e informações do que se quer fazer , o que não deu certo, porque não deu, etc... melhor...Beleza


Responder

Gostei + 0

06/05/2004

Marco Salles

Tenho uma Grid que contem 3 campos(parcela, data do vencimento e valor), no momento que o usuário acionar a tecla enter no campo valor quero que o cursor avance automaticamente para a próxima linha e na primeira coluna(numero da parcela) Obs. Avancar para opróximo campo isto já faz, a dificuldade é avançar para a próxima linha.

[b:8440475803]Uma Das dicas que recebeste ontem:[/b:8440475803]begin
if key = #13 then
begin.Post;
If DbGrid1.DataSource.State <> DsBrowse Then
Table1.Append;
Table1.Fields[0].FocusControl;
end;
end;

Desculpe é que eu sou novato, para navegar no forum..... Não é que as dúvidas não funcionaram..... é que não ficou do jeito que eu quero, por exemplo nas dicas enviadas[b:8440475803] o cursor abre uma linha na grid, mas desloca as linhas digitadas para baixo[/b:8440475803], eu não quero isto, eu quero que ao acionar a tecla enter [b:8440475803]no último campo da grid o cursor avance uma linha e fique posicionado no primeiro campo da linha a ser digitqada. [/b:8440475803]Grato pela atenção.....


[b:8440475803]Então não deu exatamente o que voce queria ..Então vamos tentar o código abaixo....[/b:8440475803] :idea: :idea: :idea:
procedure TForm1.DBGrid1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var
 i:Integer;
begin
i:=Table1.RecordCount;
  if key = VK_Return then
    begin
      if DbGrid1.SelectedIndex=4 then
        begin
          if DbGrid1.DataSource.State = DsBrowse then //Aqui
             begin
               if Table1.RecNo <> i Then
                 begin
                   Table1.Next;
                   Table1.Insert;
                 end
               else
                 Table1.Append;
               Table1.Fields[0].FocusControl;
             end;
        end
      else
        key:=VK_RIGHT;
end;
end;


[b:8440475803]Note que eu Mudei o Evento...Para DBGrid1KeyDown[/b:8440475803]

P:S Algumas propiedades listadas presupoem que voce esta usando um Table...Tem Banco que não aceita a Porpriedade recno :( :( ...Então o código anterior tem que sofrer algumas alterações :cry: :cry: ....
Se nao funcionar ou não for do seu agrado, poste novamente, Não tem Importancia :P :P


[b:8440475803]Tente isto e nos comunique o mais rapido possivel[/b:8440475803]


Responder

Gostei + 0

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

Aceitar