Fórum Ajuda na sintaxi ..... #259643

23/11/2004

0

Boa Tarde Amigos... Tô com Um[b:841a5bb0c7] Problema de sintaxi[/b:841a5bb0c7]

Tenho Vários[b:841a5bb0c7] Campos [/b:841a5bb0c7]Do Tipo [b:841a5bb0c7]Data [/b:841a5bb0c7]em Um Formulário (Form1)
Assim Tenho [b:841a5bb0c7]DbEdit1,DbEdit2,DbEdit3 [/b:841a5bb0c7]etc... Para Todos Esses Campo [b:841a5bb0c7]Executo[/b:841a5bb0c7] Um mesmo [b:841a5bb0c7]Evento[/b:841a5bb0c7] OnsetText com [b:841a5bb0c7]exceção[/b:841a5bb0c7] De Uma Unica Instrução , Relacionada exatamente Ao [b:841a5bb0c7]controle consciente [/b:841a5bb0c7]

Assim Para O [b:841a5bb0c7]Fild[/b:841a5bb0c7] Relacionado ao [b:841a5bb0c7]DbEdit1[/b:841a5bb0c7] Executo o Evento OnsetText,
que e mais ou menos assim: :arrow:
procedure TModulo.ConfirmarDataDbEdit1(Sender: TField;
Const Text: String);
begin
if Form.Btcancelar.Focused then
  exit
else
  ConfirmarData(Sender,Text);
if  MensagemDeErro Then
    Form.DBEdit1.OnChange:=Nil;// *******************************
end;


Para o [b:841a5bb0c7]Field[/b:841a5bb0c7] Relacionado ao [b:841a5bb0c7]DbEdit2 [/b:841a5bb0c7]Excuto as Mesmas Instruçoes, Com Exeção apenas da[size=18:841a5bb0c7] [b:841a5bb0c7]Ultima Instrução[/b:841a5bb0c7][/size:841a5bb0c7]

procedure TModulo.ConfirmarDataDbEdit2(Sender: TField;
Const Text: String);
begin
if Form.Btcancelar.Focused then
  exit
else
  ConfirmarData(Sender,Text);
if  MensagemDeErro Then
    Form.DBEdit2.OnChange:=Nil;// ***SO MUDA AQUI*************
end;


e Isto se torna [b:841a5bb0c7]maçante[/b:841a5bb0c7] :cry: :cry: porque sao muitos DbEdits e campos ...

O Que eu gostaria e de saber se existe uma relação Inversa :idea: entre o [b:841a5bb0c7]Campo Field [/b:841a5bb0c7]e o [b:841a5bb0c7]DbEdit [/b:841a5bb0c7]que o Controla :arrow:

Assim eu poderia escrever Um :P [b:841a5bb0c7]Unico[/b:841a5bb0c7] Código Que Daria Para Todos Os DbEdits :P :P :P

Mais Ou Menos Assim :arrow:

procedure TModulo.ConfirmarDataDbEdit1(Sender: TField;
Const Text: String);
begin
if Form.Btcancelar.Focused then
  exit
else
  ConfirmarData(Sender,Text);
if  MensagemDeErro Then
   (Para o DbEdit Que Controla Este Campo).OnChange:=Nil;// 
end;


So que não estou conseguindo escrever esta ultima sintaxi... Desconheço Uma função Da Vcl que me retorno o controle consciente de dados Associados A um Campo..

Será que eu fui claro o bastante :P :P :P :?: :?: :?:


Marco Salles

Marco Salles

Responder

Posts

23/11/2004

Paulo_amorim

Olá

Esse parâmetro TField que você passa pertence ao DataSet ao qual o DBEdit está ligado?
Se sim, você poderia alterar essa função para que receba um TDBEdit, passando para sua outra função (CofirmarData) Sender.Field... você teria acesso múltiplo...

Se não, você não pode passar outro parâmetro?

Até+


Responder

Gostei + 0

23/11/2004

Bruno_fantin

Também não sei se existe uma função... Mas em ultimo caso... Se ninguém tiver alguma ideia melhor... Faz isso na mão mesmo... Assim....

procedure TModulo.ConfirmarDataDbEdit1(Sender: TField; const Text: String);
begin
if Form.Btcancelar.Focused then
exit
else
ConfirmarData(Sender,Text);

if MensagemDeErro Then
begin
for cont := 0 to Form.ComponentsCount - 1 do
begin
if Form.Components[Cont].ClassName = ´TDBEdit´ then
begin
if TDBEdit(Form.Components[Cont]).DataField = Form.DBEdit1.DataField then
begin
TDBEdit(Form.Components[Cont]).OnChange := nil;
Break;
end;
end;
end;
end;
end;


Responder

Gostei + 0

23/11/2004

Rômulo Barros

[b:3a1b6d1788]Faça assim:[/b:3a1b6d1788]

procedure TModulo.ConfirmarDataDbEdit1(Sender: TField; 
Const Text: String); 
Var
   Contador : Longint;
begin 
if Form.Btcancelar.Focused then 
  exit 
else 
  ConfirmarData(Sender,Text); 
