Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 20-06-2006
turminator turminator is offline
Miembro
 
Registrado: abr 2006
Ubicación: Barcelona, Spain
Posts: 91
Poder: 19
turminator Va por buen camino
Tweak modificar un programa desde otro.

Hola, hace tiempo que uso una aplicación ajena y que mediante un fichero de opciones de configuración se pueden añadir y modificar centenas de detalles del programa (tipo colores, letras...). Lo que ocurre es que los usuarios a menudo no saben como y qué modificar, así que tenia pensado hacer un pequeño programa que escogiendo lo que desee, me modifique el archivo de texto. Que función (si es posible) me permitira hacer esto?

Gracias anticipadas.
Responder Con Cita
  #2  
Antiguo 20-06-2006
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 23
maeyanes Va por buen camino
Si el archivo de opciones de configuración es un .ini, puedes usar la clase TIniFile, la cual está incluida en la unidad IniFiles.

Checa la ayuda de Delphi para más información.


Saludos...
Responder Con Cita
  #3  
Antiguo 21-06-2006
turminator turminator is offline
Miembro
 
Registrado: abr 2006
Ubicación: Barcelona, Spain
Posts: 91
Poder: 19
turminator Va por buen camino
Hola, gracias...ya lo hice y encontré un manual bastante bueno http://www.monografias.com/trabajos2...archivos.shtml

Estaba haciendo el ejemplo primero para crear un archivo ini. Pero me da un error en la linea 33:

