* * * *

Privacy Policy

Blog italiano

Clicca qui se vuoi andare al blog italiano su Lazarus e il pascal.

Forum ufficiale

Se non siete riusciti a reperire l'informazione che cercavate nei nostri articoli o sul nostro forum vi consiglio di visitare il
Forum ufficiale di Lazarus in lingua inglese.

Lazarus 1.0

Trascinare un file nel programma
DB concetti fondamentali e ZeosLib
Recuperare codice HTML da pagina web
Mandare mail con Lazarus
Stabilire il sistema operativo
Esempio lista in pascal
File INI
Codice di attivazione
Realizzare programmi multilingua
Lavorare con le directory
Utilizzare Unità esterne
TTreeView
TTreeview e Menu
Generare controlli RUN-TIME
LazReport, PDF ed immagini
Intercettare tasti premuti
Ampliare Lazarus
Lazarus e la crittografia
System Tray con Lazarus
UIB: Unified Interbase
Il file: questo sconosciuto
Conferma di chiusura di un applicazione
Liste e puntatori
Overload di funzioni
Funzioni a parametri variabili
Proprietà
Conversione numerica
TImage su Form e Panel
Indy gestiore server FTP lato Client
PopUpMenu sotto Pulsante (TSpeedButton)
Direttiva $macro
Toolbar
Evidenziare voci TreeView
Visualizzare un file Html esterno
StatusBar - aggirare l'errore variabile duplicata
Da DataSource a Excel
Le permutazioni
Brute force
Indy 10 - Invio email con allegati
La gestione degli errori in Lazarus
Pascal Script
Linux + Zeos + Firebird
Dataset virtuale
Overload di operatori
Lavorare con file in formato JSON con Lazarus
Zeos ... dietro le quinte (prima parte)
Disporre le finestre in un blocco unico (come Delphi)
Aspetto retrò (Cmd Line)
Lazarus 1.0
Come interfacciare periferica twain
Ubuntu - aggiornare free pascal e lazarus
fpcup: installazioni parallele di lazarus e fpc
Free Pascal e Lazarus sul Raspberry Pi
Cifratura: breve guida all'uso dell'algoritmo BlowFish con lazarus e free pascal.
Creare un server multithread
guida all'installazione di fpc trunk da subversion in linux gentoo
Indice
DB concetti fondamentali e connessioni standard
Advanced Record Syntax
DB concetti fondamentali e DBGrid
DB concetti fondamentali e TDBEdit, TDBMemo e TDBText
Advanced Record Syntax: un esempio pratico
Superclasse form base per programmi gestionali (e non)
Superclasse form base per programmi gestionali (e non) #2 - log, exception call stack, application toolbox
Superclasse form base per programmi gestionali (e non) #3 - traduzione delle form
Superclasse form base per programmi gestionali (e non) #4 - wait animation
Un dialog per la connessione al database:TfmSimpleDbConnectionDialog
Installare lazarus su mac osx sierra
immagine docker per lavorare con lazarus e free pascal
TDD o Test-Driven Development
Benvenuto! Effettua l'accesso oppure registrati.
Maggio 06, 2024, 01:50:16 am

Inserisci il nome utente, la password e la durata della sessione.

488 Visitatori, 0 Utenti

Autore Topic: Salvataggio e apertura di file  (Letto 11363 volte)

mecoman

  • Newbie
  • *
  • Post: 38
  • Karma: +0/-0
Salvataggio e apertura di file
« il: Dicembre 16, 2012, 04:46:41 pm »
Ciao a tutti.

Apro questo topic per chiedervi un consiglio sul salvataggio dei file. Spero che l'argomento non sia stato già trattato; se è così chiedo scusa.

Ipotizziamo di avere un form contenente un MemoBox ed due pulsanti, rispettivamente per il salvataggio e l'apertura del file.

Nello scrivere il codice per il salvataggio del file di testo non ho nessun problema in quanto il file lo salva in formato .txt e quindi apribile anche con il blocco note di windows.
Ciò che voglio fare io è quello di far salvare il file in un formato personale (ad esempio .abc) apribile solo con il mio programma.

Qualcuno è in grado di aiutarmi?

Grazie 1000 in anticipo. Ciao.

bonmario

  • Hero Member
  • *****
  • Post: 1303
  • Karma: +10/-1
Re:Salvataggio e apertura di file
« Risposta #1 il: Dicembre 16, 2012, 07:36:02 pm »
Cosa sarebbe il MemoBox? Un TMemo? Se è così, la leggi riga per riga e la salvi some più ti piace.