if  MensagemDeErro Then 
Begin
   For Contador := 0 To Form.ComponentCount -1 do
   Begin
      if Form.Components[Contador] is TDBEdit then
        If(TDBEdit(Form.Components[Contador]).DataField = (Sender As TField).Name)Then
        Begin
          TField(Sender).OnChange := nil;
          Exit;
        End;
   End;
End;end;



Responder

Gostei + 0

23/11/2004

Marcelo Saviski

uma idéia: :idea:

se você matesse um padrão na nomenclatura dos campos e dos DBEdits

por exemplo campo [i:4d42b10a02][color=darkblue:4d42b10a02]cl_nome[/color:4d42b10a02][/i:4d42b10a02] e o DBEdit se chamasse [b:4d42b10a02][color=darkblue:4d42b10a02]edtNome[/color:4d42b10a02][/b:4d42b10a02] vc poderia usar a função
with TDBEdit(Form.FindComponent(´edt´ + Copy(Campo, 3, Length(Campo)))) do
  OnChange := nil;



Responder

Gostei + 0

23/11/2004

Marco Salles

Obrigado pela partcipação , e vejo que voces entenderam a questão:

Esse parâmetro TField que você passa pertence ao DataSet ao qual o DBEdit está ligado? Se sim, você poderia alterar essa função para que receba um TDBEdit, passando para sua outra função (CofirmarData) Sender.Field... você teria acesso múltiplo... Se não, você não pode passar outro parâmetro?


Esses parametros São do [b:82d689064c]eventoOnSetText [/b:82d689064c]Do Campo Tfileds... Eu não Posso altera-los.. So posso Trabalhar Com [b:82d689064c]Field[/b:82d689064c] e [b:82d689064c]Text[/b:82d689064c]


bruno_fantin e Undeclared Identifier
Também não sei se existe uma função... Mas em ultimo caso... Se ninguém tiver alguma ideia melhor... Faz isso na mão mesmo... Assim....


E uma idéia. e acho que deve funcionar...

se você matesse um padrão na nomenclatura dos campos e dos DBEdits

Marcelo Saviski
por exemplo campo cl_nome e o DBEdit se chamasse edtNome vc poderia usar a função Código: with TDBEdit(Form.FindComponent(´edt´ + Copy(Campo, 3, Length(Campo)))) do OnChange := nil;


[b:82d689064c]Vou testar , Todas.[/b:82d689064c]

:idea: :idea: :idea:
Mas vendo as Várias Opçoes Me sugiu Uma Outra Idéa..

Definir Uma Variável o Tipo TDbEdit.. 
VAR
 DBEditor:TDbEdit;

No Evento OnEnter Dos DbEdits Em Questão Fazer
 DbEditor:=TDbEdit(Sender)


e sempre que eu precisar uso DbEditor
Assim:

procedure TModulo.ConfirmarDataDbEdit2(Sender: TField; 
Const Text: String); 
begin 
if Form.Btcancelar.Focused then 
  exit 
else 
  ConfirmarData(Sender,Text); 
if  MensagemDeErro Then 
    Form.DBEditor.OnChange:=Nil;
end;


o incoveniente sera o [b:82d689064c]uso de uma variável ao invez de mais digitação de Código [/b:82d689064c].. Eu não sei qual a vantagem e a desvantagem do uso desta ultima tecnica :?: :?: :?: :cry:


Responder

Gostei + 0

24/11/2004

Paulo_amorim

Olá

Creio que a idéia da variável seja bem viável, já que ela vai ocupar 4bytes mesmo.

Não se deve esquecer, entretanto, de colocar Nil nela antes de fechar o form...podem acontecer imprevistos...


Até+


Responder

Gostei + 0

24/11/2004

Marcelo Saviski

[quote:aab94b1a75=´Marco Salles´]
Mas vendo as Várias Opçoes Me sugiu Uma Outra Idéa..

Definir Uma Variável o Tipo TDbEdit.. 
VAR
 DBEditor:TDbEdit;

No Evento OnEnter Dos DbEdits Em Questão Fazer
 DbEditor:=TDbEdit(Sender)


e sempre que eu precisar uso DbEditor
Assim(...)[/quote:aab94b1a75]

Você poderia usar a propriedade ActiveControl do Form.

if ActiveControl is TDBEdit then
  TDBEdit(ActiveControl).OnChange := nil;



Responder

Gostei + 0

24/11/2004

Marco Salles

Você poderia usar a propriedade ActiveControl do Form. Código: if ActiveControl is TDBEdit then TDBEdit(ActiveControl).OnChange := nil;


Tecnicamente a idéia é boa. Mas na Prática , ela não da o efeito desejado.
o evento onsettext do campo fields são disparados quando voce ´sai´ do DbEdit. então o foco sai do dbedit e vai para o outro DbEdit...

então a instruçao a seguir :arrow:
TDBEdit(ActiveControl).OnChange := nil;

esta relacionado com o próximo DbEdit e não com o DbEdit Relacionado Com O Campo Field :cry:

Mas eu ja resolvi da maneira postada anteriormente
:P
Muitíssimo Obrigado.... :P :P :P a todos


Responder

Gostei + 0

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

Aceitar