Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   guardar cambios en ventanas (https://www.clubdelphi.com/foros/showthread.php?t=43661)

anubis 17-05-2007 08:26:06

guardar cambios en ventanas
 
EStoy buscando en el foro sobre poder guardar los cambios en tiempo de ejecucion de los form por ejemplo, decis algo de archivos ini pero estoy buscando y no lo veo.
Podeis iluminar a este ciego?

gracias

dec 17-05-2007 09:12:32

Hola,

Busca en la ayuda de Delphi y en el buscador de los Foros por la clase "TIniFile" y/o por la unidad "IniFiles". Fijo que encuentras información.

Neftali [Germán.Estévez] 17-05-2007 11:05:07

Cita:

Empezado por anubis
...sobre poder guardar los cambios en tiempo de ejecucion de los form por ejemplo

¿A qué tipo de cambios te refieres? ¿Posición, tamaño, valores?

anubis 17-05-2007 11:11:52

si, a esos mismos me refiero, ya instale el paquete rxlib pero no me funciona bien, me da error al instalarlos.
Tambien instale los jedi jvc pero se empeña en entrar en internet.

De todas formas he estado mirando los tinifile en los foros y en la ayuda de delphi, pero una preguntita d eejemplo:
si quisiera guardar el estado de. form que contiene, viendo en formato texto:
Código Delphi [-]
object fhabitacion: Tfhabitacion
  Left = 40
  Top = 16
  BorderStyle = bsDialog
  Caption = 'Habitaciones'
  ClientHeight = 654
  ClientWidth = 685
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  KeyPreview = True
  OldCreateOrder = False
  OnShow = FormShow
  DesignSize = (
    685
    654)
  PixelsPerInch = 96
  TextHeight = 13

una linea de esas por ejemplo como se guardaria y como se haria para hacer efectivo el cambio cuando lo volviera a recuperar, porqu ese pasan lineas del/al ini.

gracias

Lepe 17-05-2007 12:55:10

En el oncreate de la forma:
Código Delphi [-]
var x:Tinifile;
begin 
  x := tinifile.Create(changeFileExt(application.exename, '.ini');
  form1.left := x.ReadInteger('Posicion', 'Left', 40);
  // otras
  x.free;

En el onclose de la forma:
Código Delphi [-]
var x:Tinifile;
begin 
  x := tinifile.Create(changeFileExt(application.exename, '.ini');
  x.WriteInteger('Posicion', 'Left', Form1.left);
  // otras
  x.free;

Saludos

Neftali [Germán.Estévez] 17-05-2007 13:00:39

1 Archivos Adjunto(s)
Existe la opción "manual", que se puede hacer con un TIniFile o con un fichero de Texto (y un memo -SaveToFile-) y sería guardando líneas con los nombres de las propiedades y sus valores.

Una alternativa más automática, pero que guarda TODAS las propiedades, no sólo las que tú necesites es utilizar WriteComponent de los Streams.

Creo que esta función ya ha salido antes en los foros; También puedes encontrarla aquí. Es para obtener justo el textoque has colocado en tu mensaje.

Código Delphi [-]
function ComponentToString(Component: TComponent): string;
var
  BinStream:TMemoryStream;
  StrStream: TStringStream;
  s: string;
begin
  BinStream := TMemoryStream.Create;
  try
    StrStream := TStringStream.Create(s);
    try
      BinStream.WriteComponent(Component);
      BinStream.Seek(0, soFromBeginning);
      ObjectBinaryToText(BinStream, StrStream);
      StrStream.Seek(0, soFromBeginning);
      Result:= StrStream.DataString;
    finally
      StrStream.Free;

    end;
  finally
    BinStream.Free
  end;
end;

Te adjunto un ejemplo de cómo utilizarla.

Neftali [Germán.Estévez] 17-05-2007 13:09:49

Acabo de ver este hilo, donde se habla de esta misma función y creo que incluso hay una versión mejorada para guardar los compoennetes que pertenecen a otro.

roman 17-05-2007 18:39:42

Cita:

Empezado por Neftali
Acabo de ver este hilo

¿A cuál hilo te refieres?

// Saludos

Neftali [Germán.Estévez] 17-05-2007 18:59:08

Cita:

Empezado por roman
¿A cuál hilo te refieres?

:D:D:D:D
Este.

¡¡Qué cabeza la mía...!!

anubis 17-05-2007 20:26:56

gracias por las respuestas, la verdad que de momento lo de stream es un poco complicado, porque solo me interesa guardar la posicion left y top puesto que no se permite resize.Encontre esta page buscando, por si a alguien le sirve

http://www.galeon.com/roberdi/PagDel...ticulos.htm#21

ahi lo explica bastante bien Ademas tiene mas cosas.

gracias

makina 31-08-2017 23:39:13

Como crear la forma a partir del texto generado con el Twritecomponent
 
Hola Neftali. este ejemplo fue de mucha ayuda, gracias.
por otro lado tengo la necesidad de "re-crear" la forma y sus componentes a partir del texto generado con la función que utilizas en el ejemplo.

es decir. una vez generado el texto poderlo guardar y en tiempo de ejecución y dependiendo de las necesidades de la aplicación y el usuario se pueda "llamar" a esta forma re-creandola a partir del texto.

Muchas Gracias por anticipado.


Cita:

Empezado por Neftali (Mensaje 201665)
Existe la opción "manual", que se puede hacer con un TIniFile o con un fichero de Texto (y un memo -SaveToFile-) y sería guardando líneas con los nombres de las propiedades y sus valores.

Una alternativa más automática, pero que guarda TODAS las propiedades, no sólo las que tú necesites es utilizar WriteComponent de los Streams.

Creo que esta función ya ha salido antes en los foros; También puedes encontrarla aquí. Es para obtener justo el textoque has colocado en tu mensaje.

Código Delphi [-]
function ComponentToString(Component: TComponent): string;
var
  BinStream:TMemoryStream;
  StrStream: TStringStream;
  s: string;
begin
  BinStream := TMemoryStream.Create;
  try
    StrStream := TStringStream.Create(s);
    try
      BinStream.WriteComponent(Component);
      BinStream.Seek(0, soFromBeginning);
      ObjectBinaryToText(BinStream, StrStream);
      StrStream.Seek(0, soFromBeginning);
      Result:= StrStream.DataString;
    finally
      StrStream.Free;

    end;
  finally
    BinStream.Free
  end;
end;

Te adjunto un ejemplo de cómo utilizarla.



La franja horaria es GMT +2. Ahora son las 13:01:16.

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