Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Recorrer los TForm de una aplicación (https://www.clubdelphi.com/foros/showthread.php?t=61383)

afxe 05-11-2008 19:52:20

Recorrer los TForm de una aplicación
 
¿Alguien se ha planteado (y conseguido) recorrer los TForm de una aplicación según la cláusula uses de cada unit? Me explico, Tengo una clase TFormMain que llama a dos unidades donde se definen las clases TFormArticulo y TFormProveedor. TFormArticulo llama a otra unidad donde está la clase TFormStock... ¿Podría rellenarse una especie de TreeView con las relaciones entre las clases? Quien llama a quien, cuales seran los posibles owner de un determinado TForm, etc...
Mi idea es crear una plantilla, en formato arbol, de los formularios que componen un programa y su interrelación, para que el administrador pueda asignar permisos de acceso para los usuarios a cada pantalla (sin permiso, solo lectura, total).

dec 11-11-2008 21:23:09

Hola,

¿El asunto sería en "tiempo de diseño" o en "tiempo de ejecución"? Delphi cuenta con herramientas (no muy conocidas por un servidor, todo hay que decirlo) para crear "expertos" que de alguna forma se añaden al entorno (en tiempo de diseño) y permiten obtener información de un determinado proyecto, entre otras cosas. No sé si te llegaría, pero, desde luego con estas herramientas se hacen cosas muy curiosas. No sé decirte al respecto sino que puedes encontrar información buscando por la unidad "ToolsApi" de Delphi. Pero aquí hay mucha más información, para empezar.

Si el tema está en hacerlo en tiempo de diseño, creo que desde luego es posible conocer quién es la clase de la que hereda otra clase determinada. Ahora mismo no recuerdo funciones o métodos que directamente pudieran servirte, voy a apuntar por el "Runtime Type Information (RTTI)", pero, creo que acaso sería matar moscas a cañonazos. Quiero decir, que, la propia clase "TObject" ya debe contar con métodos como "GetParent", si no me equivoco (¿Se nota mucho que ando un poco perdido?).

Sea como sea, adonde yo quería llegar después de lo dicho, es a que se me ocurre que tal vez no sea la mejor solución la que planteas, para otorgar permisos a determinados usuarios, que estos tengan acceso a unos formularios y no a otros. Me parece una solución demasiado "complicada", y que no siempre sería la mejor. Claro que yo no entiendo mucho, pero, ese es el "pálpito" que tengo. Comprendo que lo que quieres es que alguien pueda asignar dichos permisos, tal vez un usuario "administrador", y que estos deberían poder asignarse de una forma "visual", sencilla, en fin. Pero, igual a otro compañero se le ocurre alguna otra opción, basada en su experiencia en algún desarrollo similar.

Y bueno, vale, ya me callo. ;)

Lepe 11-11-2008 22:07:59

afxe: ¿conoces ESSModel?

Lo digo ya que al ser OpenSource y tener el código en Delphi... pues puede ayudar ;).

Saludos

afxe 13-11-2008 11:43:02

Gracias a ambos. He mirado la herramienta ESSModel y es más de lo que necesito. En cuanto al comentario de Dec, efectivamente, la idea es crear un arbol con los formularios de la aplicación y su interrelación y visualmente decidir que formularios son visibles, cuales no, y cuales son visibles pero sólo para ver, no para modificar. Tengo un form base del que parten todos los forms de mi aplicación con un método de clase que chequea si la ventana se puede abrir o no, y si sólo es de consulta, recorre las propiedades readonly poniéndola a true. Lo he resuelto recorriendo la cláusua uses de la sección implementation de todas las unidades y comprobando para cada form a qué otros forms llama, y mediante un procedimiento recursivo se rellena el árbol. No sé si será la mejor manera de implementar los permisos, pero es la mejor que se me ha ocurrido para que el supervisor cree perfiles de acceso y se los asigne a los usuarios, y yo sólo me dedique a crear formularios... Sería interesante saber cómo ha resuelto el control de accesos otros programadores.


La franja horaria es GMT +2. Ahora son las 08:07:13.

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