Evento OnExit e RAdioGroup

Delphi

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

Marco Salles

Curtidas 0

Respostas

Edilcimar

Edilcimar

20/01/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


GOSTEI 0
Marco Salles

Marco Salles

20/01/2006

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


GOSTEI 0
Edilcimar

Edilcimar

20/01/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


GOSTEI 0
Marco Salles

Marco Salles

20/01/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



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


GOSTEI 0
Edilcimar

Edilcimar

20/01/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!


GOSTEI 0
Marco Salles

Marco Salles

20/01/2006

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


GOSTEI 0
Edilcimar

Edilcimar

20/01/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


GOSTEI 0
Marco Salles

Marco Salles

20/01/2006

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;



GOSTEI 0
Edilcimar

Edilcimar

20/01/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


GOSTEI 0
Marco Salles

Marco Salles

20/01/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


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


GOSTEI 0
Edilcimar

Edilcimar

20/01/2006

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


GOSTEI 0
Marco Salles

Marco Salles

20/01/2006

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;



GOSTEI 0
Marco Salles

Marco Salles

20/01/2006

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


GOSTEI 0
Martins

Martins

20/01/2006

é, é meio complicado...

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


GOSTEI 0
Marco Salles

Marco Salles

20/01/2006

é, é 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] ).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:


GOSTEI 0
Carlosrm

Carlosrm

20/01/2006

Marco Salles,

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


GOSTEI 0
Edilcimar

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á


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

20/01/2006

Tudo beleza, Marco?

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.


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

20/01/2006

uma pequena correção:

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;



GOSTEI 0
Marco Salles

Marco Salles

20/01/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


GOSTEI 0
Edilcimar

Edilcimar

20/01/2006

às ordens quanto à programação, aproveite e deixe bastante dinheiro aqui para nós!


GOSTEI 0
Carlosrm

Carlosrm

20/01/2006

Marco Salles,

Boas férias, uai! Que a Vila Velha te traga novas idéias, para compartilhar com a gente...

carlosrm


GOSTEI 0
Marco Salles

Marco Salles

20/01/2006

às ordens quanto à programação, aproveite e deixe bastante dinheiro aqui para nós!


uma cerveja = 3,30 um carangueijo = 3,10 uma porção de batata frita = 7,00 uma porção de bolinho de bacalhau = 15,00 Rs


Oh LADRÃO

Desse jeito vai me despenar...

Aonde voce bebe as suas edilcimar , velho amigo...


GOSTEI 0
Edilcimar

Edilcimar

20/01/2006

bebo em qualquer lugar onde o preço é mais barato, afinal de contas eu moro aqui! eheheh


GOSTEI 0
Marco Salles

Marco Salles

20/01/2006

bebo em qualquer lugar onde o preço é mais barato, afinal de contas eu moro aqui! eheheh


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:


GOSTEI 0
Marco Salles

Marco Salles

20/01/2006

bebo em qualquer lugar onde o preço é mais barato, afinal de contas eu moro aqui! eheheh


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:


GOSTEI 0
Edilcimar

Edilcimar

20/01/2006

leia a mp que mandei


GOSTEI 0
Martins

Martins

20/01/2006

[quote:9f0874357f=´Marco Salles´]
bebo em qualquer lugar onde o preço é mais barato, afinal de contas eu moro aqui! eheheh


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


GOSTEI 0
Marco Salles

Marco Salles

20/01/2006

leia a mp que mandei


Obrigado pelas mp enviadas amigo edicilmar..

De qualquer forma, aproveite as férias, e quando voltar teste os códigos.


é o que farei Martins , é o que farei...


GOSTEI 0
Marco Salles

Marco Salles

20/01/2006

Alegria de pobre dura pouco... De Volta ao Trampo

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


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

20/01/2006

eu refiz o teste e funcionou perfeitamente da forma citada.
de qualquer modo, tente alterar a linha problemática para:

if TWinControl(RadioGroup1.Controls[i]).Focused


GOSTEI 0
Marco Salles

Marco Salles

20/01/2006

eu refiz o teste e funcionou perfeitamente da forma citada. de qualquer modo, tente alterar a linha problemática para: if TWinControl(RadioGroup1.Controls[i]).Focused


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


GOSTEI 0
Edilcimar

Edilcimar

20/01/2006

Tudo beleza, Marco? 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;

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;
fiz o exemplo usando o [i:790dad40e1]for[/i:790dad40e1] porque torna o código genérico, sem eu precisar me importar com o número de itens do RadioGroup.



GOSTEI 0
Edilcimar

Edilcimar

20/01/2006

eu havia dado um citar em um artigo e foi enviado outro e eu não tinha reparado

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?


GOSTEI 0
POSTAR