Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Listar forms de la aplicación (https://www.clubdelphi.com/foros/showthread.php?t=86491)

Luis M. 20-08-2014 14:25:01

Listar forms de la aplicación
 
Hola.
Como podría listar o saber en tiempo de ejecución los forms que tiene el programa?
La idea sería listarlos y guardarlos en una tabla.
Es para un control de permisos en el cual el administrador del programa le daría
los permisos necesarios a cada form.
Utilizo D2007 y firebird 2.5.
Un saludo y gracias.

luisgutierrezb 20-08-2014 15:57:24

Si mal no recuerdo en el objeto screen vienen los forms, pero los que usan el createform, si se crean forms al vuelo, no creo que aparezcan a menos que estén creados en ese momento, algo que se me ocurre seria ver los recursos del ejecutable, como ahí se guardan los DFM, entonces podrías obtener todos...

dec 20-08-2014 18:04:21

Hola,

Creo, con el compañero, que la variable "Screen" contiene los formularios "creados". Igual si los formularios se crean con el objeto "Application" como "Owner", digo, igual aparecen también en la variable "Screen". Sin embargo, me suena raro usar los formularios para asignar permisos a los diferentes usuarios. Quiero decir que igual hay otras formas más sencillas, más establecidas y estándar. A ver si algún otro compañero puede darte alguna pista. ;)

Luis M. 20-08-2014 23:07:22

Gracias por responder.
Efectivamente, solo salen los formularios que están en auto-create.
Los demás formularios no salen.
Lo de los permisos, es porque este cliente es muy especial.
Tengo los componentes Tms-Security y para este caso no me valen.
En fin... los introduciré uno a uno en la tabla.
Un saludo.

ecfisa 21-08-2014 18:51:02

Hola Luis.

Las primer idea que se me cruzó es ir registrando en una lista los forms en la creación, lo cuál se puede hacer usando TObjectList y unificando la creación en un proceso por ejemplo.

Luego mirando por alguna otra opción encontré esto, mucho mas elaborado, que tal vez te pueda servir: Create and Manage dynamic Forms at Runtime using Class References.

Con Delphi 2010 o +, pareciera que ya existe una opcion con RTTI, como comentan en el mensaje 6 de este hilo: Dynamically list all forms in a project (imposible para mi Delphi 7 :()

Saludos :)

Al González 22-08-2014 04:12:53

Hola Luis.

ecfisa te ha dado muy buen información.

Yo sólo añadiría esta referencia a un caso similar: http://www.clubdelphi.com/foros/showthread.php?t=20261

Ocurrió hace nueve años. Ahora lo matizaría, pero creo que en esencia es una solución factible con tu versión de Delphi. :)

Un saludo.

Luis M. 22-08-2014 18:45:46

1 Archivos Adjunto(s)
Gracias por responder.
Muy buenos e interesantes los post de ecfisa y del Al Gonzalez. ^\||/

Se me ha ocurrido una posible solución y me gustaría saber vuestra opinión a ver que os parece.
Hay un fichero que tiene todas las clases de formas de la aplicación o programa. Este fichero es el "programax.dpr"
Los nombres de la clase de forma está escrito entre llaves {}.
Al arrancar del programa, este podría leer el fichero e ir incorporando los nombres de las clases de formas que no existan a la tabla.
Lógicamente renombraría el fichero con otro nombre y extensión.
Es un programa a medida para un tienda, que posiblemente en un futuro pueda ser una cadena o una franquicia.
El cliente quiere ponerle la descripción que él considere oportuna a cada clase de forma (no cambiar el nombre) y
aplicar un nivel de permiso que él considere oportuno.
Como el programa con el tiempo irá creciendo en opciones, de ahí mi dilema de como ir introduciendo las nuevas clases de
forma al apartado de permisos.
Adjunto fichero de imagen.

Muchas gracias por vuestro tiempo y aporte.
Un saludo.

Al González 22-08-2014 19:04:02

No es descabellado distribuir el archivo .dpr junto con el programa ejecutable. ^\||/

El problema que le veo es que de esa manera tu programa no puede saber cuál es la jerarquía de clases de tus formularios. En cambio, si usas herencia visual (es de suponer que la uses), al registrar tus clases puedes obtener más información sobre cuáles de ellas son formularios de captura, cuáles son formularios de búsqueda, etc.
Código Delphi [-]
If XClaseDeForm.InheritsFrom (TPlantillaFormCatalogo) Then
Saludos. :)

Luis M. 22-08-2014 19:15:08

Hola Al.
Lo que dices es muy correcto, pero en este caso (por el momento hasta que no lo pida el cliente) no es necesario.
Incluso el fichero .dpr tendré que modificarlo manualmente y quitarles algunas cosas como el login, el data module, etc.
Un saludo.


La franja horaria es GMT +2. Ahora son las 07:06:18.

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