Fórum Como saber os eventos associados a um campo #258316
13/11/2004
0
Boa tarde. To com um Problemao :lol: Vou Tentar explicar :wink:
seguinte, Uso dataSource, Tables, e paradox... Não precisam Criticar
ate agora nao ha problema
acontece que criei os datafields .. Esses Datafields Tem o evento [b:2b8d252c37]OnSetText[/b:2b8d252c37]. Eu uso esse evento para [b:2b8d252c37]validar [/b:2b8d252c37]os valores dos meus campos
Por exemplo:
Funciona Como uma Chupeta para nenen.. Uma maravilha
Mas tudo tem seu custo :cry: :cry:
Eu tenho um botao onde eu cancelo as operações :arrow: :arrow:
é ai que mora o perigo :!: :!:
Se o campo por exemplo tiver Vazio, [b:2b8d252c37]ele acusará o erro[/b:2b8d252c37]... O Que nesta situação é indesejável.. [b:2b8d252c37]eu so to cancelando eu nao to querendo saber o conteudo do campo.. Mas o compilador nao pensa assim [/b:2b8d252c37]:cry:
[b:2b8d252c37]Então eu tive uma idéia [/b:2b8d252c37]:idea: :idea: :idea:
[b:2b8d252c37]Sempre que eu Vou Cancelar eu desconecto Temporariamenet o Evento OnSetText[/b:2b8d252c37]
A Principio uma boa idéia
Onde o [size=18:2b8d252c37][b:2b8d252c37]campo[/b:2b8d252c37] [/size:2b8d252c37] e da classe [size=18:2b8d252c37][b:2b8d252c37]TFiled[/b:2b8d252c37][/size:2b8d252c37]
E eu Fiz Assim:
[b:2b8d252c37]No evento OnEnter dos DbEdits eu capturo o DataField Associado ao DbEdit[/b:2b8d252c37]
:cry: :cry: [b:2b8d252c37]O Problema começa na segunda parte[/b:2b8d252c37]...Capturar o Field associado ao TDbEdit parece que e fácil... O Problema surge e na hora de conectar Novamente o Evento OnSetText..Porque cada TField tem Um Evento :oops:
OnSetText Diferente, Com Nomes Diferentes e metodos Diferentes
Eu Queria , na hora de [b:2b8d252c37]Reeconectar o evento OnSetText [/b:2b8d252c37]Atribuir o Nome correto..Algo que me disse-se assim.. : Este DbEdit Corresponde a um Campo Tal que tem Um Evento OnsetText De Nome Tal
[b:2b8d252c37]Ou entao como saber os nomes dos eventos que estão associados a um campo em tempo de projeto, para eu poder colocar isto em um codigo[/b:2b8d252c37]
Entao minha duvida e esta:
Porque eu tenho [b:2b8d252c37]vários Eventos OnSetText[/b:2b8d252c37], um deles Eu coloquei Como exemplo la em cima :wink:
Eu tenho o que valida inteiros, reais, datas , horarios,etc..tudo no mesmo Formulário :cry: :cry: :cry:
Abraços e muito obrigado :P :P :P
seguinte, Uso dataSource, Tables, e paradox... Não precisam Criticar
ate agora nao ha problema
acontece que criei os datafields .. Esses Datafields Tem o evento [b:2b8d252c37]OnSetText[/b:2b8d252c37]. Eu uso esse evento para [b:2b8d252c37]validar [/b:2b8d252c37]os valores dos meus campos
Por exemplo:
procedure TModulo.ConfirmarNumeroReal(Sender: TField; const Text: String); var campo:String; begin try Sender.AsFloat:=StrToFloat(Text); MensagemDeErro := False; Except on E:EConvertError do Begin Beep; MensagemDeErro := True; if Text <> ´´ then Showmessage(´ERROR : O Valor ´+TEXT+´ Não é Um Valor Válido ´+#13+ ´ Corrija Por Favor...´+13+ ´ Troque o Ponto Pela Vírgula Se For Este´+ ´ O Caso !!!´) else begin campo:=TField(Sender).FieldName; showmessage(´Error : O Campo ´+campo+#13+ ´ Não Pode Ser Deixado em Branco´); end; Sender.clear; Sender.FocusControl; end; end; end;
Funciona Como uma Chupeta para nenen.. Uma maravilha
Mas tudo tem seu custo :cry: :cry:
Eu tenho um botao onde eu cancelo as operações :arrow: :arrow:
é ai que mora o perigo :!: :!:
Se o campo por exemplo tiver Vazio, [b:2b8d252c37]ele acusará o erro[/b:2b8d252c37]... O Que nesta situação é indesejável.. [b:2b8d252c37]eu so to cancelando eu nao to querendo saber o conteudo do campo.. Mas o compilador nao pensa assim [/b:2b8d252c37]:cry:
[b:2b8d252c37]Então eu tive uma idéia [/b:2b8d252c37]:idea: :idea: :idea:
[b:2b8d252c37]Sempre que eu Vou Cancelar eu desconecto Temporariamenet o Evento OnSetText[/b:2b8d252c37]
A Principio uma boa idéia
procedure TFormDefinirVarContornoPorcentagems.BtCancelarClick( Sender: TObject); begin campo.OnSetText:=Nil; desconecto Faço tudo que tenho que fazer campo.OnSetText:=Modulo.ConfirmarNumeroReal;//Reeconecto end;
Onde o [size=18:2b8d252c37][b:2b8d252c37]campo[/b:2b8d252c37] [/size:2b8d252c37] e da classe [size=18:2b8d252c37][b:2b8d252c37]TFiled[/b:2b8d252c37][/size:2b8d252c37]
E eu Fiz Assim:
[b:2b8d252c37]No evento OnEnter dos DbEdits eu capturo o DataField Associado ao DbEdit[/b:2b8d252c37]
procedure TFormDefinirVarContornoPorcentagems.Enter( Sender: TObject); var Nome:String; begin Faço o que tenho que fazer campo:=TDbEdit(Sender).Field;//Capturo o DataField associado ao DbEdit end;
:cry: :cry: [b:2b8d252c37]O Problema começa na segunda parte[/b:2b8d252c37]...Capturar o Field associado ao TDbEdit parece que e fácil... O Problema surge e na hora de conectar Novamente o Evento OnSetText..Porque cada TField tem Um Evento :oops:
OnSetText Diferente, Com Nomes Diferentes e metodos Diferentes
Eu Queria , na hora de [b:2b8d252c37]Reeconectar o evento OnSetText [/b:2b8d252c37]Atribuir o Nome correto..Algo que me disse-se assim.. : Este DbEdit Corresponde a um Campo Tal que tem Um Evento OnsetText De Nome Tal
[b:2b8d252c37]Ou entao como saber os nomes dos eventos que estão associados a um campo em tempo de projeto, para eu poder colocar isto em um codigo[/b:2b8d252c37]
Entao minha duvida e esta:
TFormDefinirVarContornoPorcentagems.BtCancelarClick( Sender: TObject); begin campo.OnSetText:=Nil; desconecto Faço tudo que tenho que fazer campo.OnSetText:= ?????Nome que devo colocar aqui???;//Reeconectar end;
Porque eu tenho [b:2b8d252c37]vários Eventos OnSetText[/b:2b8d252c37], um deles Eu coloquei Como exemplo la em cima :wink:
Eu tenho o que valida inteiros, reais, datas , horarios,etc..tudo no mesmo Formulário :cry: :cry: :cry:
Abraços e muito obrigado :P :P :P
Marco Salles
Curtir tópico
+ 0
Responder
Posts
13/11/2004
Marco Salles
Este topico eu dou ele por encerrado :P :P :P
A solução que eu fiz e que ate agora esta sob Judice :lol: ,Foi O Seguinte:
Da mesma maneira que criei um [b:5d2e031c6c]campo :Tfield[/b:5d2e031c6c], criei uma Variavel do Tipo [b:5d2e031c6c] Evento:TFieldSetTextEvent;[/b:5d2e031c6c]
Quando atribuo o campo
[b:5d2e031c6c]Campo:=TDbEdit(Sender).Field;[/b:5d2e031c6c]
Atribuo tb o Evento
[b:5d2e031c6c]Evento:=TDbEdit(Sender).Field.OnSetText;[/b:5d2e031c6c]
Por fim Quando Desconecto o evento
Os Testes Preliminares apontam na direção do Sucesso, mas vou continuar testando :wink:
A solução que eu fiz e que ate agora esta sob Judice :lol: ,Foi O Seguinte:
Da mesma maneira que criei um [b:5d2e031c6c]campo :Tfield[/b:5d2e031c6c], criei uma Variavel do Tipo [b:5d2e031c6c] Evento:TFieldSetTextEvent;[/b:5d2e031c6c]
Quando atribuo o campo
[b:5d2e031c6c]Campo:=TDbEdit(Sender).Field;[/b:5d2e031c6c]
Atribuo tb o Evento
[b:5d2e031c6c]Evento:=TDbEdit(Sender).Field.OnSetText;[/b:5d2e031c6c]
Por fim Quando Desconecto o evento
campo.OnSetText:=Nil; //Faco O que tem que ser feito //e reeconecto depois usando o evento Campo.OnSetText:=Evento;
Os Testes Preliminares apontam na direção do Sucesso, mas vou continuar testando :wink:
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)