Ver Mensaje Individual
  #8  
Antiguo 24-04-2007
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Reputación: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por Kenobi
si es una barbaridad hacerlo asi no se ustedes digan....
Pues yo lo digo, es una barbaridad, pero conste que tú diste permiso para hacerlo.

Vamos, no es que esté mal, pero no son maneras de hacer las cosas. Los eventos en delphi (y en cualquier lenguaje) no están para que uno los llame, sino para que el entorno los llame. Nosotros ponemos ahí, el código que queremos se ejecuta cuando tal o cual evento suceda, pero nosotros no sabemos cuando tal evento sucederá y por ello lo dejamos en manos del entorno avisarnos de cuando eso sucede.

Lo que pasa es que muchas veces confundimos el evento en sí con la acción a realizar. Vamos a suponer que tenemos un botón [Guardar] en nuestro formulario, que tiene por objeto guardar el archivo que tengamos abierto. Por un lado está el evento (clic en el botón) y por otro la acción (guardar el archivo).

La acción es un método independiente del botón o de cualquier otro elemento visual; un día podemos decidir usar otro tipo de botón o un menú para lanzar la acción, pero el método para guardar no cambiará.

Podemos colocar el código de guardado dentro el evento:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  { código para guardar el archivo }
end;

pero con esto estaremos atando la lógica de la aplicación (la parte medular) a la interfaz de usuario, siendo que debería ser independiente.

Lo más adecuado sería aislar el código de la acción en un método aparte:

Código Delphi [-]
procedure TForm1.Guardar;
begin
  { código para guardar el archivo }
end;

e invocarlo en el evento:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  Guardar;
end;

De esta manera, podemos reusar el método Guardar desde donde queramos, sin tener que recurrir a llamar explícitamente al "evento"

Código Delphi [-]
Button1Click(nil);

Si hacemos esto último, y luego decidimos que ya no queremos usar un botón, sino un menú o algún otro elemento visual, tendremos que cambiar el código en todas las partes donde hallamos llamado a Button1Click(). De la forma que comento, un cambio como el que menciono, sólo requerirá poner la llamada a Guardar en el evento de ese otro elemento visual.

Así pues, cuando se pregunta uno, como llamar a OnKeyPress, la respuesta sería, no lo hagas, en su lugar, llama al método (acción) a la que dicho evento invoque.

// Saludos
Responder Con Cita