Erro usando o Screen.OnActiveControl
Estou a usar o seguinte código para quando entro numa Edit mude a cor de fundo, está a funcionar bem mas quando fecho o Form dá me erro
´Project Aplicacao.exe Raise exception class EaccessViolation with ´Access violatio..´
´Project Aplicacao.exe Raise exception class EaccessViolation with ´Access violatio..´
public
{ Public declarations }
campoAnt : TEdit;
procedure controlChange(sender : TObject);
end;
......
procedure TFrMenus.FormCreate(Sender: TObject);
begin
Screen.OnActiveControlChange := controlChange;
end;
procedure TFrMenus.controlChange(sender : TObject);
begin
if Assigned(campoAnt) then
campoAnt.Color := clWindow;
if ActiveControl is TEdit then
begin
TEdit(ActiveControl).Color := clBackground; //clInfoBk;
campoAnt := TEdit(ActiveControl);
end
else
campoAnt := nil;
end;
Porty
Curtidas 0
Respostas
Rjun
26/08/2005
É que você esta tentando acessar um controle q ja foi destruido pelo Form. Coloque essa linha no evento OnClose do Form.
;
Screen.OnActiveControlChange := nil;
GOSTEI 0
Massuda
26/08/2005
Você precisa testar se o ActiveControl é diferente de nil porque um form inativo tem ActiveControl = nil. Além disso, é recomendável que você desinstale o tratador do evento no OnDestroy do seu form já que tudo dentro do form está sendo destruído.
procedure TFrMenus.FormCreate(Sender: TObject); begin Screen.OnActiveControlChange := controlChange; end; procedure TFrMenus.FormDestroy(Sender: TObject); begin Screen.OnActiveControlChange := nil; end; procedure TFrMenus.controlChange(sender : TObject); begin // não sei bem onde o teste deveria ser feito... if Assigned(ActiveControl) then begin if Assigned(campoAnt) then campoAnt.Color := clWindow; if ActiveControl is TEdit then begin TEdit(ActiveControl).Color := clBackground; //clInfoBk; campoAnt := TEdit(ActiveControl); end else campoAnt := nil; end; end;
GOSTEI 0
Porty
26/08/2005
É que você esta tentando acessar um controle q ja foi destruido pelo Form. Coloque essa linha no evento OnClose do Form.
;
Screen.OnActiveControlChange := nil;
Coloquei esse código no OnDestroy é já funciona sem erros.
Se eu quiser usar esse código para todas a aplicação com faria? Pois estar a repetir este código em todos os forms é um pouco chato, claro que podia usar a herança mas como já tenho muitos forms já criados não queria estar a mexer.
GOSTEI 0
Porty
26/08/2005
[quote:13b03239b0=´Rjun´]É que você esta tentando acessar um controle q ja foi destruido pelo Form. Coloque essa linha no evento OnClose do Form.
;
Screen.OnActiveControlChange := nil;
Coloquei esse código no OnDestroy é já funciona sem erros.
Se eu quiser usar esse código para todas a aplicação com faria? Pois estar a repetir este código em todos os forms é um pouco chato, claro que podia usar a herança mas como já tenho muitos forms já criados não queria estar a mexer.[/quote:13b03239b0]
GOSTEI 0
Mysys
26/08/2005
e ai gurizada tudo na santa ..??
seguinte esse codigo funciona perfeitamente em forms normais mais eu uso MDI e ele nao funciona ..
[b:92b8a58d51]
alguem sabe de algum codigo prar mudar a cor do edit,DBEdit focado para form MDI..???[/b:92b8a58d51]
seguinte esse codigo funciona perfeitamente em forms normais mais eu uso MDI e ele nao funciona ..
[b:92b8a58d51]
alguem sabe de algum codigo prar mudar a cor do edit,DBEdit focado para form MDI..???[/b:92b8a58d51]
GOSTEI 0