PDA

Ver la Versión Completa : "Include" en los formularios


rafita
14-04-2004, 15:33:17
Muy buenas compañer@s,

Estoy intentando reutilizar parte de un formulario (una zona de cabecera) en otros, al igual que en el código se puede utilizar un include de la siguiente forma: {$I '.\includes\veraccesos.inc'}

Me he creado un archivo CABECERA.INC donde incluyo la parte del formulario que deseo repetir, pero en el formulario donde pretendo utilizarlo, no me deja poner: {$I '.\includes\CABECERA.INC'}

Lo que sí me permite es pegar el trozo de texto que define esos elementos, naturalmente teniendo cuidado de dónde lo pego.

De esta forma puedo reutilizar parte del diseño de un formulario para el resto de la aplicación, pero, además de ser muy laborioso, si hubiese que rectificar algo en esa zona de cabecera, tendría que abrir y modificar todos y cada uno de los formularios.

¿Alguien sabe alguna forma más lógica?
¿Hay alguna directiva similar a {$I '.\includes\veraccesos.inc'} que se pueda poner en el formulario (en modo texto naturalmente)?

Gracias a todos.

delphi.com.ar
14-04-2004, 15:39:39
¿Alguien sabe alguna forma más lógica?Si... utilizar la potencialidad de la programación orientada a objetos :)


PD: Yo use en varias ocaciones $I sin problemas... ¿En dónde en particular quieres incluír un archivo?

rafita
14-04-2004, 15:52:56
¡Estoy alucinado por tu rapidez en responder!

Te explico, tenía una pequeña aplicación con un formulario cabecera que no desaparecía nunca, el resto quedaban bajo él dejándolo visible, pero hemos tenido problemas con las diferentes versiones del sistema operativo y con las distintas "apariencias"... por los altos de los bordes, de las barras de título de las ventanas,... Así que, por prisas, hemos decidio hacer todos los formularios completos, incluyendo en ellos la parte que antes permanecía constante. Es una chapa, pero es más o menos rápido.

El include pretendía hacerlo así:

object FTablas: TFTablas
Left = 0
Top = 0
BorderIcons = []
BorderStyle = bsNone
Caption = 'Mantenimiento de Tablas'
ClientHeight = 543
ClientWidth = 792
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
OnClose = FormClose
OnCreate = FormCreate
PixelsPerInch = 96
TextHeight = 13

{$I '.\includes\CABECERA.INC'}

object Bevel2: TBevel
Left = 248
Top = 176
Width = 273
Height = 297
end

He tenido especial cuidado de mantener cada bloque completo.

Al pasar de modo texto a modo formulario me aparece este error:
Error creating form: Indentifier expected on line 21.

Gracias por tu interés.

delphi.com.ar
14-04-2004, 16:05:58
No creo que el DFM soporte directivas al compilador, ya que los datos del DFM no se compilan, podrías definir estas propiedades por código en el create de tus formularios.

Saludos!

roman
14-04-2004, 16:10:16
Yo no pasaría por alto la observación de delphi.com.ar que dice


utilizar la potencialidad de la programación orientada a objetos


y comenzaría a investigar acerca de la herencia visual de formularios que si bien puede ser un tema nuevo para tí al final te dará menos dolores de cabeza que los include.

// Saludos

rafita
14-04-2004, 16:10:54
La idea de definirlo por código en el evento OnCreate del formulario me parece genial, de esta forma sí puedo utilizar un Include, y podría realizar cambios en toda la aplicación con solo modificar el archivo del include y recompilarla.

Hoy no lo voy a probar porque tengo dentista en 10 minutos, pero agradezco tu idea.

Muchas gracias...

rafita
14-04-2004, 16:13:19
y comenzaría a investigar acerca de la herencia visual de formularios que si bien puede ser un tema nuevo para tí al final te dará menos dolores de cabeza que los include.

Me gustaría aprender algo sobre el tema, pero las prisas no son buenas. Gracias por el consejo, pero me quedo con la idea de crearlos dinámicamente.

Saludos.

__cadetill
14-04-2004, 16:46:00
Y la utilización de Frames no te ayudaría? Aunque sigo pensando que la herencia visual puede ser una buena solución y no es demasiado complicada ;)