Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Leer *.Ini desde la Unidad de proyecto (*.dpr)) (https://www.clubdelphi.com/foros/showthread.php?t=23814)

Gelmin 29-07-2005 01:59:58

Leer *.Ini desde la Unidad de proyecto (*.dpr))
 
Hey puedo leer un archivo ini desde cualquier unidad de mi proyecto pero yo quiero obtener algunos datos desde mi unidad de proyecto, como hago para leer un valor del ini desde ahi. Yo lo intente asi:
Código:

program SCLClientePro;

uses
  Forms,
  Utime in 'Utime.pas' {Foprincipal}, Inifiles;

var config:Tinifiles;
    x:boolean;dir:string;

{$R *.RES}

begin
  Application.Initialize;
  dir:=extractfiledir(application.ExeName);
  Config:=Tinifile.Create(dir+'\Configuracion.ini');
  x:=Config.Readbool ('VENTANA INICIO','VALOR',FALSE);
  if x then
  begin
    Foinicio:=TFoinicio.Create(application);
    if foinicio.ShowModal<>1 then
      Application.Terminate;
    foinicio.Free;
  end; //if
  config.Free;
  Application.CreateForm(TFoprincipal, Foprincipal);
  Application.Run;
end.

pero no funciono me dice "Undeclared identifier Tinifiles" seguro es porque la unidad "Inifiles" esta mal referenciada pero no se donde mas colocarla. Bueno si es que se puede hacer desde aqui lo del ini. Q me falta o q tengo mal. Gelmin Martinez (Nicaragua).

dec 29-07-2005 02:21:09

Hola,

Incluye la unidad "IniFiles" en la cláusula "Uses".

Gelmin 29-07-2005 02:27:16

ya la inclui en la clausula Uses
 
Ya la inclui en la clausula Uses, si ves vien el codigo ahi esta.
Código:

uses
  Forms,
  Utime in 'Utime.pas' {Foprincipal}, Inifiles;

tambien ya lo intente asi
uses
Inifiles,
Forms,
Utime in 'Utime.pas' {Foprincipal};
[/code]
y nada.

dec 29-07-2005 02:42:43

Hola,

Disculpa, llevas razón, no me había fijado lo suficiente en el código. Acaso halla influido en mi ceguera el que no utilizases las etiquetas "DELPHI" sino las etiquetas "CODE". Pero bueno, fuera como fuera, ahí estaba la unidad "IniFiles".

Dos cosas me extrañan: haciendo pruebas no encuentro problemas para leer un archivo "ini" ni tampoco para escribir en el mismo. Por otro lado me extraña que puedas usar la función "ExtractFileDir"... puesto que (si he visto bien) no incluyes la unidad "SysUtils" en donde está declarada...

Por otro lado encuentro en el código ciertas instrucciones un tanto confusas... por ejemplo:

Código Delphi [-]
     if foinicio.ShowModal<>1 then
       Application.Terminate;
Ahora mismo no recuerdo si es posible que "ShowModal" devuelva "1", pero, en todo caso, un "Application.Terminate" ahí, ¿no dejaría el resto de instrucciones sin ejecutarse? Me refiero sobre todo a las encargadas de liberar recursos, como "Config.Free".

No lo sé. De cualquier modo, ya digo, no encuentro problemas para leer y escribir de y en un archivo "ini" desde el archivo de proyecto, o sea, desde el archivo "dpr"... ¿Todavía sigues sin poder hacerlo o quizás ya diste con el problema?

Gelmin 29-07-2005 03:03:22

ok estoy haciendo pruebas.
 
Ok tiense razon en algunas cosas lo que pasa es que estoy haciendo pruebas con ese codigo y nada mas queria saber si se podia leer el ini desde ahi. y no he depurado bien el codigo ese.
postea como lo harias tu en el *.dpr con un ejemplo sencillo me interesa ver donde pones las units extras q utilizara el proyecto en *.dpr

Ese codigo me esta dando errores por todo lo que mencionastes anteriormente no mas estoy probando. y lo del codigo de delphi pues no se como insertar aqui codigo delphi me disculpas si me dijeras como seria bueno.
Código:

if foinicio.ShowModal<>1 then
      Application.Terminate;

