Fórum DbGrid Controle Consciente De Dados... #204107

04/01/2004

0

Gostaria De Saber Como Mudar O Comportamento Do DbGrid Para Que as Setas do Teclado <Para Cima e Para Baixo> , E a Tecla Tab Não OPerem no Dbgrid. Em Outras Palavras o Usuário Edita Em Algum Campo Do DbGrid e Por Descuido Ele Clica Em Uma Seta .Isto Foi Suficiente Para a Tabela Sair Do Modo De Edição Ou Inserção E Entrar No Modo DsBrow e Consequentemente a Gravação Indesejada Do Registro. Em Outras Palavras o DbGrid Permite a Rolagem, a Navegação e a Edição e Atê Mesmo a Inserção De Campos Em Uma Tabela. Atê Aí Tudo Bem. Mas a Confirmação Dos Novos Dados Deveria Ser De Modo Consciente(Clicando Em Um Botao Para Salvar,Cancelar) e Não Apertando as Teclas <Seta Acima,Seta Abaixo> Ou Tab Do Teclado, o Que Pode Acontecer Por Descuido Do Usuário Numa Ação Indesejada.
P:S A Tecla Tab Gostaria Que Ela Ficasse Somente Com a Função De
Andar Nos Campos e Não Inserindo Registro No Fim De Uma Tabela.
Obs: Eu Não Sei Se Foi Claro, Mas Tem Muito Tempo, Que Eu Tenho Uma ´Certa Birra´ Sobre a Atuação Dessa Teclas Quando Se Esta Exibindo Uma Tabela Usando O DbGrid.
Espero Que Entendam e Possam Me Ajudar. Obrigado


Marco Salles

Marco Salles

Responder

Posts

04/01/2004

Marco Salles

Sobe...


Responder

Gostei + 0

04/01/2004

Centopocento

Oi Marcos,

Durante muito tempo eu trabalhei editando uma grade, ainda usu isto de vez enquando, mas nos meus novos sistemas alterei por solicitação do usuário.
A solução do seu problema não esta no DBGrid e sim nos eventos da tabela associada a grade vc. deve configura os eventos ´AfterPost´,´BeforePost´,´AfterDelete´,´BeforeDelete´ conforme sua necessidade. Lembre-se qdo o usuário tecla a seta o sistema grava o registro atual, no evento ´BeforePost´ vc poderá fazer os teste necessários o pedir uma confirmação se desejar é só cancelar a gravação e voltar ao estado anterior.
Espo ter te dado uma Luz.

T+

Edgar


Responder

Gostei + 0

04/01/2004

Marco Salles

Oi Marcos, Durante muito tempo eu trabalhei editando uma grade, ainda usu isto de vez enquando, mas nos meus novos sistemas alterei por solicitação do usuário. A solução do seu problema não esta no DBGrid e sim nos eventos da tabela associada a grade vc. deve configura os eventos ´AfterPost´,´BeforePost´,´AfterDelete´,´BeforeDelete´ conforme sua necessidade. Lembre-se qdo o usuário tecla a seta o sistema grava o registro atual, no evento ´BeforePost´ vc poderá fazer os teste necessários o pedir uma confirmação se desejar é só cancelar a gravação e voltar ao estado anterior. Espo ter te dado uma Luz. T+ Edgar


