Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-03-2007
[basti] basti is offline
Miembro Premium
 
Registrado: ago 2004
Posts: 388
Poder: 20
basti Va por buen camino
Propiedad del tipo TComponentClass

Hola foreros

He creado un componente que contiene un Edit, un Combo y tres botones.

El objetivo del componente es el siguiente, con un ejemplo creo que quedará más clara la explicación:

Supongamos que estoy en un formulario de facturas y quiero seleccionar el cliente.

1º.- Puedo escribir el código, si lo sé en el Edit.
2º.- Puedo selecionarlo desde el Combo, por el nombre.
3º.- Puedo usar uno de los botones, que me abrirá un formulario de búsqueda.
4º.- Si no existe el cliente, puedo usar otro de los botones para abrir el formulario de mantenimiento de clientes.


En este último paso, es donde tengo un pequeño problema. Tengo una propiedad del tipo TComponentClass donde puedo asignar el formulario que quiero que abra.

Todo funciona correctamente, pero me gustaría que esta propiedad apareciese en el Object Inspector (cosa que no sé porqué no hace), y que se pudiese seleccionar el formulario en él. Ahora mismo lo hago por código.


Definición de la propiedad:
Código Delphi [-]
  published
        property FormButtonForm : TComponentClass read FFormButtonForm write SetFormButtonForm;

Así es como la asigno ahora:
Código Delphi [-]
  SelectLookupClientes.SetFormButtonForm(TClientes);

Gracias de antemano
Responder Con Cita
  #2  
Antiguo 16-03-2007
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 30
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Smile

¡Hola a todos!

Cita:
Empezado por basti
...me gustaría que esta propiedad apareciese en el Object Inspector (cosa que no sé porqué no hace), y que se pudiese seleccionar el formulario en él...
Qué tal Basti. No mencionas cuál versión de Delphi utilizas, pero supongo que esta respuesta que doy basándome en experiencias similares con Delphi 7 y versiones anteriores es válida también para la versión que utilizas. La razón por la cual no aparece la nueva propiedad en el inspector de objetos es que éste (más específicamente el subsistema de almacenamiento de establecimientos de diseño o Streaming) no soporta las propiedades de tipo clase.

Una manera habitual de resolver el problema es cambiar el tipo de esa propiedad publicada a String, y en tiempo de ejecución utilizar la función FindClass para "convertir" esa cadena a la clase que corresponde y entonces usar ésta para los fines pretendidos.

Un detalle relevante es que la clase en cuestión debe ser registrada (agregada a una lista especial que maneja el programa) en tiempo de ejecución para que FindClass tenga éxito, pero esto no es necesario con las clases de formas que hayan sido definidas en tiempo de diseño y las clases de sus componentes contenidos; con ellas el registro se realiza de manera automática como lo dice la propia ayuda («Form classes and component classes that are referenced in a form declaration (instance variables) are automatically registered with the streaming system»).

Si en algún momento te ves obligado a registrar una clase explícitamente, te sugiero utilizar la función RegisterClass.

Algo que me entusiasmó con la salida de .NET fue pensar que en las nuevas versiones de Delphi podríamos contar con un tratamiento de clases más enriquecido para manejar todas estas cuestiones de forma más fácil y potente. Incluso en las nuevas versiones para Win32, tengo entendido hubo algunos avances al respecto, pero más allá de Delphi 7 no me he movido todavía (desconozco realmente el terreno).

Un abrazo clasificado.

Al González.
Responder Con Cita
  #3  
Antiguo 16-03-2007
[basti] basti is offline
Miembro Premium
 
Registrado: ago 2004
Posts: 388
Poder: 20
basti Va por buen camino
Hola Al González, gracias por tu ayuda, supongo que tendré que crear una propiedad string, tal y como dices. Esperaba que se pudiese hacer de otra manera, para no tener que hacer un editor de propiedades que busque los formularios.

Ah, perdón por no haber dicho que utilizo Delphi 7.

Un saludo
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Propiedad tipo TFileName Kreyser OOP 3 20-10-2005 18:44:54
Propiedad tipo Objeto (TForm) buildero_d C++ Builder 1 15-09-2005 09:31:16
Propiedad tipo Objeto buildero_d OOP 16 09-09-2005 00:01:55
Propiedad tipo Font diegofhernando OOP 3 30-03-2004 00:15:37
Propiedad de tipo TShortCut eMax OOP 8 11-06-2003 22:47:01


La franja horaria es GMT +2. Ahora son las 08:28:24.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi