Fórum Desabilitar vários OnChances TDBEdits #381407
14/07/2010
0
Eu tenho um form onde possuo 10 TDBEdits e eles estão nomeados da seguinte forma:
edtGrau1, edtGrau2, edtGrau3, ..., edtGrau10;
Todos os TDBEdits possuem uma determinada rotina nos respectivos eventos OnChance.
Em um determinado momento eu presito desativar o evento OnChance de todos meus TDBEdits. Eu sei que é muito simples, basta fazer a seguinte implementação:
edtGrau1.OnChange := nil; edtGrau2.OnChange := nil; .... edtGrau10.OnChange := nil; try // rotinas finally edtGrau1.OnChange := edtGrau1Change; edtGrau2.OnChange := edtGrau2Change; .... edtGrau10.OnChange := edtGrau10Change; and;
Porém eu queria deixar meu código mais limpo e automatizado, então tentei a seguinte implementação:
//Desabilita OnChance de Todos TDBEdtis
for i := 1 to 10 do
begin
TDBEdit('edtGrau' + IntToStr(i)).OnChange := nil;
end;
try
// rotinas
finally
//Habilita OnChance de Todos TDBEdtis
for i := 1 to 10 do
begin
TDBEdit('edtGrau' + IntToStr(i)).OnChange := TNotifyEvent('edtGrau' + IntToStr(i) + 'Change');
end;
and;
Quando vou compilar o projeto, acusa a seguinte msg de erro : [b] 'Incompatible types: 'TNotifyEvent' and 'string'[/b]
Alguem tem alguma sugestão para executar esse Typecast ou desabilitar/habilitar todos os Onchances de uma só vez??
Obrigado!
Rafael Pimenta
Curtir tópico
+ 0Posts
14/07/2010
Rafael Pimenta
Gostei + 0
14/07/2010
Alan Souza
for i := 0 to Pred(form.ComponentCount) do
begin
if (form.Components[i] is TDBEdit) then
if (TDBEdit(form.Components[i]).Name = 'edtGrau' + IntToStr(i)) then //linha pode ser dispensada se só houver os 10 DBEdit's edtGrau no seu form
TDBEdit(form.Components[i]).OnChange := nil;
end;
Gostei + 0
14/07/2010
Rafael Pimenta
vlww amigo, deu certo! =]
Gostei + 0
14/07/2010
Alan Souza
for i := 0 to 10 do
TDBEdit(FindComponent(edtGrau + IntToStr(i))).OnChange := nil;
(só não está testado)...
Gostei + 0
14/07/2010
Rafael Pimenta
for i := 0 to 10 do
TDBEdit(FindComponent(edtGrau + IntToStr(i))).OnChange := nil;
(só não está testado)...
Tinha testado na hora de desabilitar o evento(tando da forma q eu fiz quanto da sua) e deu certo!
Porem, fui testar aqui agora na hora de habilitar o OnChange novamente e não esta dando:
for i := 1 to 10 do
begin
TDBEdit(FindComponent('edtGrau' + IntToStr(i))).OnChange :=
FindComponent('edtGrau' + IntToStr(i) + 'Change'); <<< // Incompatible types: 'TNotifyEvent' and 'TComponent'
end;
Achei que realmente não tem como fazer esse typecast... =/
Gostei + 0
14/07/2010
Alan Souza
Não creio que dê para fazer dessa forma mesmo, a não ser que vc faça uma função que retorne o TNotifyEvent correspondente através do nome ou mesmo da Tag do TDBEdit.
Gostei + 0
14/07/2010
Rafael Pimenta
Não creio que dê para fazer dessa forma mesmo, a não ser que vc faça uma função que retorne o TNotifyEvent correspondente através do nome ou mesmo da Tag do TDBEdit.
Acho que vou na forma manual mesmo, desativando um evento por um e dpois reativando um por um e jogo as duas instrucoes em procedimentos, ou usando uma variavel boolean de controle.
Mas fica o post aberto pra caso alguem saiba como retornar o TNotifyEvent correspondente através do nome ou mesmo da Tag do TDBEdit.
Obrigado!
Gostei + 0
14/07/2010
Eriley Barbosa
try
// rotinas
finally
//Habilita OnChance de Todos TDBEdtis
SuaQuery.Enablecontrols
end; Atenciosamente Eriley
Gostei + 0
15/07/2010
Pedro Saraiva.
deem uma olhadinha ai no produto
http://produto.mercadolivre.com.br/MLB-149256966-winphar-2008-sistema-para-farmacias-e-drogarias-_JM
e ente em contato pelo e-mail pedroluissaraiva@yahoo.com.br.!
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)