Gostei. Mas Poder Me Dar Um Exemplo Deste Teste E Como Eu Faço Para Cancelar. Estou Dizendo Isto Porque Se No Evento BeforePost Eu Digitar
Table1.Cancel eu Acredito Que Não Irá Cancelar as Alterações Feitas No Meu Banco De Dados.Alem Disso Qual A Maneira Para Ocorrendo Cancelamento Por Algum Motivo o Campo Da Grid Que Não Passar Neste Teste Voltar a Ser Selecionado. Por Exemplo Um Campo Que Não Pode Ter SER Valor Nulo. Pode Se testar No Evento BeforePost.
[color=red:ad59300dcc]//No Evento BeforePost
if (Table1´Campo´.ISnull)And(Tabl1´Campo´.Value = 0 ) Then
begin
Beep;
ShowMessage(´Este Campo Nãqo Pode Ter o Valor Zero´;
O Que Faço Agora Para Cancelar o Valor Zezo Teoricamente Digitado
e a Grid Ficar Selecionada Exatamenente Nesse Campo :?:Esperando Uma Outro Valor a Ser Digitado Pelo Usuário[/color:ad59300dcc]


Responder

Gostei + 0

05/01/2004

Marco Salles

Será Que Não Tem Jeito, Ou Ninguem Entedeu :?:


Responder

Gostei + 0

05/01/2004

Marco Salles

Sobe


Responder

Gostei + 0

06/01/2004

Marco Salles

[color=blue:9d0e992fe5]O Usuário Ao Editar Uma Grade Pode Por Descuido Teclar as <SETAS Para Cima e ParaBaixo> . O Sistema Grava Então o Registro Atual, Que Pode Conter Erros Por Não Estar Devidamente Preenchidos. O Que Peço é
Um Meio de Desabilitar Estas Teclas. Não Havendo Meio , Gostaria De Escrever Um Método Para Que o Grid Cance o Registro Editado Ou Inserindo Se Detectado Qualquer Erro(Por Exemplo Um Campo Que Não Pode Ter o Valor ZERO). E Mais, Que Além De Informar o Erro, Retorne
No Mesmo Campo Da Grade Que Apresentou Erro a Fim De Ser Reeditado. Porque Que Eu Considero Importante Que a Grade Retorne Para o Mesmo Cmpo Que Se Detectou Erro ? A Resposta é Simples. Imagine o Usuário Tenha Preenchido Todos os Campos Corretos Da Grid e
Apenas o Ultimo Campo Errado. Se Ao Detectar o Erro , eu Escrever Um Código Simplesmente Para Cancelar(Ex:Table1.Cancel), o Usuáro Terá Que Reeditar Toda a Grid, O Que Muitas Das Vezes Não Será Um Trabalho Prazeroso, e Ele Certamente Irá Falar Mal Do Aplicativo.
Por ISto Amigos Lanço Esta Questão e Desdee Já Agradeço. [/color:9d0e992fe5]


Responder

Gostei + 0

06/01/2004

Marco Salles

Sobe


Responder

Gostei + 0

07/01/2004

Marco Salles

´Depois Falam Que Em Programação Tudo Se Dá Jeito....´


Responder

Gostei + 0

07/01/2004

Wwenceslau

Manipule o teclado !!!
Se a tabela associada ao DBGrid estiver em modo de inserção ou edição desabilite a digitação das teclas de rolagem...

No evento onKeyDown do DBGrid use o seguinte:

Case Key of
VK_DOWN,
VK_UP,
VK_???
: begin
If (DBGrid.DataSource.DataSet.State in [dsInsert, dsEdit]) then
kEY := 0;
end;

Este código não impede que role quando estiver em mode browse e nem impede a digitação normal.

e pronto.
Espero ter ajudado.


Responder

Gostei + 0

07/01/2004

Marco Salles

Claro Que Me Ajudou. E Me Ajudou Muito. Mas Aconteceu Uma Fato Esquisito. A Instrução ´VK_???´ , Não Compila. O Sistema Não Reconhece Esta Instrução :?: O Que Eu Fiz Então Foi Tirar Esta Instrução Da Minha Linha De Código. E Mesmo Sem Esta Instrução o As Teclas De Rolagem Ficaram Desabilidadas. Então Para Que Serve a Instrução ´VK_???´ :?:
E Qual a Uses Que Devo Declarar No Meu Sistema Para Que Reconheça Esta Instrução :?: Será Que Esta Instrução Esta Corretamente Grafada :?: E Qual a Perda Ao Tira-la Do Código :?:

P:S Agradeço Muito Sua Contribuição. Eu Já Estava Meio Desolado, Ma
Sua Contribuição Reanimou-me. Que Sabe Tu Responde Mais Estas
Questões :?:


Responder

Gostei + 0

07/01/2004

Aroldo Zanela

Colega,

A tabela de VK (Teclas virtuais) estão na Windows.pas que é adicionada normalmente nos seus formulários. O que o colega quis representar com VK_???, acredito eu, refere-se a você especificar as demais teclas.


Responder

Gostei + 0

07/01/2004

Marco Salles

[quote:2d2e33332a=´Aroldo Zanela´]Colega,

A tabela de VK (Teclas virtuais) estão na Windows.pas que é adicionada normalmente nos seus formulários. O que o colega quis representar com VK_???, acredito eu, refere-se a você especificar as demais teclas.[/quote:2d2e33332a]

Arolodo Zanela, Não é a Primeira Vez Que Você me Socorre, Espero T.B QQue Não Seje a Última, Mas Quando Você Diz Demais Teclas, a Tecla <Tab>, Qua Será Este VK_ Correspondente :?: . Existe Um Manual Para Saber Isto :?: . Obrigado...

P:S Uma Vez Voce me Sugeriu Que Eu Lhe Envia-se Um Email De Uma
Tabela e De Um Form, Lembra :?: Tentei Lhe Enviar Em Tres
Tentativas, e Nenhuma Delas Obteve Exito, Então Deixo Aqui Meus
Agradecimentos
e a Explicação Por Atê Hoje Voce Não Ter Recebido Tal Email


Responder

Gostei + 0

07/01/2004

Wwenceslau

Abra a unit Window.pas no source do delphi que lá tem toda a relação de teclas que você precisa.
Espero ter ajudado novamente...
Obs: para facilitar, coloque o cursor do mouse sobre o nome da unit window que esta na clausula uses do seu form e depois com o botão direito do mouse peça para abrir e vai direto.
Até.
Wanderley


Responder

Gostei + 0

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

Aceitar