Ciao, Mario

mecoman

  • Newbie
  • *
  • Post: 38
  • Karma: +0/-0
Re:Salvataggio e apertura di file
« Risposta #2 il: Dicembre 16, 2012, 11:57:02 pm »
Ciao Mario. Grazie per la risposta.

Non so perchè ho scritto MemoBox, ma mi riferivo ad un TMemo.

Detto questo, potresti essere un pochino più chiaro? Non ho ben capito cosa volevi dire.

Grazie, ciao.

Stilgar

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2382
  • Karma: +10/-0
Re:Salvataggio e apertura di file
« Risposta #3 il: Dicembre 17, 2012, 12:20:36 am »
Ciao Mecoman...
allora le strade in informatica sono sempre molteplici, e portano al medesimo risultato.
Il TMemo espone una bellissima property : Lines.
Questa è un TStrings come classe astratta.
Questa rappresenta il modello dei dati che la TMemo usa.
Alla fine della fiera è una grande stringa organizzata in linee logiche. Quelle che vedi a video in fase di rendering del componente.
Lines.GetText ti da accesso diretto alla ram (PChar) dove viene contenuta la stringa.
Occhio che in lettura è molto potente, accedere alla memoria, in scrittura dovresti rifarti mezzo meccanismo di lettura.
Altrimenti hai Lines.Text. Questa rappresenta una stringa pascal open classica.
A questo punto non ci sono molte altre cose da dirti, non sapendo il "formato" dati che vuoi utilizzare per scrivere/leggere le info.
Qui sta a te e alla tua fantasia.

Visto che sei appena approdato a Lazarus/Freepascal non ti imbarco nella scrittura ex nodo di un componente per la lettura/scrittura di un formato ad hoc basato sul rifacimento di un TMemo.

Stilgar
« Ultima modifica: Dicembre 17, 2012, 12:23:27 am da Stilgar »
Al mondo ci sono 10 tipi di persone ... chi capisce il binario e chi no.

nomorelogic

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2874
  • Karma: +20/-4
Re:Salvataggio e apertura di file
« Risposta #4 il: Dicembre 17, 2012, 09:17:32 am »
ciao

Ciò che voglio fare io è quello di far salvare il file in un formato personale (ad esempio .abc) apribile solo con il mio programma.

un file di testo alla fine è un file di testo, per aprirlo solo con il tuo programma credo che dovresti criptare il contenuto.
« Ultima modifica: Dicembre 17, 2012, 09:23:08 am da nomorelogic »
Imagination is more important than knowledge (A.Einstein)

mecoman

  • Newbie
  • *
  • Post: 38
  • Karma: +0/-0
Re:Salvataggio, apertura e stampa di file di testo
« Risposta #5 il: Dicembre 17, 2012, 01:08:27 pm »
Ciao a tutti e grazie mille per le informazioni, sono state utili.

Vorrei porvi un altra domanda. Partendo dalla ipotesi iniziale ho aggiunto il tasto "Stampa" e vorrei che il contenuto della TMemo venisse stampato su carta. Riesco a far partire la stampa ma tutto il contenuto della TMemo mi viene stampato su un solo rigo.

Mi spiego meglio: dopo aver scritto il codice inerente il tasto "stampa" ho lanciato il programma per provarlo ed nella TMemo ho scritto 5 righe di testo. Quando clicco su stampa la stampante comincia a stampare, ma le 5 righe di testo le stampa su un unico rigo.
Come mai?
Di nuovo grazie a tutti. Ciao.   
« Ultima modifica: Dicembre 17, 2012, 01:47:17 pm da mecoman »

Stilgar

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2382
  • Karma: +10/-0
Re:Salvataggio e apertura di file
« Risposta #6 il: Dicembre 17, 2012, 02:01:42 pm »
Come dicevo prima ... bisogna vedere il codice che hai scritto...
Se hai fatto un Canvas.textout secco senza prevedere il "tirono a capo" ... non c'è da meravigliarsi.
Al mondo ci sono 10 tipi di persone ... chi capisce il binario e chi no.

mecoman

  • Newbie
  • *
  • Post: 38
  • Karma: +0/-0
Re:Salvataggio e apertura di file
« Risposta #7 il: Dicembre 17, 2012, 02:31:14 pm »
Ciao Stilgar.

Per quanto riguarda il "salvataggio" ho scritto questo codice:

procedure TForm1.ButtonSalvaClick(Sender: TObject);
Begin
  If SaveDialog.Execute then
  Begin
    Memo.Lines.SaveToFile(SaveDialog.FileName);
  end;
