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

StringGrid - Setas para Direita e Esquerda


Manoel Zancheta

Pergunta

Olá.

Num StringGrid aonde as células são editáveis, depois que digito algo numa célula e pressiono seta para direita ou esquerda, o cursor não sai da célula em questão, ao menos que antes pressione ENTER. Tem como contornar isto?

Grato!

Editado por maneju
Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 0
Num StringGrid aonde as células são editáveis, depois que digito algo numa célula e pressiono seta para direita ou esquerda, o cursor não sai da célula em questão, ao menos que antes pressione ENTER. Tem como contornar isto?

Tem sim ... veja :

procedure TForm1.StringGrid1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var
i : integer;
begin
   i := Stringgrid1.row;

   // desabilita setas se celula estiver vazia
   if StringGrid1.Cells[1,i] = '' then
      if StringGrid1.Row <> StringGrid1.RowCount -1 then
         if ((key = vk_Down) or (key = vk_up)) then
            key := 0;

   // enter para nova linha
   if (key = vk_return) and (StringGrid1.Col = StringGrid1.ColCount -1) then
      if StringGrid1.Cells[1,i] <> '' then
         begin
            StringGrid1.RowCount := StringGrid1.RowCount + 1;
            StringGrid1.Col := 1;
            StringGrid1.Row := StringGrid1.Row  + 1;
            exit;
         end;

   // se a ultima linha estiver vazia, exclui
   if (key = vk_up) and (stringgrid1.Row > 1) then
      if StringGrid1.Cells[1,i] = '' then
         if (StringGrid1.Row = StringGrid1.RowCount -1) then
            StringGrid1.RowCount := StringGrid1.RowCount - 1;

   //pula de uma coluna para a outra com enter
    if StringGrid1.Cells[1,i] <> '' then
       if (key = vk_return) then
          StringGrid1.Col := StringGrid1.Col +1;


end;

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
Guest Visitante

Jhonas,

eu não "se" expressei bem. É o seguinte, quando você navega no StringGrid com as Setas Esquerda ou Direita você muda de colunas sem fazer nenhuma programação. A célula em questão, está com o tracejado ao seu redor pois a mesma está selecionada. quando digito algo nesta célula, ela "perde" o tracejado, daí as setas não funcionam mais, exceto se eu pressionar o ENTER antes de pressionar seta.

Não sei se fui mais claro agora!

Valeu!

Link para o comentário
Compartilhar em outros sites

  • 0

Olá.

Já testei, não é oque preciso. Esta navegação que você colocou eu já tenho aqui funcionando, meu problema ocorre apenas quando o usuário digita algo na célula, daí as setas ficam inativas enquanto a célula não estiver tracejada.

Edição: opa, agora que entendi o espírito da coisa, como funciona. Legal, mas eu tenho uma situação que tenho que usar da maneira que te falei...

Editado por maneju
Link para o comentário
Compartilhar em outros sites

  • 0
Num StringGrid aonde as células são editáveis, depois que digito algo numa célula e pressiono seta para direita ou esquerda, o cursor não sai da célula em questão, ao menos que antes pressione ENTER. Tem como contornar isto?

Já testei, não é oque preciso. Esta navegação que você colocou eu já tenho aqui funcionando, meu problema ocorre apenas quando o usuário digita algo na célula, daí as setas ficam inativas enquanto a célula não estiver tracejada.

maneju, você está querendo mudar o conceito que existe por detrás deste "efeito".

A idéia é a de que quando célula não está em edição (a tal célula tracejada), significa que você usa as setas para se deslocar entre elas. Já quando você está editando a célula, você (ou o usuário) poderiam estar querendo usar as setas para se deslocar dentro do texto, de modo a alterar algo em uma posição específica.

Se você "disser" que as setas vão servir apenas para o deslocamento entre as células, então, se o usuário quiser mexer em alguma coisa no meio do texto terá que usar o mouse para posicionar no lugar correto ou, no teclado, usar o backspace e/ou delete, apagando os caracteres até a posição desejada e depois digitando novamente.

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0
Já testei, não é oque preciso. Esta navegação que você colocou eu já tenho aqui funcionando, meu problema ocorre apenas quando o usuário digita algo na célula, daí as setas ficam inativas enquanto a célula não estiver tracejada.

Neste caso é só modificar o codigo

procedure TForm1.StringGrid1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var
i : integer;
begin
   i := Stringgrid1.row;

     //  FAÇA ESTA MODIFICAÇÃO ... quando CLICAR NA SETA A CELULA FICA COM O TRACEJADO

      if StringGrid1.Row <> StringGrid1.RowCount -1 then
         if ((key = vk_Down) or (key = vk_up) or
             (key = vk_Left) or (key = vk_Right)) then
            StringGrid1.EditorMode := false;

   // enter para nova linha
   if (key = vk_return) and (StringGrid1.Col = StringGrid1.ColCount -1) then
      if StringGrid1.Cells[1,i] <> '' then
         begin
            StringGrid1.RowCount := StringGrid1.RowCount + 1;
            StringGrid1.Col := 1;
            StringGrid1.Row := StringGrid1.Row  + 1;
            exit;
         end;

   // se a ultima linha estiver vazia, exclui
   if (key = vk_up) and (stringgrid1.Row > 1) then
      if StringGrid1.Cells[1,i] = '' then
         if (StringGrid1.Row = StringGrid1.RowCount -1) then
            StringGrid1.RowCount := StringGrid1.RowCount - 1;

   //pula de uma coluna para a outra com enter
    if StringGrid1.Cells[1,i] <> '' then
       if (key = vk_return) then
          StringGrid1.Col := StringGrid1.Col +1;

end;

Abraço

Link para o comentário
Compartilhar em outros sites

  • 0
Num StringGrid aonde as células são editáveis, depois que digito algo numa célula e pressiono seta para direita ou esquerda, o cursor não sai da célula em questão, ao menos que antes pressione ENTER. Tem como contornar isto?

Já testei, não é oque preciso. Esta navegação que você colocou eu já tenho aqui funcionando, meu problema ocorre apenas quando o usuário digita algo na célula, daí as setas ficam inativas enquanto a célula não estiver tracejada.

maneju, você está querendo mudar o conceito que existe por detrás deste "efeito".

A idéia é a de que quando célula não está em edição (a tal célula tracejada), significa que você usa as setas para se deslocar entre elas. Já quando você está editando a célula, você (ou o usuário) poderiam estar querendo usar as setas para se deslocar dentro do texto, de modo a alterar algo em uma posição específica.

Se você "disser" que as setas vão servir apenas para o deslocamento entre as células, então, se o usuário quiser mexer em alguma coisa no meio do texto terá que usar o mouse para posicionar no lugar correto ou, no teclado, usar o backspace e/ou delete, apagando os caracteres até a posição desejada e depois digitando novamente.

Abraços

Ok, Micheus entendi, faz sentido oque você explicou. Vou usar o exemplo do Jhonas com alguma adaptação aqui.

Obrigado aos dois.

Editado por maneju
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,2k
    • Posts
      651,9k
×
×
  • Criar Novo...