GARANTIR DESCONTO

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

Marco Salles

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

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar