Ir al contenido


Foto

Mismo nombre unidad diferentes proyectos


  • Por favor identifícate para responder
2 respuestas en este tema

#1 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.092 mensajes
  • LocationRepública Dominicana

Escrito 31 julio 2014 - 08:52

Saludos.

Tengo el siguiente escenario de un proyecto creado con intraweb, pero sigue siendo delphi en el fondo  :) :
1.- Varios proyectos tienen su propia carpetas y acceden a una carpeta en común llamada Global.
2.- Los proyectos contienen dos unidades llamadas iguales: UnFraMenu -> TFraMenu (Frame) y UnFrmMenu - >TFrmMenu (IWAppForm)
3.- Ciertas unidades de la carpeta global hacen referencia a la unidad UnFrmMenu, por ende intentar cambiar el nombre de la unidad y de la clase no es una solución ni nada parecido.
4.- UnFraMenu (Frame) contiene un componente tipo TMainMenu y la unidad UnFrmMenu (IWAppForm) contiene dicho Frame para desplegar el menú; son cosas de Intraweb por lo que tengo entendido.
5.- En UnFraMenu (Frame) contiene referencia de las unidades propias del proyecto, con esto me refiero a lo siguiente: El proyecto Cliente tiene unidades llamadas UnGrupoCliente, UnCliente y demás nombres; el frame en el Use de implementation contiene las unidades mencionadas.
6.- Los proyectos creados con Intraweb utilizan dos unidades creadas por el propio Framework llamadas: ServerController y UserSession.
7.- El UserSession esta plagado de TQuerys propios del proyecto.


Espero que el escenario haya quedado claro.

Mi problema es el siguiente, necesito desde un proyecto llamado SysAdmin acceder a todos los componente tipo TMainMenu para desplegar las opciones del proyecto que el usuario seleccione.

He probado varias opciones y ninguna me da el resultado esperado; dentro de las opciones que he hecho pruebas:
Opción A:
1.- Cambiar el nombre de la unidad y clase de UnFraMenu de un proyecto en particular, por ejemplo el proyecto llamado Clientes
2.- Poner en uso en SysAdmin la unidad UnFraMenu cambiado del proyecto Clientes.
3.- Al momento de compilar el proyecto SysAdmin, Delphi hace referencia a las unidades propias del proyecto Clientes como era de esperarse.
4.- Procedí a cambiar la propiedad Search Path del proyecto para hacer referencia a la ubicación de las DCUs del proyecto Cliente.
5.- Delphi hace referencia a los TQuery que están en el UserSession del proyecto Cliente que no están en el UserSession del proyecto SysAdmin.

Por esto último decidí que esta forma no era viable porque debería modificar el UserSession del proyecto SysAdmin agregandole todos los TQuery de cada proyecto.

Opción B
1.- Decidí crear una unidad que contenga una clase heredada del menú del proyecto Cliente.
2.- La clase quedaría así: TMenuCliente = class(TFrmMenu)

El problema que este presenta es que al momento de poner en uso dicha unidad en el proyecto SysAdmin, el mismo contiene una clase llamada TFrmMenu por lo que Delphi entiende que se refiere a la del proyecto SysAdmin y no a la unidad del proyecto Cliente.

Después de todo esto, ¿Qué idea ustedes tienen que me ayuden a resolver este problema?

Gracias.
  • 0

#2 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.301 mensajes
  • LocationArgentina

Escrito 31 julio 2014 - 10:03

Por el lado de la opción B, puedes ir a por una solución tipo parche así:



delphi
  1. class
  2. TMenuCliente = class(NombredelaUnidadProyectoCliente.TFrmMenu)
  3. ...



Saludos,


  • 0

#3 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.092 mensajes
  • LocationRepública Dominicana

Escrito 31 julio 2014 - 11:13

Por el lado de la opción B, puedes ir a por una solución tipo parche así:



delphi
  1. class
  2. TMenuCliente = class(NombredelaUnidadProyectoCliente.TFrmMenu)
  3. ...



Saludos,



Saludos.

No lo he probado aún, pero creo que así fallaría también porque recuerda que las unidades se llaman UnMenu; por lo que Delphi entendería que m refiero a la unidad del proyecto actual y no a la unidad del Menu Cliente.
  • 0




IP.Board spam blocked by CleanTalk.