PDA

Ver la Versión Completa : Porque no tiene... porque?


MaMu
25-04-2008, 10:20:36
Hoy me preguntaba a mi mismo:

"Por qué un componente determinado no tiene eventos OnEnable y OnDisable?"

Por ejemplo, un TEdit.

Es mi duda existencial en estos momentos.

Ivanzinho
25-04-2008, 10:42:23
A riesgo de equivocarme voy a dar mi opinión.

Creo que estos eventos no son necesarios porque la habilitación y deshabilitación de los componentes son controladas por código, es decir, dichos eventos se producirían justo después de una línea de código como Componente.Enabled := True o Componente.Enabled := False, es decir, el programador sabe perfectamente cuando van a ocurrir. Por el contrario acciones como pulsar una tecla, salir de un componente, etc. son controladas por el usuario, por lo tanto pueden suceder en cualquier momento, y de ahí la necesidad de eventos para controlar el instante en que ocurren, puesto que no podemos establecer un sitio en nuestro código donde dicha acción va a ocurrir.

Espero haberme explicado.

Un saúdo.

MaMu
25-04-2008, 10:49:44
A riesgo de equivocarme voy a dar mi opinión.

Creo que estos eventos no son necesarios porque la habilitación y deshabilitación de los componentes son controladas por código, es decir, dichos eventos se producirían justo después de una línea de código como Componente.Enabled := True o Componente.Enabled := False, es decir, el programador sabe perfectamente cuando van a ocurrir. Por el contrario acciones como pulsar una tecla, salir de un componente, etc. son controladas por el usuario, por lo tanto pueden suceder en cualquier momento, y de ahí la necesidad de eventos para controlar el instante en que ocurren, puesto que no podemos establecer un sitio en nuestro código donde dicha acción va a ocurrir.

Espero haberme explicado.

Un saúdo.

pero.... porque no?


procedure TForm1.TEdit1OnEnable(sender:TObjet);
begin
Color:=clWindow;
end;

procedure TForm1.TEdit1OnDisable(sender:TObjet);
begin
Color:=clBtnface;
end;

Ivanzinho
25-04-2008, 11:08:05
pero.... porque no?

procedure TForm1.TEdit1OnEnable(sender:TObjet);
begin Color:=clWindow; end;

procedure TForm1.TEdit1OnDisable(sender:TObjet);
begin Color:=clBtnface; end;






Porque no sería necesario, el código que pones haría lo mismo que :


Componente.Enabled := True;
Componente.Color := clWindow;
...
...
...
Componente.Enabled := False;
Componente.Color := clBtnFace;



Además, esos procedimientos los puedes programar perfectamente :


procedure TForm1.OnEnabled(Sender:TObject);
begin
if Sender is TControl then
begin
(Sender as TControl).Enabled := true;
(Sender as TControl).Color := clWindown;
end;
end;

procedure TForm1.OnDisabled(Sender:TObject);
begin
if Sender is TControl then
begin
(Sender as TControl).Enabled := false;
(Sender as TControl).Color := clBtnFace;
end;
end;


Pero los procedimientos anteriores no los consideraría eventos, podrían estar asociados a un evento como pulsar un botón, salir del componente, ... pero seríamos nosotros los que decidiesemos cuando se habilita y cuando no, y no el usuario.

Un saúdo.