end;


Nella proprietà "Filter" del TSaveDialog ho inserito sia il filtro *.txt che il filtro *.abc ma il testo salvato lo riesco ad aprire anche con il blocco note di windows (ma questo vorrei che non accadesse).

Per quanto riguarda la "stampa" ho scritto questo codice:

procedure TForm1.StampaTextClick(Sender: TObject);
const MargineSx = 100;
var
  MargineUp:Integer;
begin
  If PrintDialog.Execute then
  Begin
    with Printer do
    try
      MargineUp:= 100;
      BeginDoc;
      Canvas.Font.Name:= 'Arial';
      Canvas.Font.Size:= 12;
      Canvas.Font.Color:= clBlack;
      Canvas.TextOut (MargineSx, MargineUp,Memo.Text);
    finally;
    EndDoc;
    end;
  end;
end;


Ciao.

nomorelogic

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2874
  • Karma: +20/-4
Re:Salvataggio e apertura di file
« Risposta #8 il: Dicembre 17, 2012, 03:30:50 pm »
Nella proprietà "Filter" del TSaveDialog ho inserito sia il filtro *.txt che il filtro *.abc ma il testo salvato lo riesco ad aprire anche con il blocco note di windows (ma questo vorrei che non accadesse).

per risolvere questo problema puoi solo criptare il contenuto


      Canvas.TextOut (MargineSx, MargineUp,Memo.Text);

la proprietà Text di TStrings ti da l'opportunità di vedere tutto il memo come una unica stringa, probabilmente è quello il problema.
dovresti stampare in un loop, leggi qua che dovrebbe andare bene
http://www.delphicorner.f9.co.uk/articles/op9.htm
Imagination is more important than knowledge (A.Einstein)

mecoman

  • Newbie
  • *
  • Post: 38
  • Karma: +0/-0
Re:Salvataggio e apertura di file
« Risposta #9 il: Dicembre 27, 2012, 09:46:18 pm »
Ciao a tutti.

Sono tornato ancora con questo problema, in parte risolto. Mi spiego meglio: ho un form contenente due Edit, un TMemo, un bottone "Salva" ed un bottone "Apri".

Gli obbiettivi che vorrei raggiungere sono due:
1) salvare i dati contenuti negli Edit e nel TMemo in un file cliccando sul tasto "Salva";
2) aprire il file salvato in precedenza ed inserire i dati nei rispettivi campi.

Con il primo obiettivo non ho avuto problemi mentre ne ho con il secondo.

Quando lancio l'applicazione, se clicco sul bottone "Apri", seleziono il file che mi deve aprire ma mi compare una finestra di "Notifica dell' eccezione del debugger".
Nella finestra è scritto testualmente:"Il progetto project1 ha sollevato una eccezione di classe 'RunError(103)'. In file 'unit1.pas' at line 80: Read (AddrFile, AddrRec);
Cliccando su continua ne apre un'altra con scritto:"Il progetto ha sollevato una eccezione di classe 'EinOutError' con messaggio:File not open. In file 'unit1.pas' at line 80: Read (AddrFile, AddrRec);

Qualcuno sa aiutarmi a risolvere il problema?

Ringraziando chiunque possa aiutarmi, riporto di seguito il codice che ho scritto:

Codice: [Seleziona]
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ComCtrls, ExtCtrls;

{ Indirizzo di salvataggio }
type
  TAddressRec = record
    Testo1 : String [255];
    Testo2 : String [255];
    Testo3 : String [255];
  end;


  { TForm1 }

  TForm1 = class(TForm)
    ButtonCarica: TButton;
    ButtonSalva: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Memo: TMemo;
    OpenDialog: TOpenDialog;
    SaveDialog: TSaveDialog;
    procedure ButtonCaricaClick(Sender: TObject);
    procedure ButtonSalvaClick(Sender: TObject);

  public
    { public declarations }
  end;

var
  Form1: TForm1;
  AddrFile : File of TAddressRec;
  AddrRec : TAddressRec;

const
  MAXRECS = 2000;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.ButtonSalvaClick(Sender: TObject);
var
  salvataggio: TAddressRec;
begin
  salvataggio.Testo1:= Edit1.Text;
  salvataggio.Testo2:= Edit2.Text;
  salvataggio.Testo3:= Memo.Text;
  If Savedialog.Execute then
  assignfile (AddrFile,Savedialog.FileName);
  If FileExists (Savedialog.FileName) then
  begin
    Reset (AddrFile);
  end
  else
    Rewrite (AddrFile);
  with AddrRec do
  begin
    Testo1:= Edit1.Text;
    Testo2:= Edit2.Text;
    Testo3:= Memo.Text;
  end;
  write (AddrFile, AddrRec);
