Não sair do Grid ao apertar enter.

Delphi

13/11/2012

Pessoal estou com o seguinte problema:

Em um grid, entro com o codigo do pruduto, apertando enter ele vai p linha abaixo, ate ai esta ok!

O problema é que usando a tecla para cima ele sobe a linha do produto acima claro, quando a alguma modificação nessa linha, aperto enter e ele vai p linha abaixo me dando opção de entrar com um novo produto, mas quando não tem alteração, apenas aperto para cima, sobe a linha e não aletro nada, se eu apertar enter ai, ele sai do grid, indo para o grid abaixo.

preciso apertar enter e ele adicionar uma linha, independente de haver alteração na linha acima ou nao!

Entenderam?
Rafael Fekete

Rafael Fekete

Curtidas 0

Respostas

Luiz Menin

Luiz Menin

13/11/2012

Tente utilizar o evento OnKeyPress.


if Key = #13 then
  Tabela.Insert;


GOSTEI 0
Rafael Fekete

Rafael Fekete

13/11/2012

ja uso no meu evento keypress, tenho o seguinte codigo:

procedure TFrmOrcamento.GridItensKeyPress(Sender: TObject; var Key: Char);
begin
if Key = '.' then
Key := ','
else
if Key = '*' then
Key := #0
else
if Ord(Key) = 10 then
Key := #0
end;
GOSTEI 0
Luiz Menin

Luiz Menin

13/11/2012

Provavelmente o erro esteja aí.
Faça um teste com esse código que te passei e fale o resultado.
GOSTEI 0
Rafael Fekete

Rafael Fekete

13/11/2012

Não Funciona! "/

Continua saindo do grid quando subo a linha e aperto enter!

Não seria algo no KeyUp?
GOSTEI 0
Claudia Nogueira

Claudia Nogueira

13/11/2012

Tenta colocar no evento onEnter do grid o código: KeyPreview := False;
E no onExit := KeyPreview := True;

Pra inserir um registro quando estiver no último item do grid, dá pra colocar no onKeyPress do grid igual o colega citou, mas verificando se está no fim:

if Key = '.' then
Key := ','
else
if Key = '*' then
Key := #0
else
if Ord(Key) = 10 then
Key := #0
else
if (Key = #13) then
begin
if Tabela.State in [dsInsert, dsEdit] then
  Tabela.Post;
if (Tabela.RecordCount = Tabela.RecNo) then
  Tabela.Append;
Key := #0;
end;
GOSTEI 0
Deivison Melo

Deivison Melo

13/11/2012

Quando estiver no grid modificar em tempo de execução a property: "KeyPreview" para false e quando estiver saindo do grid modificar novamente para true,
GOSTEI 0
Rafael Fekete

Rafael Fekete

13/11/2012

Claudia funcionou! ele não sai do grid.


Agora vem outra questão, quero que ao apertar enter em uma determinada coluna, ele passe para linha abaixo adicionando outro registro, e não correr todas as colunas ate a ultima para poder adicionar mais um registro.
GOSTEI 0
Claudia Nogueira

Claudia Nogueira

13/11/2012

Tenta assim:

if Key = '.' then
Key := ','
else
if Key = '*' then
Key := #0
else
if Ord(Key) = 10 then
Key := #0
else
if (Key = #13) then
begin
if Tabela.State in [dsInsert, dsEdit] then
Tabela.Post;
Tabela.Append;
Key := #0;
end;


Claudia funcionou! ele não sai do grid.


Agora vem outra questão, quero que ao apertar enter em uma determinada coluna, ele passe para linha abaixo adicionando outro registro, e não correr todas as colunas ate a ultima para poder adicionar mais um registro.
GOSTEI 0
Rafael Fekete

Rafael Fekete

13/11/2012

Não funciona!

Veja bem!
começa com a coluna Item, depois vai p coluna codigo, dai tem mais umas 9 colunas.

quero que ao digitar o codigo, ele ja passe p linha abaixo adicionando outro item, sem percorrer ate o fim!
Entende?

desde ja Obrigadoo! :)

GOSTEI 0
Claudia Nogueira

Claudia Nogueira

13/11/2012

Eu tinha entendido que você queria que adicionasse quando estivesse na última linha, pra inserir quando pressionar enter e quando o campo código estiver selecionado acho que esse código funciona:

  if Key = '.' then
    Key := ','
  else
  if Key = '*' then
    Key := #0
  else
  if Ord(Key) = 10 then
    Key := #0
  else
  if (Key = #13) and (DBGrid1.SelectedIndex = 1) then
  begin
    if Tabela.State in [dsInsert, dsEdit] then
      Tabela.Post;
    Tabela.Append;
    Key := #0;
  end;


Se o campo "codigo" for o segundo do DBGrid, então ele é Index = 1.
Se não for isso, aí explica novamente pra ver se eu entendo.
Hehehe. Loira mode on. :)
GOSTEI 0
Rafael Fekete

Rafael Fekete

13/11/2012

Funcionou! porém coloquei as regras no keydown do form.

Obrigado! :)


GOSTEI 0
POSTAR