Ir al contenido



Foto

Reutilizar Caption de Formularios


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

#1 Rolphy Reyes

Rolphy Reyes

    Advanced Member

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

Escrito 26 enero 2009 - 11:36

Saludos.

No se si sea el titulo adecuado para lo que quiero mostrar.  La idea surge a partir de que siempre tenemos que escribir una y otra vez los Caption de cada formulario al momento de su creación, a menos que pongamos en uso uno ya creado, esa practica tiende a generar muchos errores de escritura y a su vez muy tediosa.

Para evitarnos un poco el tener que escribir y a su vez poder reutilizar, OOP se basa en eso ¿cierto?, he hecho lo siguiente:



delphi
  1. unit UTitulos;
  2.  
  3. interface
  4.  
  5. type
  6.   TTipoPantalla = ( tpMantenimiento = 1,
  7.                     tpConsulta,
  8.                     tpReporte,
  9.                     tpProceso,
  10.                     tpBusqueda
  11.                   );
  12.   TOperacion = ( opAgregar = 1,
  13.                 opModificar,
  14.                 opBuscar,
  15.                 opConsultar
  16.               );
  17.  
  18.  
  19. function GetTitulo(const ATag : Integer) : String;
  20. function GetTipoPantalla(const ATipo : TTipoPantalla) : String;
  21. function GetOperacion(const AOperacion : TOperacion) : String;
  22.  
  23. implementation
  24.  
  25. var
  26.   StrTitulos : Array[1000..11000] of string;
  27.   StrTipos : Array[TTipoPantalla] of string;
  28.   StrOperacion : Array[TOperacion] of string;
  29.  
  30. //Titulos de la pantalla
  31. function GetTitulo(const ATag : Integer) : String;
  32. begin
  33.   if (ATag < 1000) or (ATag > 11000) then
  34.     Result := '<No titulo>'
  35.   Else
  36.     Result := StrTitulos[ATag];
  37. end;
  38.  
  39. //Tipos de pantalla (titulos)
  40. function GetTipoPantalla(const ATipo : TTipoPantalla) : String;
  41. begin
  42.   Result := StrTipos[ATipo];
  43. end;
  44.  
  45. //Operacion de la pantalla (titulo)
  46. function GetOperacion(const AOperacion : TOperacion) : String;
  47. begin
  48.   Result := StrOperacion[AOperacion];
  49. end;
  50.  
  51. initialization
  52.  
  53.   //Tipos de pantalla
  54.   StrTipos[tpMantenimiento] := 'Mantenimiento de %s';
  55.   StrTipos[tpConsulta] := 'Consulta de %s';
  56.   StrTipos[tpReporte] := 'Reporte de %s';
  57.   StrTipos[tpProceso] := 'Proceso de %s';
  58.   StrTipos[tpBusqueda] := 'Busqueda de %s';
  59.  
  60.   //Operacion de pantalla
  61.   StrOperacion[opAgregar] := 'Agregando %s';
  62.   StrOperacion[opModificar] := 'Modificando %s';
  63.   StrOperacion[opBuscar] := 'Buscando %s';
  64.   StrOperacion[opConsultar] := 'Consultando %s';
  65.  
  66.   //Mantenimientos
  67.   StrTitulos[1000] := 'Clientes';
  68.   StrTitulos[1001] := 'Garantes';
  69.   StrTitulos[1002] := 'Cobradores';
  70.   StrTitulos[1003] := 'Suplidores';
  71.   StrTitulos[1004] := 'Carpetas';
  72.   StrTitulos[1005] := 'Tipos de Prestamo';
  73.   StrTitulos[1006] := 'Tipos de Cuota';
  74.   StrTitulos[1007] := 'Clases de Prestamo';
  75. end.



Teniendo estas funciones a mano, ya es facil armar el titulo. Utilizando la herencia visual nuestras pantallas de mantenimientos ya es un pan comido, por ejemplo:

Declarariamos un metodo virtual en el formulario base.


