Ajuda na sintaxi .....
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:
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]
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:
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 :?: :?: :?:
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
Curtidas 0
Respostas
Paulo_amorim
23/11/2004
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é+
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
Bruno_fantin
23/11/2004
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;
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
Rômulo Barros
23/11/2004
[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;
GOSTEI 0
Marcelo Saviski
23/11/2004
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
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
Marco Salles
23/11/2004
Obrigado pela partcipação , e vejo que voces entenderam a questão:
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..
e sempre que eu precisar uso DbEditor
Assim:
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:
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:
GOSTEI 0
Paulo_amorim
23/11/2004
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é+
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
Marcelo Saviski
23/11/2004
[quote:aab94b1a75=´Marco Salles´]
Mas vendo as Várias Opçoes Me sugiu Uma Outra Idéa..
e sempre que eu precisar uso DbEditor
Assim(...)[/quote:aab94b1a75]
Você poderia usar a propriedade ActiveControl do Form.
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
Marco Salles
23/11/2004
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
GOSTEI 0