Evento OnExit e RAdioGroup
[color=darkred:8510aea93b][b:8510aea93b]Preciso disso :[/b:8510aea93b][/color:8510aea93b]
Mas quando o Usuário Clicar no RadioGroup o evento OnExit deve ser desconsiderado...
:wink: :wink:
Sabemos que a [b:8510aea93b]situação analoga [/b:8510aea93b]quando o Usuário Clica Nun Botao é :
procedure TFormMovimentoCheques.MaskEdit3Exit(Sender: TObject); begin if (not (BitCancelar.Focused))) then begin //Faço o que quiser quando o botao Cancelar Não for Pressionado end; end; end;
:idea: :idea: :idea: :idea:
A primeira idéia que eu tive foi testar [b:8510aea93b]RadioGroup1.Focused [/b:8510aea93b], :arrow: :arrow: por analogia com a instrução acima
Porem este raciocineo não funciona com RadioGroup :cry: :cry: :cry:
Como resolver este pepino :P :P :P :P
Obrigado..
Marco Salles
Respostas
Edilcimar
20/01/2006
Marco Salles
20/01/2006
eu sei que é dificil explicar .. Mas vamos la
Eu quero desconsiderar o evento OnExit Do MaskEdit Quando o RadioGroup For Clicado
Em outra palavras suponha que o foco esteja no MaskEdit... O Usuário clica no RadioGroup , nesta situação gostaria de desprezar o Enebto Onexit do MaskEdit
Fui mais claro :?: :?: :?:
Edilcimar
20/01/2006
° nome padrão -> este aqui (que é o índice 0) ficaria marcado como padrão
° fazer coisa 1
° fazer coisa 2, etc
tenho a edit, maskedit ou qualquer outra coisa e um botão que vai fazer algo, no clicar do referido botão eu olho o contexto do edit e do botão do radiogroup, se eu eu tiver radiogroup1.itemindex := 0 é porque o usuário não clicou em nada ou se tinha clicado voltou ao estado original, caso contrário eu faça algo de acordo com o índice do radiogroup
Marco Salles
20/01/2006
Mas eu não quero deixar de fazer algo em relação ao conteudo do RAdioGroup... Eu quero é deixar de fazer Algo assim que o RadioGroup for clicado Na situação onde o MaskEdit Estiver com o Foco
O Que eu quero é dizer para o evento do MAskEdit , desconsiderar o Codigo de seu evento , Porque o Proximo Controle que ira receber o Foco sera O RadioGroup...
Obrigado...
Edilcimar
20/01/2006
If Maskedit1.Focused and RadioGroup1.ItemIndex = 0 then
Faça Algo
Else If MaskEdit1.Focused and RadioGroup1.ItemIndex = 1 then
(faça diversos else if para ver as diversas opções do radiogroup)
faça algo ou algo mais
Elseif not Maskedit.Focused and RadioGroup1.ItemIndex = X then
faça sei lá o que
O único problema que estou verificando é:
Como o radiogroup1 pode ser clicado e o maskedit ter foco!
A provável solução para isso seria a criação de uma variável booleana, que teria o valor para true assim que vc entrasse no maskedit, e ao sair do maskedit, SE o próximo foco fosse no radiogroup então ela continuaria como True, caso contrário ela passaria para False!
Marco Salles
20/01/2006
Este é o problema...
Preciso disso :
[b:9233d7c174]1)O Foco esta no MAskEdit
2)o usuário clica no radioGroup
3)o evento Onenter do MaskEdit não é executado[/b:9233d7c174]
Ja disse anteiormente que , se o usuário Clicar Nun Botao e so testar
a propriedadede NomeDoBotao.Focused para permitir ou não que o evento Onexit do MaskEdit seja executado ou não ... Mas no caso do RadioGroup esta propriedade não funciona como se imagina.. :cry: :cry:
Eu não posso dar garantias se o controle selecionado com o click do mouse sera mesmo o RadioGroup.. É isto que eu tento fazer Testando a condição [b:9233d7c174][color=darkred:9233d7c174]RadioGroup.Focused[/color:9233d7c174][/b:9233d7c174]
[b:9233d7c174]
Acho que uma saida para isto é saber como testar se o Proximo controle a receber o Foco apos o click Do Mouse for relamente o RadioGroup.[/b:9233d7c174]
[b:9233d7c174]Mas como fazer este teste[/b:9233d7c174]... ???? :?: :?: :?:
Muito obrigado
Edilcimar
20/01/2006
no onexit da mesma coloque
if radiogroup focused = true then variável boolena =true
else
variável boolean = false
Não testei, mas deve funcionar
Marco Salles
20/01/2006
é isto que estou falando desde o inicio :
[b:82350cce3b]
Reiterando , o que eu estou precisando e mais ou menos isto :::::
procedure TForm1.MaskEdit1Exit(Sender: TObject); begin showmessage (´So exibir esta mensagem se o Controle Clicado Não for o RadioGroup´); end;
Edilcimar
20/01/2006
no onenter do maskedit coloque
foco := true
no onenter de todos os outros componentes, exceto o radiogroup coloque
foco := false
aí vc fica sabendo que se o último componente clicado foi o maskedit, pode também trocar a variável foco para word, e colocar um número na mesma para cada componente, aí fica sabendo qual foi o último componente clicado
Marco Salles
20/01/2006
sto acho que não iura adiantar , porque o evento Onenter de qualquer controle so sera executado apos o evento Onexit do MaskEdit
Veja to em qualquer componente , cliquei no MAskEdit ... Dai clico no RadioGroup.. é claro que o evento onexit do mesmo sera disparado , porque o evento Onenter do RadioGroup que nesse caso me dara o Valor
do componente que sera disparado apos a finalização d evento Onexit do
RadioGroup
So uma pergunta : Voce esta testando estas dicas para ver o que quero é o que voce esta obtendo ?????
Muito obrigado...
Edilcimar
20/01/2006
Marco Salles
20/01/2006
Ja que todos ja sabem o que eu preciso :
Vou tentar explicar o porque disso :
Estou tentando formatar o Texto Do MaskEdit com o Valor do RadioGroup.ItemIndex
Assim se o RadioGroup.ItemIndex = 0 Eu formato o MaskEdit1.text com uma mascar de CPF e
caso o Usuário Clicar No RadioGroup.ItemIndex = 1 eu formato o MaskEdit1.Text com uma mascara de CNPJ
So que no evento onexit do MaskEdit eu tenho uma rotina de validação .
E ao clicar No RadioGroup o usuário so quer mudar o formato da mascara, mas como o evento Onexit do MaskEdit ocorre antes do evento Onclick Do RadioGroup , obtenho Um erro devido a rotina de validação ...
Nen sempre o Valor do Cpf / Cnpj esta correto
Em outras palavras seria isto:
procedure TForm1.MaskEdit1Exit(Sender: TObject); begin //Caso o RadioGroup for selecionado ("Clicado") if RadioGroup1.focused Then executa a rotina de validação e verifico o Valor do cpf ou Cnpj else nada faz end;
Marco Salles
20/01/2006
[b:1d7dece46d]ERRADO[/b:1d7dece46d]
procedure TForm1.MaskEdit1Exit(Sender: TObject); begin //Caso o RadioGroup for selecionado ("Clicado") if RadioGroup1.focused Then executa a rotina de validação e verifico o Valor do cpf ou Cnpj else nada faz end;
[b:1d7dece46d]O QUE QUERO REALMENTE :[/b:1d7dece46d]
procedure TForm1.MaskEdit1Exit(Sender: TObject); begin //Caso o RadioGroup for selecionado ("Clicado") if RadioGroup1.focused Then nada faz else executa a rotina de validação e verifico o Valor do cpf ou Cnpj end;
muito obrigado...
Martins
20/01/2006
podemos tentar assim, mas vai faltar implementar mais algumas coisas, veja:
if TRadioButton(RG.Controls[0] ).Focused then ShowMessage(´Opção1´) else ShowMessage(´Opção2´);
Boa sorte!!!
Marco Salles
20/01/2006
Talvez não seja .. Por falar a verdade eu ate ja consegui isto faz algumas horas , mas enviando mensagem para o windows etc,etc, e blablabal.. Mas as vezez alguem conhece uma maneira mais fácil.. Fiz assim conforme voce sugeriu:
if TRadioButton(RadioGroup1.Controls[0] ).Focused then ShowMessage(´Opção1´) else if TRadioButton(RadioGroup1.Controls[1] ).Focused then ShowMessage(´Opção2´);
independente do que estar selecionado no RadioGroup , nenhuma mensagem foi selecionada o que mostra que a Intrução focused sempre sera falsa , independentemente do que estiver nela selecionada ou recebendo o Click Do Mouse...Entao me parece que assim não dá :cry: :cry: :cry:
Carlosrm
20/01/2006
isso ajuda ?:
procedure TF_Resumo.MaskEdit1Exit(Sender: TObject); begin if (TRadioButton(RadioGroup1.Controls[0]).focused = false) and (TRadioButton(RadioGroup1.Controls[1]).focused = false) and (TRadioButton(RadioGroup1.Controls[2]).focused = false) then showmessage(´Saí do maskedit1 !´); end;
carlosrm
Edilcimar
20/01/2006
no oncreate do form
saiu := ´´;
entrou := ´´;
no onenter do maskedit
entrou := ´maskedit´;
na saída do maskedit e entrada do radiogroup
entrou := ´radiogroup´;
saiu := ´maskedit´;
fazendo o caminho inverso
saiu :=´radiogroup;
entrou := ´maskedit´;
como pode ver vc sempre sabe de onde veio e onde está
Emerson Nascimento
20/01/2006
Espero que tenha resolvido seu problema. Se não resolveu, aí vai uma dica:
procedure TForm1.MaskEdit1Exit(Sender: TObject); var i: integer; emFoco: boolean; begin emFoco := False; for i := 0 to RadioGroup1.Items.Count-1 do if RadioGroup1.Buttons[i].Focused then begin emFoco := True; break; end; if not BitCancelar.Focused and emFoco then ShowMessage(´Vai usar a máscara...´) else ShowMessage(´Não vai usar a máscara ainda...´); end;
fiz o exemplo usando o [i:a92178c31e]for[/i:a92178c31e] porque torna o código genérico, sem eu precisar me importar com o número de itens do RadioGroup.
Emerson Nascimento
20/01/2006
procedure TForm1.MaskEdit1Exit(Sender: TObject); var i: integer; RadioGroupEmFoco: boolean; begin RadioGroupEmFoco:= False; for i := 0 to RadioGroup1.Items.Count-1 do if RadioGroup1.Buttons[i].Focused then begin RadioGroupEmFoco := True; break; end; if not BitCancelar.Focused then begin if RadioGroupEmFoco then ShowMessage(´Vai usar a máscara...´) else ShowMessage(´Não vai usar a máscara ainda...´); end; end;
Marco Salles
20/01/2006
Estamos com ventade de comprar esta terra e anexa-la ao complexo Mineiro , eu mesmo pessoamente vou encaminhar esta proposta para o Aecio , ja que nesta época estas terras pertecen a nós , porque não o Resto Do ano...Heheheheh
Edilcimar
20/01/2006
Carlosrm
20/01/2006
Boas férias, uai! Que a Vila Velha te traga novas idéias, para compartilhar com a gente...
carlosrm
Marco Salles
20/01/2006
Oh LADRÃO
Desse jeito vai me despenar...
Aonde voce bebe as suas edilcimar , velho amigo...
Edilcimar
20/01/2006
Marco Salles
20/01/2006
Voce vai responder a este tópico ou vou ter qu abrir a um Novo amigo edicilmar ???
´Donde´ ´ce´ Bebe Nesta Cidade ... ????
Este questão to levando uns cinco dias e ate agora nada :cry: :cry:
Marco Salles
20/01/2006
Voce vai responder a este tópico ou vou ter qu abrir a um Novo amigo edicilmar ???
´Donde´ ´ce´ Bebe Nesta Cidade ... ????
Este questão to levando uns cinco dias e ate agora nada :cry: :cry:
Edilcimar
20/01/2006
Martins
20/01/2006
Voce vai responder a este tópico ou vou ter qu abrir a um Novo amigo edicilmar ???
´Donde´ ´ce´ Bebe Nesta Cidade ... ????
Este questão to levando uns cinco dias e ate agora nada :cry: :cry:[/quote:9f0874357f]
Hehehe!!!!
De qualquer forma, aproveite as férias, e quando voltar teste os códigos.
Boa sorte!!!
Marco Salles
20/01/2006
Obrigado pelas mp enviadas amigo edicilmar..
é o que farei Martins , é o que farei...
Marco Salles
20/01/2006
Bem , a dica que o emerson.en me passou não esta compilando :cry: :cry:
[URL=http://imageshack.us][img:26bdd03ce4]http://img439.imageshack.us/img439/9502/imagem1emersonen0qu.jpg[/img:26bdd03ce4][/URL]
Olhe o erro que esta dando ;
O que esta faltando amigo ????
Emerson Nascimento
20/01/2006
de qualquer modo, tente alterar a linha problemática para:
if TWinControl(RadioGroup1.Controls[i]).Focused
Marco Salles
20/01/2006
Esta beleza...
Mas engraçado voce ter conseguido compilar a Instrução
RadioGroup1.Buttons[0].setfocus;
Eu não consegui e nen o Martins conseguiu
Ja o raserafim diz neste tópico ter tb conseguido :
http://forum.clubedelphi.net/viewtopic.php?t=73159
[b:d921db9401]O que pode estar errado ???[/b:d921db9401]
Sera a versão do Delphi ?? Eu uso o Delphi 5.0 ?? Sera uma RadioGroup Melhorado ???? Sera que falta alguma Unit para compilar esta Instrução ??? Engraçado isto ?? Estou encabulado ???
Algumem mais pode testar este simples código e colocar sua posição
Muito obrigado a todos...
Edilcimar
20/01/2006
procedure TForm1.MaskEdit1Exit(Sender: TObject); var i: integer; emFoco: boolean; begin emFoco := False; for i := 0 to RadioGroup1.Items.Count-1 do if RadioGroup1.Buttons[i].Focused then begin emFoco := True; break; este aqui não funcionou para o que vc quer? end; if not BitCancelar.Focused and emFoco then ShowMessage(´Vai usar a máscara...´) else ShowMessage(´Não vai usar a máscara ainda...´); end;
Edilcimar
20/01/2006
var entrou, saiu : string;
no oncreate do form
saiu := ´´;
entrou := ´´;
no onenter do maskedit
entrou := ´maskedit´;
na saída do maskedit e entrada do radiogroup
entrou := ´radiogroup´;
saiu := ´maskedit´;
fazendo o caminho inverso
saiu :=´radiogroup;
entrou := ´maskedit´;
como pode ver vc sempre sabe de onde veio e onde está
este não funcionou?