delphi
  1. public
  2.   procedure SetTitulo; virtual;
  3.  
  4. uses uTitulo;
  5.  
  6. implementation
  7.  
  8. procedure TFormaBase.SetTitulo;
  9. begin
  10.   Caption := Format(GetTipoPantalla(tpMantenimiento), [GetTitulo(Self.Tag)]);
  11. end;



Con ese codigo ya sus mantenimientos obtendrían sus titulos y así solo tenemos que darle mantenimiento a esta unidad, permitiendonos la reutilizacion.

P.D.: Se puede mejorar pero en esencia esa es la idea y me funciona adecuadamente.  :D
  • 0

#2 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.409 mensajes
  • LocationRepública Dominicana

Escrito 26 enero 2009 - 11:38

Excelente función amigo, me será útil. (y).

Saludos.
  • 0

#3 Rolphy Reyes

Rolphy Reyes

    Advanced Member

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

Escrito 26 enero 2009 - 11:42

Creo que esto debio de ir al foro de Trucos y Consejos, de ser así favor de moverlo.

Gracias!
  • 0

#4 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.043 mensajes
  • LocationMéxico

Escrito 26 enero 2009 - 11:43

Creo que esto debio de ir al foro de Trucos y Consejos, de ser así favor de moverlo.

Gracias!


Y porque no lo haces tu mismo, creo que ya puedes mover hilos :D

Salud OS
  • 0

#5 Rolphy Reyes

Rolphy Reyes

    Advanced Member

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

Escrito 26 enero 2009 - 11:59


Creo que esto debio de ir al foro de Trucos y Consejos, de ser así favor de moverlo.

Gracias!


Y porque no lo haces tu mismo, creo que ya puedes mover hilos :D

Salud OS


Me costara averiguar como puedo hacer esa parte, pero cool de todas formas :D
  • 0

#6 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.280 mensajes
  • LocationArgentina

Escrito 26 enero 2009 - 12:26

Hola Rolphy, me gusta el ejemplo.
Creo que a más de uno nos vendría en falta algo así.

Si deseas moverlo puedes hacerlo. Abajo de la página (del hilo) hay un menú. Entre las opciones está mover tema.

Saludos,
  • 0

#7 Rolphy Reyes

Rolphy Reyes

    Advanced Member

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

Escrito 26 enero 2009 - 12:29

Hola Rolphy, me gusta el ejemplo.
Creo que a más de uno nos vendría en falta algo así.

Si deseas moverlo puedes hacerlo. Abajo de la página (del hilo) hay un menú. Entre las opciones está mover tema.

Saludos,


Gracias Delpius, me alegra que te haya gustado...  :)
  • 0

#8 Héctor Randolph

Héctor Randolph

    501st Legion

  • Administrador
  • 664 mensajes
  • LocationMéxico

Escrito 26 enero 2009 - 01:23

Esas son las ventajas de ser moderador, puedes mover tus propios hilos después de haberlos colocado en el foro equivocado. ;)

Viva la automoderación.

Saludos

  • 0

#9 Kipow

Kipow

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 228 mensajes
  • LocationGuatemala

Escrito 26 enero 2009 - 01:53

Yo tengo guardadas dentro de mi base de seguridad un listado completo de las opciones (formularios) del sistema. con otro sin numero de opciones mas, esto para poder asignar privilegios y demas. Ahi mismo armo algo similar a lo que haces aca.

Pero me parece muy bueno el truco.
  • 0

#10 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.280 mensajes
  • LocationArgentina

Escrito 26 enero 2009 - 02:02

Una posible mejora, pero que lo hace más complejo, es independizar el nombre de las opciones del vector, algo como lo que comenta Kipow: los nombre se leen de forma eterna. Y, en este caso, el vector debería ser dinámico.

Se puede concebir incluso la forma de que dinámicamente una ventana, menú, opciones, ect cambien los nombres según algunas opciones, condición, etc.

De hecho, para sistemas medianamente grandes es normal encontrarse con una especie de Engine que se encarga de estás funcionalidades. Lo normal es tener una clase que administra todo y tal vez un grupo de clases auxiliares que la asisten. De este modo el Engine actuaría de Fachada ocultando todo el proceso y se deja al cliente (form, botón, etc) que se comunique con éste para consultar el nombre.

