Manoel Zancheta Postado Outubro 17, 2008 Denunciar Share Postado Outubro 17, 2008 (editado) 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 Outubro 17, 2008 por maneju Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Outubro 17, 2008 Denunciar Share Postado Outubro 17, 2008 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest Visitante Postado Outubro 17, 2008 Denunciar Share Postado Outubro 17, 2008 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! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Outubro 17, 2008 Denunciar Share Postado Outubro 17, 2008 Teste o código e veja o que acontece. Vai ficar melhor do que voce está querendo.abraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Manoel Zancheta Postado Outubro 17, 2008 Autor Denunciar Share Postado Outubro 17, 2008 (editado) 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 Outubro 17, 2008 por maneju Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Outubro 17, 2008 Denunciar Share Postado Outubro 17, 2008 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Outubro 17, 2008 Denunciar Share Postado Outubro 17, 2008 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 codigoprocedure 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Manoel Zancheta Postado Outubro 17, 2008 Autor Denunciar Share Postado Outubro 17, 2008 (editado) 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çosOk, Micheus entendi, faz sentido oque você explicou. Vou usar o exemplo do Jhonas com alguma adaptação aqui.Obrigado aos dois. Editado Outubro 17, 2008 por maneju Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Manoel Zancheta
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 manejuLink para o comentário
Compartilhar em outros sites
7 respostass a esta questão
Posts Recomendados
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.