Array
(
)

Evento OnExit e RAdioGroup

Marco Salles
   - 20 jan 2006

No evento OnExit de uma maskedit faço algumas validaçoes

Preciso disso :
Mas quando o Usuário Clicar no RadioGroup o evento OnExit deve ser desconsiderado...

:wink: :wink:
Sabemos que a situação analoga quando o Usuário Clica Nun Botao é :

#Código

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 RadioGroup1.Focused , :arrow: :arrow: por analogia com a instrução acima

Porem este raciocineo não funciona com RadioGroup

Como resolver este pepino :P :P :P :P

Obrigado..


Edilcimar
   - 20 jan 2006

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


Marco Salles
   - 20 jan 2006


Citação:
Não entendi direito mas vamos lá,


eu sei que é dificil explicar .. Mas vamos la


Citação:
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 :?: :?: :?:


Edilcimar
   - 20 jan 2006

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


Marco Salles
   - 20 jan 2006


Citação:
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

#Código

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 jan 2006

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!


Marco Salles
   - 20 jan 2006


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


Este é o problema...

Preciso disso :

1)O Foco esta no MAskEdit
2)o usuário clica no radioGroup
3)o evento Onenter do MaskEdit não é executado

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


Citação:
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]SE [/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 RadioGroup.Focused


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.

Mas como fazer este teste... ???? :?: :?: :?:

Muito obrigado


Edilcimar
   - 20 jan 2006

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


Marco Salles
   - 21 jan 2006


Citação:

no onexit da mesma coloque
if radiogroup focused

Edilcimar
   - 21 jan 2006

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


Marco Salles
   - 21 jan 2006


Citação:
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...


Edilcimar
   - 21 jan 2006

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


Marco Salles
   - 21 jan 2006

Essas coisas enganam muito a gente....

Ja que todos ja sabem o que eu preciso :


Citação:
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:

#Código

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
   - 21 jan 2006

Desculpe no ultio post invertir a ordem :

ERRADO

#Código

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;


O QUE QUERO REALMENTE :

#Código
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
   - 21 jan 2006

é, é meio complicado...

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

#Código


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



Boa sorte!!!


Marco Salles
   - 21 jan 2006


Citação:
é, é 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:

#Código

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á


Carlosrm
   - 22 jan 2006

Marco Salles,

isso ajuda ?:

#Código


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
   - 23 jan 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á


Emerson
   - 23 jan 2006

Tudo beleza, Marco?

Espero que tenha resolvido seu problema. Se não resolveu, aí vai uma dica:
#Código

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 for porque torna o código genérico, sem eu precisar me importar com o número de itens do RadioGroup.


Emerson
   - 23 jan 2006

uma pequena correção:

#Código

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
   - 23 jan 2006

muito obrigado , carlosrm , edicilmar e emerson.en , mas so posso testar o código daqui ha quinze dias.. To de férias em Vila Velha , afinal e uma terrinha onde meus conterrâneos invadem neste verão ... So dá Mineiro nesta época , aonde a gente vai esbarra nun conhecido...

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