![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|
|
#1
|
|||
|
|||
|
Cita:
Por otra parte pienso que este método es necesario únicamente cuando se usa Show, pues con ShowModal se sabe con toda precisión en qué momento se cierra Form2: en la línea que sigue a ShowModal. Bye |
|
#2
|
||||
|
||||
|
Hola keyboy!
Tienes razón, la segunda opción fallaría si dentro del Form2 se asigna un procedimiento al evento OnClose. De hecho desde el principio no entiendí bien cual es la necesidad de capturar el evento OnClose si como bien lo dices puedes colocar el código en la línea que le sigue al ShowModal. Tal vez exista una razón y en ese caso esta podría ser una solución. Seguimos en contacto, un saludo |
|
#3
|
|||
|
|||
|
Pero me podrian explicar brevemente que es lo que hace?Lo he probado y anda pero no me gusta hacer cosas y no entenderlas Por EJ que significa self yo estoy acostumbrado a trabajar de otra forma ¿Cual es mas conveniente?
procedure TForm1.Button1Click(Sender: TObject); begin with TForm2.Create(Self) do // ¿Este self? no lo entiendo try OnClose:=Miprocedimiento; //¿Que hace aca? ShowModal finally Free; ¿que es este free? end; end; procedure TForm1.Miprocedimiento(Sender: TObject; var Action: TCloseAction); begin {Aquí capturas el evento OnClose del Form2} ShowMessage('Este mensaje aparecerá justo al momento de cerrar el Form2'); end; por que este es declarado privado? |
|
#4
|
|||
|
|||
|
Cita:
Todo método de una clase, es decir todo procedimiento o función dentro de la definición de una clase: Código:
type
TMiClase = class
procedure MiMetodo(Parametro: Integer);
end;
MiObjeto.MiMetodo(MiObjeto, 84) De esta manera es que dentro del código del método puedes hacer referencia al objeto que se está usando. Por otra parte, las componentes (descendientes de TComponent como es el caso de un formulario) tienen una forma especial de manejar la creación y destrucción de objetos. Toda componente tiene una propiedad Owner que indica cuál es la componente que se encarga de destruirla. En el constructor Create de una componente es donde indicas cuál va a ser el Owner (dueño). Cuando una componente se destruye, repasa la lista de componentes que 'le pertenecen' destruyendo a su vez cada una de ellas. En el caso de TForm2.Create(Self) Self es Form1 y por tanto será el dueño (Owner) de la componente TForm2 creada. Por tanto, cuando Form1 se destruya automáticamente se destruirá la instancia de TForm2 que creaste por lo cual no es necesario destruirla explícitamente. Un objeto se destruye explícitamente llamando a su método Free, que es lo que haces en Código:
finally Free; end; En estos casos yo usaría: TForm2.Create(nil) indicando que nil será el dueño de la componente creada. Como nil no es nada, realmente lo que estás indicando es que nadie será el dueño del objeto y que por tanto nadie se va a ocupar de destruirlo sino que lo harás tú explícitamente- como en efecto lo haces con Free. Cuando haces OnClose := MiProcedimiento; estás asignado el procedimiento MiProcedimiento a OnClose. Esto parece una explicación algo boba pero el punto aquí es que los eventos en Delphi, tales como OnClose, son realmente propiedades del objeto, cuyos valores son procedimientos (más correctamente, métodos), así quela setencia anterior no es más que la asignación de un valor a una propiedad. Cuando en el inspector de objetos das doble click a un evento como OnClose, te aparece el cuerpo del evento: Código:
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction); begin end; Form2.Onlose := FormClose Pero en ocasiones, como en el ejemplo de Héctor, en lugar de dejar que Delphi lo haga automáticamente lo hacemos nosotros mismos. En este caso es necesario porque se está asignando un método que no pertenece a TForm2 sino a TForm1. ¿Que por qué se declara como privado? Pues es un poco cuestión de gustos, pero dado que MiProcedimiento no tiene por objeto ser usado desde fuera de Form1, es natural ponerlo como privado. bye |
|
#5
|
|||
|
|||
|
Muchas Gracias
Muchas Gracias KEYBOY Y A TODOS por sus respuestas , eh aprendido algo nuevo que para Mi es de muchisima utilidad, Un Abrazo y hasta pronto.
|
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
|