Saludos,
  • 0

#11 Rolphy Reyes

Rolphy Reyes

    Advanced Member

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

Escrito 26 enero 2009 - 02:13

Una posible mejora, pero que lo hace más complejo, es independizar el nombre de las opciones del vector, algo como lo que comenta Kipow: los nombre se leen de forma eterna. Y, en este caso, el vector debería ser dinámico.

Se puede concebir incluso la forma de que dinámicamente una ventana, menú, opciones, ect cambien los nombres según algunas opciones, condición, etc.

De hecho, para sistemas medianamente grandes es normal encontrarse con una especie de Engine que se encarga de estás funcionalidades. Lo normal es tener una clase que administra todo y tal vez un grupo de clases auxiliares que la asisten. De este modo el Engine actuaría de Fachada ocultando todo el proceso y se deja al cliente (form, botón, etc) que se comunique con éste para consultar el nombre.

Saludos,


Podrías poner un ejemplo de como funcionaria con esa mejora, sin almacenar los datos en la BD.

En cuanto a almacenar esos datos en la BD, a mi parecer es cargar más la aplicación, porque si tiene que dar un "viaje" para averiguar cual es su titulo y luego otro para saber si tiene permiso (o viceversa) y demás validaciones o cualquier otra cosa estamos poniendo mucho trafico.

Lo de guardar los nombres y Class References de los formularios me parece bien, pero no los titulos.
  • 0

#12 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.280 mensajes
  • LocationArgentina

Escrito 26 enero 2009 - 02:55


Podrías poner un ejemplo de como funcionaria con esa mejora, sin almacenar los datos en la BD.

En cuanto a almacenar esos datos en la BD, a mi parecer es cargar más la aplicación, porque si tiene que dar un "viaje" para averiguar cual es su titulo y luego otro para saber si tiene permiso (o viceversa) y demás validaciones o cualquier otra cosa estamos poniendo mucho trafico.

Lo de guardar los nombres y Class References de los formularios me parece bien, pero no los titulos.


No creo que me resulte concebir un ejemplo. Dame un tiempo y lo hago.

Por eso mismo que añade complejidad, y sólo es útil cuando tenemos en frente un sistema medianamente grande, y donde las ventanas y sus controles son cambiantes, o muy ampliamente reutilizadas.
El añadir un "engine" tiene sus contras (bastante evidentes). Pero en esos entornos tan cambiantes es una solución que mantiene un nivel de Acoplamiento adecuado a efectos de mantener una buena Cohesión: se descontamina y se independiza las formas y controles de los "efectos cambiantes" sin perder la cohesión o propósito por el cual son concebidos. La relación entre la complejidad (en tamaño de clases) y el Acoplamiento/Cohesión en éste entorno es preferible.

Saludos,
  • 0

#13 Kipow

Kipow

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 228 mensajes
  • LocationGuatemala

Escrito 26 enero 2009 - 07:23

Yo aprovecho el hecho de que para el sistema de privilegios es necesario almacenar esa info en una BD. para poder armar los captions de los formularios. no es cosa del otro mundo y no estamos hablando de mas de 1000 registros que se cargan al inicio de la aplicacion. cosa que con las maquinas actuales no es problema. :)
  • 0

#14 Ayla

Ayla

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 98 mensajes

Escrito 27 enero 2009 - 01:48


Me ha gustado  (y)


Muchas Gracias.

  • 0

#15 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.280 mensajes
  • LocationArgentina

Escrito 28 enero 2009 - 11:19

¿Puede esperar el ejemplo?
NO he podido darme el tiempo y espacio necesario para pensar en uno :s

Saludos,
  • 0

#16 Rolphy Reyes

Rolphy Reyes

    Advanced Member

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

Escrito 28 enero 2009 - 11:39

¿Puede esperar el ejemplo?
NO he podido darme el tiempo y espacio necesario para pensar en uno :s

Saludos,


Claro mi estimado Watson!!!  :D
  • 0