MessageBox
Pessoal,
Em meu programa as mudanças de foco dos campos é feita através de Enter. Em alguns campos eu coloquei algumas verificações (como formato de CEP, por ex.) e, caso o usuário digite errado o número uma mensagem de erro é emitida. Até aí tudo OK. O problema acontece após fechar a mensagem que programei. Como a mudança do cursor é automática ao pressionar Enter, o próximo campo deveria receber o foco mas não está recebendo. Ao contrário, fica até travada a entrada do cursor. Para que eu consiga fazer com que o campo seguinte receba o cursor, e consequntemente o foco, é necessário que um outro campo seja ativado o foco antes. Aí sim aquele campo que estava na sequência é habilitado e recebe o cursor normalmente.
Quando o usuário não gera erro, a mesnsagem não é emitida e o processo segue sem problemas ao pressionar Enter.
Alguém já viu isso? Gostaria de saber por que quando uma mensagem é emitida dá esse erro e como resolver.
Obrigado.
wbb
Em meu programa as mudanças de foco dos campos é feita através de Enter. Em alguns campos eu coloquei algumas verificações (como formato de CEP, por ex.) e, caso o usuário digite errado o número uma mensagem de erro é emitida. Até aí tudo OK. O problema acontece após fechar a mensagem que programei. Como a mudança do cursor é automática ao pressionar Enter, o próximo campo deveria receber o foco mas não está recebendo. Ao contrário, fica até travada a entrada do cursor. Para que eu consiga fazer com que o campo seguinte receba o cursor, e consequntemente o foco, é necessário que um outro campo seja ativado o foco antes. Aí sim aquele campo que estava na sequência é habilitado e recebe o cursor normalmente.
Quando o usuário não gera erro, a mesnsagem não é emitida e o processo segue sem problemas ao pressionar Enter.
Alguém já viu isso? Gostaria de saber por que quando uma mensagem é emitida dá esse erro e como resolver.
Obrigado.
wbb
Wbb
Curtidas 0
Respostas
Vanius
20/11/2003
Boa tarde.
O texto ta meio confuso, mas tente.
Apos a msg de erro coloque:
campo2.setFocus; //vai para o 2º campo
Campo1.setFocus; //volta para o 1º campo.
De uma lida na Revista ClubeDelphi nº 31, ´O guia completo de Validação de dados.´
ou clubedelphi.com.br/edicao31/download.asp e acesse o link ´Métodos de Validação´.
Abraços,
Vanius
O texto ta meio confuso, mas tente.
Apos a msg de erro coloque:
campo2.setFocus; //vai para o 2º campo
Campo1.setFocus; //volta para o 1º campo.
De uma lida na Revista ClubeDelphi nº 31, ´O guia completo de Validação de dados.´
ou clubedelphi.com.br/edicao31/download.asp e acesse o link ´Métodos de Validação´.
Abraços,
Vanius
GOSTEI 0
Wbb
20/11/2003
Obrigado pela ajuda novamente Vanius.
Realmente é uma coisa de outro mundo esses tipos de erros... Fica confuso mesmo.
De qualquer forma, estou testando agora da seguinte maneira:
Estou fazendo alguns testes e me parece que até agora funcionou. Vou testar mais para ter certeza.
Antes eu estava fazendo como segue e dava o problema que citei:
Valeu pela dica!
wbb
Realmente é uma coisa de outro mundo esses tipos de erros... Fica confuso mesmo.
De qualquer forma, estou testando agora da seguinte maneira:
Application.MessageBox(´TEXTO PARA EXIBIÇÃO´, ´TÍTULO´, MB_OK + MB_ICONERROR);
Estou fazendo alguns testes e me parece que até agora funcionou. Vou testar mais para ter certeza.
Antes eu estava fazendo como segue e dava o problema que citei:
MessageBox(Handle, ´TEXTO PARA EXIBIÇÃO´, ´TÍTULO´, MB_OK + MB_ICONERROR);
Valeu pela dica!
wbb
GOSTEI 0
Edukobra
20/11/2003
Caro amigo pelo que entendi o problema seu está na validação da digitação, tipo assim:
if editCep <> valor then
begin
messagebox(handle,´mensagem´,´Erro´,MBN_OK or MB_ICONWARNING);
editCep.SetFocus;
SetActiveWindows(application.handle);
end;
Tente desta maneira que eu acho que vai resolver.
O problema do messagebox é que ele perde o foco em algumas situações, então é necessário colocar setactivewindow(appliction.handle), eu não manjo muito bem desta parte, mas sei que desta maneira a aplicação continua com o foco.
if editCep <> valor then
begin
messagebox(handle,´mensagem´,´Erro´,MBN_OK or MB_ICONWARNING);
editCep.SetFocus;
SetActiveWindows(application.handle);
end;
Tente desta maneira que eu acho que vai resolver.
O problema do messagebox é que ele perde o foco em algumas situações, então é necessário colocar setactivewindow(appliction.handle), eu não manjo muito bem desta parte, mas sei que desta maneira a aplicação continua com o foco.
GOSTEI 0
Wbb
20/11/2003
edukobra,
Agradeço a atenção. Da forma Application.MessageBox conforme comentei antes, acabou dando certo.
Tentei usar da sua maneira e realmente deu certo também. Na falta de solução agora está sobrando... Antes assim! :D
Obrigado mais uma vez.
wbb
Agradeço a atenção. Da forma Application.MessageBox conforme comentei antes, acabou dando certo.
Tentei usar da sua maneira e realmente deu certo também. Na falta de solução agora está sobrando... Antes assim! :D
Obrigado mais uma vez.
wbb
GOSTEI 0