end;

procedure TForm1.ButtonCaricaClick(Sender: TObject);
begin
  try
  if opendialog.Execute then
  if fileexists (Opendialog.Filename) then
    Read (AddrFile, AddrRec);
    with AddrRec do
    begin
      Edit1.Text:= Testo1;
      Edit2.Text:= Testo2;
      Memo.Text:= Testo3;
    end;
  finally
  end;
end;

end.

Stilgar

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2382
  • Karma: +10/-0
Re:Salvataggio e apertura di file
« Risposta #10 il: Dicembre 27, 2012, 10:02:15 pm »
Ciao,
http://www.frameworkpascal.com/helphtml/run_errors.htm
Il file non sembra essere aperto.
In caso di salvataggio fai così:
Codice: [Seleziona]
 If Savedialog.Execute then
  assignfile (AddrFile,Savedialog.FileName);
  If FileExists (Savedialog.FileName) then
  begin
    Reset (AddrFile);
  end
  else
    Rewrite (AddrFile);
in lettura :
Codice: [Seleziona]
 if fileexists (Opendialog.Filename) then
    Read (AddrFile, AddrRec);
    with AddrRec do

Dovresti aprirlo ...
http://www.freepascal.org/docs-html/rtl/system/reset.html
Al mondo ci sono 10 tipi di persone ... chi capisce il binario e chi no.

mecoman

  • Newbie
  • *
  • Post: 38
  • Karma: +0/-0
Re:Salvataggio e apertura di file
« Risposta #11 il: Dicembre 28, 2012, 02:26:39 pm »
Ciao Stilgar. Grazie per l'aiuto.

Anche io ho pensato che il file non sembrava aperto, ma non capisco dove sbaglio.
I due codici che mi hai scritto sono identici a quelli presenti nel mio listato e come risultato mi genera la finestra di notifica dell'eccezione.
Hai mai provato qualcosa di simile?

Ciao, grazie

nomorelogic

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2874
  • Karma: +20/-4
Re:Salvataggio e apertura di file
« Risposta #12 il: Dicembre 28, 2012, 04:17:41 pm »
per la lettura, prendi spunto da qua
http://www.freepascal.org/docs-html/rtl/system/read.html

in fondo al reference trovi un esempio
Imagination is more important than knowledge (A.Einstein)

bonmario

  • Hero Member
  • *****
  • Post: 1303
  • Karma: +10/-1
Re:Salvataggio e apertura di file
« Risposta #13 il: Dicembre 28, 2012, 06:20:56 pm »
Ciao Stilgar. Grazie per l'aiuto.

Anche io ho pensato che il file non sembrava aperto, ma non capisco dove sbaglio.

Prima di questa istruzione:
Codice: [Seleziona]
Read (AddrFile, AddrRec);
devi aprire il file con:
Codice: [Seleziona]
Reset (AddrFile);

Alla fine sia della routine di scrittura che di quella di lettura, devi chiudere il file con:
Codice: [Seleziona]
CloseFile(AddrFile);

Ciao, Mario

Stilgar

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2382
  • Karma: +10/-0
Re:Salvataggio e apertura di file
« Risposta #14 il: Dicembre 28, 2012, 08:30:27 pm »
mecoman, i listati che ho postato sono pezzi del tuo.
Volevo farti notare la differenze tra l'apertura in lettura e in scrittura.

Edit
Prova a scrivere e leggere il file, non importa il nome che dai al file da leggere, vedrai che rilegge il file che hai appena scritto, ma dalla fine. Quindi ti dirà che hai provato a leggere oltre il file o che il file non è aperto in lettura.
« Ultima modifica: Dicembre 28, 2012, 08:33:35 pm da Stilgar »
Al mondo ci sono 10 tipi di persone ... chi capisce il binario e chi no.

 

Recenti

How To

Utenti
Stats
  • Post in totale: 18800
  • Topic in totale: 2239
  • Online Today: 500
  • Online Ever: 900
  • (Gennaio 21, 2020, 08:17:49 pm)
Utenti Online
Users: 0
Guests: 488
Total: 488

Disclaimer:

Questo blog non rappresenta una testata giornalistica poiché viene aggiornato senza alcuna periodicità. Non può pertanto considerarsi un prodotto editoriale ai sensi della legge n. 62/2001.