PDA

Ver la Versión Completa : guardar cambios en ventanas


anubis
17-05-2007, 08:26:06
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 (http://www.clubdelphi.com/foros/search.php) 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
...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:

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:

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:

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
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í (http://www.swissdelphicenter.ch/torry/showcode.php?id=835). Es para obtener justo el textoque has colocado en tu mensaje.


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
Acabo de ver este hilo

¿A cuál hilo te refieres?

// Saludos

Neftali [Germán.Estévez]
17-05-2007, 18:59:08
¿A cuál hilo te refieres?

:D:D:D:D
Este (http://www.clubdelphi.com/foros/showthread.php?t=25835&highlight=ComponentToString).

¡¡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/PagDelphi-Articulos.htm#21

ahi lo explica bastante bien Ademas tiene mas cosas.

gracias

makina
31-08-2017, 23:39:13
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.


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í (http://www.swissdelphicenter.ch/torry/showcode.php?id=835). Es para obtener justo el textoque has colocado en tu mensaje.


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.