Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    [delphi]inifile per configurazione programma

    Ciao!
    Vorrei inserire in un file .ini le impostazioni di connessione al database e ai files in un'applicazione client/server che deve girare in intranet.

    Ho costruito un file di testo (prova.ini)che ho inserito nella stessa directory dell'eseguibile sul server:
    codice:
    [filesconn]
    path="\\NomeServer\cartella condivisa\sottocartella\"
    [dbconn]
    path=NomeServer:percorso sul server\nomedatabase.fdb
    Ho creato un file configurazione.pas, che ho reso visibile a tutti i form del mio progetto (tramite clasusola uses)in cui ho inserito questo codice:
    codice:
    interface
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs,IniFiles;
    type
      TForm1 = class(TForm)
      private
        { Private declarations }
      public
        { Public declarations }
      end;
    var
      Form1: TForm1;
    
    implementation
    {$R *.dfm}
    
    procedure connFile();
      var
      FilePath: string;
      ini: Tinifile;
      begin
        ini:= TIniFile.Create('prova.ini');
       try
          FilePath:= ini.ReadString('filesconn','path','default value');
       finally
           ini.Free;
       end;
      end;
    
    end.
    Se inserisco il codice sopra scritto direttamente nel form che deve collegarsi al file (nella procedura formCreate) le impostazioni vengono lette dal prova.ini ed utilizzate dal programma.
    Siccome devo collegarmi varie volte in più form nell'intero progetto ho pensato che fosse opportuno inserire tutte le richieste di collegamento in un unico form (o unit? o datamodule?) che fosse poi reso visibile ovunque. Non riesco, però a far funzionare la cosa.
    C'è sicuramente qualcosa che non va nel file configurazione.pas.
    Grazie!

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,333
    In generale, sarebbe sufficiente creare un unit semplice, contenente solo una banale classe (class) in grado di caricare e memorizzare all'interno di campi i valori contenuti nel file INI.

    Tuttavia, anche l'idea di usare un TDataModule non è da scartare, poiché potrebbe essere più semplice da implementare.

    Nel tuo caso, l'errore principale è dovuto al fatto che carichi il valore dell'impostazione all'interno di una variabile locale, valida solamente nel contesto del metodo in cui è dichiarata e quindi non visibile all'esterno.

    Per rendere disponibile questo valore ad altri form, definisci la variabile come campo:

    codice:
      TDataModule1 = class(TDataModule)
      private
        { Private declarations }
        FilePath: string;
      public
        { Public declarations }
      end;
    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    codice: TDataModule1 = class(TDataModule)
    private
    { Private declarations }
    FilePath: string;
    public
    { Public declarations }
    end;

    )
    Perché devo inserire la dichiarazione del FilePath in private e non in public, visto che devo renderla disponibile anche negli altri form del progetto?

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,333
    Originariamente inviato da vicky
    Perché devo inserire la dichiarazione del FilePath in private e non in public, visto che devo renderla disponibile anche negli altri form del progetto?
    Perché mi sono sbagliato.......

    O meglio, in genere faccio uso di proprietà, non rendo direttamente e pubblicamente disponibili i campi di un oggetto, così per abitudine ho introdotto il campo nella sezione private.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  5. #5
    Questo è il codice del datamodule dmConfigurazione:
    codice:
    unit dmConfigurazione;
    
    interface
    
    uses
      SysUtils, IniFiles,Classes;
    
    type
      TDataModule1 = class(TDataModule)
      procedure connFile(Sender:TObject);
      private
        { Private declarations }
    
      public
        { Public declarations }
        FilePath: string;
    
      end;
    
    var
      DataModule1: TDataModule1;
    
    implementation
    
    {$R *.dfm}
    procedure TDataModule1.connFile(Sender:TObject);
      var
      FilePath: string;
      ini: Tinifile;
      begin
        ini:= TIniFile.Create('\prova.ini');
       try
          FilePath:= ini.ReadString('filesconn','path','default value');
    
       finally
           ini.Free;
       end;
      end;
    
    end.
    Questo è il codice del form frmCopertina che richiama il dmConfigurazione:
    codice:
    unit frmCopertina;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, GR32_Image, ExtCtrls, DBXpress, DB,IniFiles, SqlExpr, DAImage, jpeg;
    
    type
      TFormCopertina = class(TForm)
        Panel1: TPanel;
        ImgCopertina: TImage;
        procedure FormCreate(Sender: TObject);
       
      private
        { Private declarations }
    
      public
        { Public declarations }
    
      end;
    
    var
      FormCopertina: TFormCopertina;
    
    implementation
    
    uses  dmConfigurazione;
    
    {$R *.dfm}
    
    procedure TFormCopertina.FormCreate(Sender: TObject);
    
       begin
    
          ImgCopertina.Picture.LoadFromFile(FilePath + 'Img.jpg');
          
         end;
    end.
    Scusami se ho inserito tutto il codice ma volevo essere sicura di non aver fatto cavolate!


  6. #6
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,333
    Il metodo connFile a quale evento è associato?

    In genere, è meglio non modificare i nomi dei metodi, o modificarli per introdurre un nome significativo rispetto all'evento che dà luogo all'esecuzione del metodo.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  7. #7
    Ciao!
    Il metodo connFile mi serve a ricavare il percorso sul server dei file condivisi. Utilizzerò questo percorso in vari punti del codice dei form della mia applicazione.

  8. #8
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,333
    Originariamente inviato da vicky
    Il metodo connFile mi serve a ricavare il percorso sul server dei file condivisi. Utilizzerò questo percorso in vari punti del codice dei form della mia applicazione.
    Questo mi era chiaro. Non mi è chiaro dove o quando viene richiamato.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  9. #9
    Aiuto! non viene richiamato da niente...
    Ho predisposto un modulo che deve collegarsi al file prova.ini per leggere i dati di configurazione del programma. Tramite questo modulo devo ricavare il percorso FilePath che utilizzerò nei vari form dell'applicazione durante l'evento OnCreate dei form stessi e l'evento BeforeConnection della connessione al database.
    L'evento FileConn (del quale adesso mi vergogno molto )servirebbe a leggere le impostazioni di configurazione: qual'è allora l'anello mancante?

  10. #10
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,333
    Il metodo che hai menzionato carica le impostazioni dal file INI, e fin qui ci sono anche io.

    Il problema è che, quando accedi a queste impostazioni memorizzate nei campi del DataModule, esse devono già essere caricate dal file.

    E' necessario, quindi, provvedere a chiamare il metodo, o all'avvio dell'applicazione o eventualmente all'interno dell'evento OnCreate del DataModule, che suppongo sia tra i primi moduli, se non il primo, ad essere creato (si verifica nelle opzioni del progetto).

    Il problema è che la tua "FileConn" non è un metodo normale, ma ha un parametro Sender di tipo TObject, e questo fa pensare che si trattasse - o che si tratti ancora - del metodo di risposta ad un evento, che però è stato rinominato.

    Sapere a quale evento è agganciata, ammesso che lo sia ancora, è un terno al lotto: si dovrebbe ricercare all'interno dei file PAS e dei file DFM per individuare quale evento richiama quel metodo.

    Nel caso in cui non venga richiamato, invece, non otterrai di conseguenza il caricamento delle impostazioni desiderate e quando andrai ad accedere alle variabili come FilePath e sorelle, non troverai il dato contenuto nel file INI.

    Non so se sono riuscito a fornire il panorama completo.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.