Fórum Ajuda na sintaxi ..... #259643
23/11/2004
0
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
Curtir tópico
+ 0Posts
23/11/2004
Paulo_amorim
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é+
Gostei + 0
23/11/2004
Bruno_fantin
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;
Gostei + 0
23/11/2004
Rômulo Barros
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;
Gostei + 0
23/11/2004
Marcelo Saviski
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;
Gostei + 0
23/11/2004
Marco Salles
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
E uma idéia. e acho que deve funcionar...
se você matesse um padrão na nomenclatura dos campos e dos DBEdits
Marcelo Saviski
[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:
Gostei + 0
24/11/2004
Paulo_amorim
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é+
Gostei + 0
24/11/2004
Marcelo Saviski
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;
Gostei + 0
24/11/2004
Marco Salles
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
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)