![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
#5
|
||||
|
||||
|
Sender es un poquito especial precisamente está derivando de TObject porque al hacer la VCL realmente no se sabe quien puede ir en ese parámetro, así que se manda como TObject que es la clase Base. Digamos que puede ser cualquier componente gráfico que tiene eventos definidos.
Tú tienes 100 botones que hacen lo mismo, en lugar de crear 100 eventos distintos, creas uno solo, seleccionas los 100 botones en el IDE y despues le asignas el mismo evento. Cuando se hace clic en ejecución, El Sender será el objeto que desencadena el evento, es decir el propio boton. Como tú eres el que estas programando, sabes que el sender puede ser uno de esos 100 botones, en este caso particular no habría que preguntar el tipo de ese sender, es decir: Es decir, sabemos de antemano que es un TButton el que desencadena el evento. Imagina que ahora tienes 99 botones (TButton) y un TBitBtn y tambien compartes el mismo evento para todos, ahora si es necesario preguntar quien desencadena el evento, porque son clases distintas: Primero preguntamos si es un TButton, si lo es, lo tratamos como tal. TButton(Sender) es lo que se llama un moldeo de tipos, viene a decir: "usa el Sender como si fuera un Tbutton", y así tenemos acceso a todas las propiedades y métodos de ese TButton. En tu caso particular, ese botón no está en la misma ventana, y además dices que las creas dinamicamente, pues supon este escenario: - el form2 no está creado todavia. - Abres el form3 y mandas a crear el Form1 desde alli:
Ahora si lo ves lógico ¿verdad?, Bueno y como se controla, pues tenemos que tener todas las precauciones posibles. Assigned(Form2) es identico a preguntar if Form2 <> nil then pero ¿y cómo sé yo que Form2 tiene nil dentro o cualquier otra cosa? Aqui es donde se empieza a elegir un criterio. Si no necesitamos hacer cosas como: Tendremos que asegurarnos de que la variable Form2 solo tenga dentro un valor cuando se cree la ventana, y despues de liberarla de memoria, le ponemos un nil dentro: Este truco de roman (si no me equivoco.. ) nos asegura que cuando se cierre la ventana, la variable tiene nil dentro, y por tanto:- Si Form2 = nil significa que no se ha creado el Form2 - Si Form2 <>nil significa que la ventana se está mostrando o está oculta... pero fijo que está creada. De ahí que use if Assigned(Form2) then para preguntar si está creada o no en mi mensaje anterior. SAludos y espero se entienda.
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Imposible hacer visible un form desde otro form | SMTZ | .NET | 13 | 16-01-2006 21:41:08 |
| Error cuando llamo a un programa esxterno desde mi aplicacion | quake2420 | Varios | 2 | 12-08-2005 19:30:44 |
| Como llamo desde delphi un Applet | maravert | JAVA | 1 | 08-09-2004 03:24:12 |
| como llamo al shellexecute | sarga | API de Windows | 2 | 14-04-2004 15:18:49 |
| ¿Como llamo a esta variable¿ | chele | Varios | 5 | 18-03-2004 16:12:02 |
|