Archivo := ExtracFileDir (Paramstr (0) + ‘\Fichero.Ini’; (Undeclaired idetifier Archivo) (Undeclaired idetifier ExtracFileDir) Que he echo mal?

PD: El codigo de mi programa es:

Código Delphi [-]
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IniFiles, StdCtrls;
type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure FormClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
  MiFicheroIni : TIniFile;
 
 
implementation
{$R *.dfm}
procedure TForm1.FormClick(Sender: TObject);
begin
Archivo := ExtracFileDir (Paramstr (0) + ‘\Fichero.Ini’;
MiFicheroIni := TIniFile, Create (Archivo);
Form1.Left := MiFicheroIni.ReadInteger (‘Form’, ‘Left’, 0);
Form1.Top := MiFicheroIni.ReadInteger (‘Form’, ‘Top’, 0);
Form1.Caption := MiFicheroIni.ReadStribg (‘Form’, ‘Caption’, ‘Sin Título’);
MiFicheroIni.Free;
end;
end.

Gracias de antemano!
Responder Con Cita
  #4  
Antiguo 21-06-2006
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 23
maeyanes Va por buen camino
La función ExtracFileDir no existe, la correcta es ExtractFilePath. No necesitas usar \ en la cadena, ya que la función devuelve la ruta con un \ final.

Código Delphi [-]
Archivo := ExtractFilePath(Application.ExeName) + 'Fichero.ini';


Saludos...

Última edición por maeyanes fecha: 21-06-2006 a las 17:58:33.
Responder Con Cita
  #5  
Antiguo 21-06-2006
turminator turminator is offline
Miembro
 
Registrado: abr 2006
Ubicación: Barcelona, Spain
Posts: 91
Poder: 19
turminator Va por buen camino
Pues poniendo ExtractFilePath continua dandamoe este mismo error. Que mas puede ser?
Responder Con Cita
  #6  
Antiguo 21-06-2006
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 23
maeyanes Va por buen camino
En ningún lugar veo que declares la variable Archivo.
Responder Con Cita
  #7  
Antiguo 21-06-2006
turminator turminator is offline
Miembro
 
Registrado: abr 2006
Ubicación: Barcelona, Spain
Posts: 91
Poder: 19
turminator Va por buen camino
Pero no entiendo porque tengo que declarar la variable archivo, el ejemplo no usa solo la variable MiFicheroIni? Y en caso de tener que declararla que formato tengo que darle?

Muchas gracias.
Responder Con Cita
  #8  
Antiguo 21-06-2006
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 23
maeyanes Va por buen camino
La variable Archivo tendría que ser de tipo string:

Código Delphi [-]
procedure TForm1.FormClick(Sender: TObject);
var
  Archivo: string;

begin
  Archivo := ExtracFilePath(Application.ExeName) + 'Fichero.Ini';
  MiFicheroIni := TIniFile.Create(Archivo);
  try
    Form1.Left := MiFicheroIni.ReadInteger('Form', 'Left', 0);
    Form1.Top := MiFicheroIni.ReadInteger('Form', 'Top', 0);
    Form1.Caption := MiFicheroIni.ReadStribg('Form', 'Caption', 'Sin Título')
  finally
    MiFicheroIni.Free
  end
end;

Saludos...
Responder Con Cita
  #9  
Antiguo 21-06-2006
turminator turminator is offline
Miembro
 
Registrado: abr 2006
Ubicación: Barcelona, Spain
Posts: 91
Poder: 19
turminator Va por buen camino
Código Delphi [-]
procedure TForm1.FormClick(Sender: TObject);
var
Archivo: string;
 
begin
Archivo := ExtractFilePath(Application.ExeName) + 'Fichero.Ini';
MiFicheroIni := TIniFile.Create(Archivo);
try
Form1.Left := MiFicheroIni.ReadInteger('Form', 'Left', 0);
Form1.Top := MiFicheroIni.ReadInteger('Form', 'Top', 0);
Form1.Caption := MiFicheroIni.ReadString('Form', 'Caption', 'Sin Título')
finally
MiFicheroIni.Free
end
end;

He arreglado un par d errores (n y t) y creo que ahora ya funciona, mañana lo probaré que ahora no puedo. Muchas gracias por adentrarme en el manejo de Inis.
Responder Con Cita
  #10  
Antiguo 22-06-2006
turminator turminator is offline
Miembro
 
Registrado: abr 2006
Ubicación: Barcelona, Spain
Posts: 91
Poder: 19
turminator Va por buen camino
OK. Ahora ye empiezo a "dominar" el tema de INIs. Mi siguiente pregunta es como debo para que los usuarios de la aplicación rellenen dos edits que tengo creados y automaticamente se me escriban en una determinada sección del archivo INI base.

La aplicación trataria de rellenar unas simples campos edit, y que automaticamente se escribiera en las sections de INI.

Muchas gracias.
Responder Con Cita
  #11  
Antiguo 22-06-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Cita:
Empezado por maeyanes
La función ExtracFileDir no existe, la correcta es ExtractFilePath.
Bueno. La función "ExtracFileDir" no existe... pero sí existe la función "ExtractFileDir", falta la "t" en la primera. Sin embargo, efectivamente, "ExtractFilePath" devuelve lo mismo pero con el separador de directorios correspondiente.

Cita:
Empezado por turminator
La aplicación trataria de rellenar unas simples campos edit, y que automaticamente se escribiera en las sections de INI.
Siempre podrías utilizar los eventos "OnChange" de los "TEdits", por poner un caso, pero, me da la sensación de que lo idóneo sería añadir un botón a la aplicación, de manera que en el evento "OnClick" de este se llevara a cabo la actualización del archivo "INI" o lo que fuera necesario.

En definitiva y en general, no creo que sea una buena idea almacenar el contenido de los "TEdits" en el archivo INI según se vaya escribiendo en los mismos... si no es absolutamente necesario, mejor que se escriba lo que sea menester, luego se proceda a la validación de los datos y por último se escriban en el archivo INI si es oportuno.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #12  
Antiguo 23-06-2006
turminator turminator is offline
Miembro
 
Registrado: abr 2006
Ubicación: Barcelona, Spain
Posts: 91
Poder: 19
turminator Va por buen camino
Totalmente de acuerdo con lo de primero rellenar el formulario y luego validarlo. Lo que no acabo de entender es como llamo al procedimiento para que me coja todos los caracteres ue haya rellenado y los guarde en un INI, respetando las secciones.

Lo que yo me parece que he entendido es que:

1· primero de todo debo crear un archivo INI mediante:
Código Delphi [-]
ini := TIniFile.Create('c:\MyIni.ini');

Aunque aquí ya tengo dos problemas porque por un lado me crea el INI a un directorio que el usuario no podrá escoger y me crea el INI con un nombre que tampoco podrá escoger.

2· Y para escribir en las secciones se debe usar
Código Delphi [-]
 // Write a string value to the INI file.
    ini.WriteString('Datos', 'Nombre', 'String Value');
    // Write a integer value to the INI file.
    ini.WriteInteger('Datos', 'Nombre', 2002);
    // Write a boolean value to the INI file.
    ini.WriteBool('Datos', 'Nombre', True);
  finally
    ini.Free;
De esta estrucutra lo que he entendido es que estas tres funciones se usan para escribir al ini un tipo de dato string, integer o boolean. Mi pregunta es como podria hacer para implementar en esta función algun sistema que me leyera, el texto contenido en un tedit que pueda seleccionar el usuario y no lo que yo escriba en el codigo?

Muchas gracias anticipadas (una vez más)
Responder Con Cita
  #13  
Antiguo 23-06-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

A ver si el siguiente código fuente puede echarte una mano o te da al menos alguna idea:

Código Delphi [-]
unit UfrmPrincipal;

interface

uses
  Forms, StdCtrls,
  Classes, Controls;

type
  TfrmPrincipal = class(TForm)
    edNombre: TEdit;
    lbNombre: TLabel;
    edApellidos: TEdit;
    lbApellidos: TLabel;
    btnGuardar: TButton;
    btnRecuperar: TButton;
    procedure btnGuardarClick(Sender: TObject);
    procedure btnRecuperarClick(Sender: TObject);
  end;

var
  frmPrincipal: TfrmPrincipal;

implementation

{$R *.dfm}

uses
  IniFiles, Dialogs, SysUtils;

procedure TfrmPrincipal.btnGuardarClick(Sender: TObject);
var
  ini: TIniFile;
  dlg: TSaveDialog;
begin
  dlg := TSaveDialog.Create(Self);
  dlg.DefaultExt := 'ini';
  dlg.FileName := 'archivo.ini';
  dlg.Filter := 'Archivos INI (.ini)|*.ini';
  dlg.Options := [ofOverwritePrompt];
  try
    if dlg.Execute then
    begin
      ini := TIniFile.Create(dlg.FileName);
      try
        ini.WriteString('Usuario', 'Nombre', edNombre.Text);
        ini.WriteString('Usuario', 'Apellidos', edApellidos.Text);
      finally
        ini.Free;
      end;
    end;
  finally
    dlg.Free;
  end;
end;

procedure TfrmPrincipal.btnRecuperarClick(Sender: TObject);
var
  ini: TIniFile;
  dlg: TOpenDialog;
begin
  dlg := TOpenDialog.Create(Self);
  dlg.DefaultExt := 'ini';
  dlg.FileName := 'archivo.ini';
  dlg.Filter := 'Archivos INI (.ini)|*.ini';
  dlg.Options := [ofFileMustExist];
  try
    if dlg.Execute then
    begin
      ini := TIniFile.Create(dlg.FileName);
      try
        edNombre.Text := ini.ReadString('Usuario', 'Nombre', '');
        edApellidos.Text := ini.ReadString('Usuario', 'Apellidos', '');
      finally
        ini.Free;
      end;
    end;
  finally
    dlg.Free;
  end;
end;

end.

Adjunto el ejemplo de manera que puedas probarlo tú mismo.
Archivos Adjuntos
Tipo de Archivo: zip Ejemplo.zip (2,1 KB, 20 visitas)
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 23-06-2006 a las 14:12:32.
Responder Con Cita
  #14  
Antiguo 23-06-2006
turminator turminator is offline
Miembro
 
Registrado: abr 2006
Ubicación: Barcelona, Spain
Posts: 91
Poder: 19
turminator Va por buen camino
Buahhhhhhhh!

Como te lo has currado dec, de verás. de exo se tratará de esto la aplicación. Ahora solo me falta ampliarla a mi manera.

No dudes que pondré tu nombre en los creditos! Y si alguna vez pides algo que pueda ayudar no dudes que lo haré encantado, lo que no sé, es si en este foro...te podré ayudar yo a ti

Muchas gracias!

En cuanto termine la aplicación ya la colgaré, haber que te parece.

Saludos!
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
insertar o modificar un registro completo a otro osvrom SQL 10 23-01-2013 20:10:14
Pegar código en el editor IDE desde otro programa Jonnathan Varios 2 20-04-2006 15:55:41
Cerrar mi programa desde otro Sr_Sombrero API de Windows 2 02-12-2004 22:12:09
Ejecutar un programa DENTRO de otro programa seduerey Varios 8 12-11-2003 13:56:20
llamar a otro programa desde el mio sergionr Lazarus, FreePascal, Kylix, etc. 1 15-05-2003 18:35:06


La franja horaria es GMT +2. Ahora son las 02:04:29.


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
Copyright 1996-2007 Club Delphi