Desabilitar vários OnChances TDBEdits
Boa tarde Galera
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:
Porém eu queria deixar meu código mais limpo e automatizado, então tentei a seguinte implementação:
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!
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
Curtidas 0
Respostas
Rafael Pimenta
14/07/2010
Desculpa a formatação do post anterior! Devo ter mudado o tamanho e a cor sem perceber! =/
GOSTEI 0
Alan Souza
14/07/2010
vc pode "correr" todos os componentes do seu formulário pra desabilitar o OnChange:
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;
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
Rafael Pimenta
14/07/2010
Aqueles... "como nao pensei nisso antes!?" rsrs
vlww amigo, deu certo! =]
vlww amigo, deu certo! =]
GOSTEI 0
Alan Souza
14/07/2010
do jeito que vc pensou anteriormente também dá, só usar:
for i := 0 to 10 do
TDBEdit(FindComponent(edtGrau + IntToStr(i))).OnChange := nil;
(só não está testado)...
for i := 0 to 10 do
TDBEdit(FindComponent(edtGrau + IntToStr(i))).OnChange := nil;
(só não está testado)...
GOSTEI 0
Rafael Pimenta
14/07/2010
do jeito que vc pensou anteriormente também dá, só usar:
for i := 0 to 10 do
TDBEdit(FindComponent(edtGrau + IntToStr(i))).OnChange := nil;
(só não está testado)...
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
Alan Souza
14/07/2010
o OnChange que vc está tentando passar é uma procedure (evento) e não um componente, por isso o erro.
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.
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
Rafael Pimenta
14/07/2010
o OnChange que vc está tentando passar é uma procedure (evento) e não um componente, por isso o erro.
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.
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
Eriley Barbosa
14/07/2010
Se desabilitar os controles vinculados a query, não desabilita os eventos também?
//Desabilita OnChance de Todos TDBEdtis
SuaQuery.DisableControls;
try
// rotinas
finally
//Habilita OnChance de Todos TDBEdtis
SuaQuery.Enablecontrols
end; Atenciosamente Eriley
try
// rotinas
finally
//Habilita OnChance de Todos TDBEdtis
SuaQuery.Enablecontrols
end; Atenciosamente Eriley
GOSTEI 0
Pedro Saraiva.
14/07/2010
Programa com códigos fontes
Ola
pessoal, você programador que quer um aplicativo exemplo para fins
comerciais, tenho uma dica, compre o WinPhar que vem com todos os
códigos fontes e faça um programa baseado nele, sim ele também vêm com
todos os componentes para instalar, voce além de ganhar um programa
complidao, ganha tb os seus códigos fontes e seus componentes. O
programa foi desenvolvido em Delphi 7 com banco de dados paradox, e
custa apenas 20,00 reais
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.!
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