Delphi - Crear un objeto que se llama a si mismo

 
Vista:

Crear un objeto que se llama a si mismo

Publicado por Martin_Artaza (72 intervenciones) el 11/02/2006 23:49:31
Hola que tal, mi problema es el siguiente (la abundancia de codigo) en un formulario que tengo 3 etiquetas de TLabel tengo el siguiente codigo

Procedure TForm1.Label1Dbclick (Sender : TObject)
begin
Form2.Quien := Label1; ////está linea quiero simplificar *
Form2.show;
end;

Procedure TForm1.Label1Dbclick (Sender : TObject)
begin
Form2.Quien := Label2; ////está linea quiero simplificar $
Form2.show;
end;

Procedure TForm1.Label1Dbclick (Sender : TObject)
begin
Form2.Quien := Label3; ////está linea quiero simplificar #
Form2.show;
end;

Ahora si el formulario tiene 2,3 o 4 se puede copiar y pegar tranquilamente. Pero voy ah hacer esto por TOOODDDOO el programa y posiblemente en otros programas y en algunos formularios puedo llegar a tener 20 label es por eso que quiero crear mi propio objeto TMiLabel que sea un label común y corriente pero que tenga por defecto el evento con el dbclick; mi problema es que no se como poner las lineas marcadas con * $ # en un objeto creado. O sea como expreso que

Form2.Quien := (objeto donde se hiso dbclick)

Eh probado con
Form2.Quien := Self; /// ---> Self es del tipo TForm

Form2.Quien := Sender //// ---> Es del tipo TObject

Por ultimo precione ctrl + Barra y busque y no encontre nada.
Desde ya muchas gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Crear un objeto que se llama a si mismo

Publicado por Dr Juzam (821 intervenciones) el 12/02/2006 05:00:55
No entiendo muy bien que quieres hacer. ¿Hay tres procedimientos en el mismo form que se llaman igual?
Si lo que quieres saber es que objeto hizo click en un form, pues así de fácil:
1) Asigna a todos los objetos del form el eveneto OnClick común.
2) Pon el siguiente código en dicho evento OnClick

Label1.Caption:=TComponent(Sender).Name;

Así sabrás el nombre del componente que llamó al evento OnClick. //Lo del label es un ejemplo.

La idea es aplicar a todos los labels el mismo evento OnClick. Eso se hace desde el inspector de objetos.

Si no es eso (ya te digo que no me ha quedado muy claro), aquí estamos. Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Lo vuelvo codigo abierto, te cuento mas

Publicado por Martin_Artaza (3 intervenciones) el 13/02/2006 17:41:23
Hola, no fui claro porque está ocultando lo que deseo hacer, pero cambie de parecer, si esto queda bueno nos ayuda a todos, lo eh pensado bien y eh buscado un componente que haga lo mismo y no eh encontrado ninguno. Así se me ocurrio una MUY BUENA IDEA (por lo menos para mi y para a quien se la comente le parece) . La clase que deseo hacer es la siguiente.
Hereda del TCustomlabel y se llama por el momento TLabelIni, cuando se cree una instancia de este componente y se lo tire en un formulario habra que configurar 4 propiedades importantes:
1 - Fichero_Configuración (o un nombre mas corto) : String
2 -Sección : String;
3- Nombre (no name no es el name del componente) :String;
4 - Activado : Boolean;

La propieda Fichero_Configurazion guarda el nombre de un archivo ini de la forma 'Habitacion.ini' el componente se encarga de buscarlo y en caso de no encontralo lo crea, en la carpeta \(Aplication)\Ini\Habitacion.ini .
La propiedad Sección se encarga de buscar en el archivo ini la seccion que se escribe acá.
La propiedad Nombre se encarga de buscar en el archivo ini el nombre que se escribe acá.

Si activa = True al executar el programa, y al hacer dbclick en el TLabelIni se habre un formulario de configuración donde aparece.

Formulario de configuracion

Caption [Caja de texto, con el texto del TLabelIni]
Top [Caja de texto, con la posicion del TLabelIni]
Left [Caja de texto, con la posicion del TLabelIni]

(Boton Aceptar) (Boton Cancelar)

Si en este formulario se modifica el contenido de las caja de texto y se apreta el (boton Aceptar) se guardan los cambios en el archivo \(Aplication)\Ini\Habitacion.ini

Te cuento que solucione el problema anterior mientras creo el objeto

Procedure Label1Dbclick (Sender : TObject)
begin
Form2.Quien := (Sender as TCustomLabel) /// o Sender as TLabel
Form2.FicheroConfiguracion := Label1.Fichero_Configuracion;
Form2.Seccion := Label1.Seccion;
Form2.Nombre:= Label1.nombre;
Form2.showmodal;
end;

Espero que entiendas y que se prendan mas en este codigo abierto. Te cuento que hace un año y 1/2 que no creo clases y estoy un poco flojo pero ya hice un programa que hace esto y quiero hacerlo objeto.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar