Evento OnExit e RAdioGroup

20/01/2006

[b:8510aea93b]No evento OnExit de uma maskedit faço algumas validaçoes[/b:8510aea93b]

[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

20/01/2006

Edilcimar

Não entendi direito mas vamos lá, vc não quer fazer nada, quer fazer algo específico, então coloque um radiogroup com dois itens, sendo que o índice zero do mesmo seria o default e seria o fazer nada, aí quando clicar num botão qualquer verifique a posição do índice do radiogroup


Responder Citar

20/01/2006

Marco Salles

Não entendi direito mas vamos lá,


eu sei que é dificil explicar .. Mas vamos la

vc não quer fazer nada


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 :?: :?: :?:


Responder Citar

20/01/2006

Edilcimar

Ok, então é quase o que falei antes faça de conta que a ´coisa´ aí em baixo é um radiogroup
° 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


Responder Citar

20/01/2006

Marco Salles

Ok, então é quase o que falei antes faça de conta que a ´coisa´ aí em baixo é um radiogroup ° 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



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...


Responder Citar

20/01/2006

Edilcimar

Não vejo problema,
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!


Responder Citar

20/01/2006

Marco Salles

O único problema que estou verificando é: Como o radiogroup1 pode ser clicado e o maskedit ter foco!


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:

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, [size=24:9233d7c174][b:9233d7c174]SE[/b:9233d7c174] [/size:9233d7c174]o próximo foco fosse no radiogroup


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


Responder Citar

20/01/2006

Edilcimar

no onter do maskedit coloque a variável boolean = true
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


Responder Citar

21/01/2006

Marco Salles

no onexit da mesma coloque [color=darkred:82350cce3b][b:82350cce3b]if radiogroup focused [/b:82350cce3b][/color:82350cce3b]= true then variável boolena =true else variável boolean = false Não testei, mas deve funcionar


é isto que estou falando desde o inicio :

[b:82350cce3b]
Ja disse anteriormente 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..
[/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;



Responder Citar

21/01/2006

Edilcimar

então teste assim
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


Responder Citar

21/01/2006

Marco Salles

então teste assim no onenter do maskedit coloque foco := true no onenter de todos os outros componentes, exceto o radiogroup coloque foco := false


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...


Responder Citar

21/01/2006

Edilcimar

não testei, isto está na cabeça, afinal já tive que usar algo parecido


Responder Citar

21/01/2006

Marco Salles

Essas coisas enganam muito a gente....

Ja que todos ja sabem o que eu preciso :

procedure TForm1.MaskEdit1Exit(Sender: TObject); begin showmessage (´So exibir esta mensagem se o Controle Clicado Não for o RadioGroup´); end;


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;



Responder Citar

21/01/2006

Marco Salles

Desculpe no ultio post invertir a ordem :

[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...


Responder Citar

21/01/2006

Martins

é, é meio complicado...

podemos tentar assim, mas vai faltar implementar mais algumas coisas, veja:

  if TRadioButton(RG.Controls[0&93; ).Focused then
    ShowMessage(´Opção1´)
  else
    ShowMessage(´Opção2´);



Boa sorte!!!


Responder Citar

21/01/2006

Marco Salles

é, é meio complicado...


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&93; ).Focused then
    ShowMessage(´Opção1´)
else
  if TRadioButton(RadioGroup1.Controls&91;1&93; ).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:


Responder Citar