Pues yo si he utilizado el showmodal para verificar algunos valores de retorno atraves del "Modalresult" y eso me sirve cuando tengo en la ventana dos botones "Aceptar" y "Cancelar" si el usuario da en aceptar "Modalresult=1" si no es que dio en cancelar y por lo tanto el modalresult del formulario es diferente de 1 y hay que terminar la aplicacion mas o menos para eso lo utilizo pero bueno ese no es el tema de este post. sigamos con lo del ini mejor.

dec 29-07-2005 03:47:26

1 Archivos Adjunto(s)
Hola,

Respecto de las etiquetas para incluir código Delphi estas son [ DELPHI ] y [ /DELPHI ] (sin los espacios en blanco). Como usuario registrado que eres puedes editar tus mensajes: lo digo por si quieres cambiar el código fuente de más arriba para incluirlo dentro de las oportunas etiquetas.

Por otro lado echa un vistazo al archivo adjunto a ver qué te parece la solución que daría yo al asunto que nos ocupa, no obstante guardarme la posibilidad de realizar algún que otro cambio siempre que se considerase oportuno.

Cita:

Empezado por Gelmin
Pues yo si he utilizado el showmodal para verificar algunos valores de retorno atraves del "Modalresult" (...)

Sí; efectivamente se utiliza y puede usarse también como lo haces:

Código Delphi [-]
 if ShowModal = 1 then
   {...}
Sin embargo, estarás conmigo en que es bastante más intuitivo y sencillo leer:

Código Delphi [-]
 if ShowModal = mrOK then
   {...}

Lepe 29-07-2005 12:34:36

Yo dejaría tranquilo el archivo .dpr y haría las comprobaciones en el OnCreate de Foprincipal.

Si acaso procede, puedes usar Application.ShowMainForm := false; para ocultar la ventana principal y validar las opciones.

Application.Initialize;
Application.Run;

Junto con Application.Terminate, puede producir efectos colaterales, que, en principio, son dificiles de localizar.

No debe haber problemas en crear Foprincipal, y justo en el Oncreate, verificar el archivo ini, y usar Application.Terminate allí mismo.

Código Delphi [-]
program SCLClientePro;

uses
  Forms,
  Utime in 'Utime.pas' {Foprincipal};

{$R *.RES}

begin
  Application.Initialize;
  Application.ShowMainForm:= false;
  Application.CreateForm(TFoprincipal, Foprincipal);
  Application.Run;
end.
Como digo, en el Oncreate de Foprincipal, decides si continuar o terminar la aplicación.

Un saludo

dec 29-07-2005 12:48:48

Hola,

Es posible que lo terminara dejando en el archivo "dpr", pero, también es probable que al cabo hiciera lo mismo que Lepe, o sea, hacer lo propio aprovechando el evento "OnCreate" del formulario principal de la aplicación.

Sin embargo, y, si es por lo engorroso que puede quedar el archivo "dpr", creo que el asunto podría reducirse (en dicho archivo "dpr") a un par de instrucciones, y dejar el resto de instrucciones, variables y recursos en otro u otros módulos/unidades aparte.

De todos modos, ya digo, creo que al cabo probablemente me decantaría por hacer algo similar a lo que Lepe propone.

Gelmin 29-07-2005 17:07:57

Gracias por el ejemplo
 
Ok. esta muy bueno el ejemplo q colocastes Dec, agradezco tu valioso tiempo. Ya lo probe y funciona perfecto, ya descubri tambien cuales eran mis errores en el código q publiqué y además aprendí algo q no habia utilizado y q tu utilizas en tu ejemplo resourcestring, La solución que propone Lepe, tambien ya la habia pensado, tambien funciona lo q pasa es que yo queria que lo de las opciones del *.ini se obtubieran lo mas antes posibles, es decir antes de crear o hacer cualquier otra cosa dentro de mi aplicación y además queria probar si este tipo de cosas (Leer *.ini) se podian hacer directamente desde *.dpr que ya veo que si se puede.

Y bueno ahora si ya se como publicar código delphi, desde ahora lo hare con esas etiquetas descuiden. Saludos muchos seguimos en contacto. Gelmin Martínez (Nicaragua).


La franja horaria es GMT +2. Ahora son las 01:04:48.

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