Ver Mensaje Individual
  #5  
Antiguo 12-06-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Reputación: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Posteado originalmente por delphi.com.ar
...lo que si tu no dejas en claro si quieres guardar todos los componentes del form o solo una parte, si es solo una parte. Si es solo una parte, no se que tan práctico puede ser esto, pero podrías crear un forms sin bordes e insertarlo en tu form...
En las pruebas que hice ayer intenté guardar sólo las componentes dentro de, digamos, un panel pero no me funcionaba. Estudiándole más entendí porque:

El método WriteComponent de TStream trabaja con las subcomponentes, no con los subcontroles. Normalmente, cuando se insertan componentes en tiempo de diseño, todos tienen como "owner" al formulario, incluso cuando se insertan dentro de un control contenedor como un panel. WriteComponent(Panel) guardará el panel y todos los compoenentes que posea-- ninguno en el caso normal.

Pero dado que la intención es guardar los componentes que se creen durante la ejecución bastará pasarle al constructor del componente el panel como parámetro pare que sea éste el "owner". Creo que esta sería la solución ideal.

Por otro lado, es posible usar las rutinas ObjectTextToBinary y ObjectBinaryToText de la unidad "Clases" para que podamos guardar las componentes en formato de texto, tal como se ven cuando escogemos la opción "View as text" en un formulario.

En estos momentos no tengo mucho tiempo pero creo que no sería muy difícil crear una componente TStoreComponent que englobe estas ideas y facilite su uso. La componente tendría la siguiente interfaz:

Código:
TStoreComponent = class(TComponent)
public
  procedure LoadFromFile(FileName: String);
  procedure SaveToFile(FileName: String);

published
  property Component: TComponent;
end;
La insertaríamos en un formulario, asignaríamos la propiedad Component a la componente que desemos guardar y ¡listo!

Si esto lo combinamos con la componente TSizeControl (no estoy seguro del nombre, hace no mucho puse aquí el enlace) que nos permite cambiar tamaño y posición de controles durante la ejecución, tendríamos un modesto editor de formularios.

En fin, sólo algunas ideas.

// Saludos
Responder Con Cita