Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 22
  1. #1
    piccaweb
    Guest

    [ Delphi ] File di testo e DirListBox

    Ho un problema con un file di testo!
    Premetto che ho creato 2 procedure , una per scrivere sul file e l'altra per leggere il contenuto( le allego...)

    codice:
    Procedure ModificaFile(DirFile:String);
    Var
     Riga:string;
     Procedi:boolean;
     Pos:Integer;
     FileExt1:text;
    
    Begin
    AssignFile(FileExt1,DirFile);
    Procedi:=False;
    Pos:=1;
    
    Rewrite(FileExt1);
    If IOResult = 0 Then
                     Procedi:=True
                    Else
                    begin
                     Procedi:=False;
                      MessageDlg('Impossibile accedere al file di setup ',mtError,
                      [mbOK],0);
                     end;
    Riga:='';
    If Procedi Then
            repeat
               Case Pos of
               1:Riga:=U_Setup.F_Setup.DirectoryListBox1.Directory; //Memorizzo la directory dei Contratti
    
               2:Riga:=U_Setup.F_Setup.DirectoryListBox2.Directory; //Memorizzo la directory dei Preventivi
               End;
            Writeln(FileExt1,Riga);
            Riga:='';
            Inc(Pos);
            until Pos=3;
    
    CloseFile(FileExt1);
    
    end;
    e
    codice:
    Procedure LetturaFile(DirFile:String);
    Var
     Riga:string;
     Procedi:boolean;
     Pos:Integer;
     FileExt1:text;
     
    Begin
    AssignFile(FileExt1,DirFile);
    Procedi:=False;
    reset(FileExt1);
    If IOResult = 0 Then
                     Procedi:=True
                    Else
                     begin
                     Procedi:=False;
                      MessageDlg('Impossibile accedere al file di setup ',mtError,
                      [mbOK],0);
                     end;
    Pos:=1;
    If Procedi Then
               while not Eof(FileExt1) do
                begin
                 Readln(FileExt1,Riga);
                  case Pos of
                    1:U_Setup.F_Setup.Edit1.Text:=Riga;//Leggo la directory dei Contratti
    
                    2:U_Setup.F_Setup.Edit2.Text:=Riga;//Leggo la directory dei Preventivi
                  end;
                Inc(Pos)
               end;
    closeFile(FileExt1);
    end;
    Come potete notare passo come parametro il nome del file e fino qui tutto bene.
    Ora il mio compito é quello di memorizzare nel file di testo il percorso di una cartella selezionata attraverso il componente TDirectoryListBox.
    Naturalmente ho anche inserito il componente DriveListBox con la proprietà DirList uguale al nome del componente TDirectoryListBox!
    Attraverso un bottone di conferma memorizzo in contenuto del file!
    Ed ecco il problema: passando alle procedure la stringa 'setup.txt' il file vine letto correttamente mentre quando scrivo il file setup viene creato direttamente nella directory selezionata dal componente DirectoryListBox.!
    Il file dovrebbe essere scritto nella cartella dove si trova l'eseguibile, invece no!
    Come mai?


    Ciao

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296
    Intuitivamente, credo che l'uso della DirListBox (componente che non ho mai utilizzato) modifichi involontariamente la cartella corrente, impostandola a quella selezionata sul controllo.
    Ad ogni modo, per scrivere file di testo ti suggerisco di utilizzare la classe TStringList, la stessa classe utilizzata nel controllo TMemo per salvare le linee di testo. Il codice è molto più compatto e meno complesso di quello abituale Pascal di accesso ai file:
    codice:
    procedure TForm1.Button1Click(Sender: TObject);
    var
      s: TStringList;
    begin
      s := TStringList.Create;
      try
        s.Add('aaa');
        s.Add('bbb');
        s.SaveToFile('file.txt');
      finally
        s.Free;
      end;
    end;
    Nel codice riportato sopra, viene creata un'istanza della classe TStringList, si aggiungono righe di testo con il metodo Add e si salva tutto quanto in un file tramite il metodo SaveToFile. Il costrutto try...finally consente di proteggere le risorse nel caso in cui si verifichi un errore durante l'operazione.

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

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

  3. #3
    piccaweb
    Guest
    Ok! Adesso provo...
    Per leggere il file posso usare una struttura del genere?

    GRazie

  4. #4
    piccaweb
    Guest
    Non funziona!
    Stesso errore di prima.
    Consigliamo un componente in grado di navigare attraverso le directory o qualcosa del genere!

    Grazie

  5. #5
    piccaweb
    Guest
    Ho ancora un'altra domanda da porti...
    Io come connessione al Db uso ADO ma mi da molti problemi quando inserisco un nuovo record e dalla disperazione dono disposto a cambiare struttura !

    Solo che non so cosa scegliere tenendo conto che il programma deve funzionare su altri 4 computer dove non posso installare BDE!

    Cosa mi consigli?

  6. #6
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296
    Il metodo che ti ho indicato era solo un modo più elegante di accedere ai file di testo; ovviamente, puoi utilizzare la classe TStringList anche per caricare testo da un file, tramite il metodo LoadFromFile.
    Questo approccio non risolve comunque il tuo problema, dovuto al fatto che il componente TDirectoryListBox modifica la cartella corrente quando selezioni un nuovo percorso.
    Quindi, qualsiasi metodo tu scelga di utilizzare per salvare il file di testo, devi utilizzare un nome di file completo di percorso assoluto per garantire che il testo venga salvato dove vuoi tu.
    Potresti tentare di utilizzare la proprietà ExeName dell'oggetto Application, la quale contiene il nome del file eseguibile che rappresenta l'applicazione preceduta dal percorso completo; usata in congiunzione con la funzione ExtractFilePath, può permetterti di estrarre la cartella di lavoro dell'applicazione stessa. Un esempio d'uso:
    codice:
      ExtractFilePath(Application.ExeName)
    Ti restituisce il percorso dell'applicazione che termina con il carattere "/". Prova e mi saprai dire.

    Per quanto riguarda il problema con il motore di accesso ai database, se utilizzi Microsoft Access, l'unica alternativa ad ADO potrebbe essere dbExpress, il nuovo motore introdotto in Delphi da Borland per la portabilità dei progetti...anche se non ho ancora avuto il modo di farne uso. Non ne conosco altri, a parte il BDE che purtroppo mi hai precluso!
    A proposito, perchè non puoi installare il BDE??

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

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

  7. #7
    piccaweb
    Guest
    I computer non essendo miei , ma di terzi che hanno richiesto il programma, non vorrei creare qualche disordine "tecnico" al loro interno!

    Posso cmq installare BDE senza installare il programma Delphi?

  8. #8
    piccaweb
    Guest
    Per il file di testo mi hai risolto il problema!
    Grazie...

  9. #9
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296
    Non esiste un setup separato per il BDE. In genere, viene installato quando crei un progetto di setup con InstallShield Express Limited Edition, la versione di InstallShield inclusa nel CD di Delphi.
    Tu non disponi di un programma di installazione per il tuo applicativo? In ogni caso, sono riuscito a creare uno pseudoprogramma di installazione anche per il BDE (assestante): ho creato un progetto di installazione scegliendo solo i componenti per il BDE, ma senza specificare alcun progetto Delphi.

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

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

  10. #10
    piccaweb
    Guest
    Quindi se dovessi creare un eseguibile che installa il mio programma , verrebbe inserito anche il BDE in automatico o sbaglio?

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.