Italian community of Lazarus and Free Pascal

Programmazione => Generale => Topic aperto da: Simon75 - Gennaio 30, 2013, 09:09:01 am

Titolo: Salvare il campo Text di un TEdit
Inserito da: Simon75 - Gennaio 30, 2013, 09:09:01 am
Ciao,come potrei fare a salvare il campo Text di un TEdit in un
file? usando il SaveDialog?
Con un componente TMemo basta fare ad esempio:
Codice: [Seleziona]

if SaveDialog.Execute then Memo1.Lines.SaveToFile(SaveDialog1.FileName)

Dal momento che TEdit non possiede una proprietà simile a quella di
TMemo, c'è qualche modo per aggirare tale ostacolo?
Grazie
Titolo: Re:Salvare il campo Text di un TEdit
Inserito da: nomorelogic - Gennaio 30, 2013, 10:23:21 am
ciao
ci sono diversi modi ma il più semplice potrebbe essere:
Codice: [Seleziona]
var: sl: TStringList;
begin

if SaveDialog.Execute then
begin

   sl := TStringList.Create;
   try
      sl.Text := Edit.Text;
      sl.SaveToFile(SaveDialog1.FileName)
   finally
      sl.Free;
   end;

end;

end;

Titolo: Re:Salvare il campo Text di un TEdit
Inserito da: Simon75 - Gennaio 30, 2013, 11:00:20 am
Grazie

Codice: [Seleziona]

procedure TForm1.BSalvaClick(Sender: TObject);
var
  s: TStringList;
begin

  if Savedialog1.Execute then
  begin
    s := TStringList.Create;
    try
      s.Text := ESig.Text;
      s.SaveToFile(Savedialog1.FileName);
      Savedialog1.DefaultExt := 'txt';
      Savedialog1.Filter := '*.txt';
    finally
      s.Free;
    end;
  end;
end;     

I filtri come mai non funzionano?

Se voglio salvare più caselle TEdit come posso fare?
Titolo: Re:Salvare il campo Text di un TEdit
Inserito da: nomorelogic - Gennaio 30, 2013, 11:17:08 am
I filtri come mai non funzionano?

perchè li imposti *dopo* aver lanciato il dialog con Execute
vanno impostati prima sennò come fa il dialog a sapere  cosa ti deve filtrare?  ;)


Se voglio salvare più caselle TEdit come posso fare?

se nello stesso file, ad esempio:
Codice: [Seleziona]

var: sl: TStringList;
begin

if SaveDialog.Execute then
begin

   sl := TStringList.Create;
   try
      sl.Values[Edit1.Name] := Edit1.Text;
      sl.Values[Edit2.Name] := Edit2.Text;
      sl.Values[Edit3.Name] := Edit3.Text;
      sl.Values[Edit4.Name] := Edit4.Text;
      sl.SaveToFile(SaveDialog1.FileName)
   finally
      sl.Free;
   end;

end;

end;



Titolo: Re:Salvare il campo Text di un TEdit
Inserito da: Simon75 - Gennaio 30, 2013, 11:19:37 am
Perfetto grazie nomore
Ciao
Titolo: Re:Salvare il campo Text di un TEdit
Inserito da: Simon75 - Gennaio 30, 2013, 03:02:54 pm
Ciao ok funziona tutto bene, ma vorrei salvare in maniera strutturata,
attualmente quando salvo mi esce così:
ESig=Paolino Pippo
Edata=30/01/13
Sarebbe bello riuscire a togliere la E e anche riuscire a sistemare la pagina di txt  in maniera più carina per poi stamparla.
Esiste qualche classe in merito?
Ciao
Titolo: Re:Salvare il campo Text di un TEdit
Inserito da: nomorelogic - Gennaio 31, 2013, 09:15:54 am
Esiste qualche classe in merito?

Direi di no.

Memorizzare dei dati e fare un report sono due cose differenti; se vuoi fare tutto in un colpo solo dovresti memorizzare i dati in formato xml e poi prevedere un report che li sappia leggere ma credo che sia una strada un po' difficile da praticare...

Per togliere la 'E' puoi fare così prima di salvare:
Codice: [Seleziona]
sl.Values[copy(Edit1.Name, 2, length(Edit1.Name)-1)] := Edit1.Text; 

Per l'uguale puoi provare a fare:
Codice: [Seleziona]
sl.NameValueSeparator := #9;
appena dopo la creazione di sl, sotto la try

Incrociando le dita qualcosa viene fuori ;)

Titolo: Re:Salvare il campo Text di un TEdit
Inserito da: Simon75 - Gennaio 31, 2013, 10:57:12 am
Ciao,

La E ho deciso di togliera dal nome nell'ispettore oggetti  :)
Ma non posso usare un writeln() per aggiungere quello che voglio prima di salvare?

esempio salvo:     Sig=Paolino Pippo
                           data=30/01/13

Poi con un writeln('-----Topolino----')  aggiungo per esempio un

titolo:            -----Topolino----
                    Sig=Paolino Pippo
                    data=30/01/13

Invece se poi voglio caricare nelle caselle TEdit quello che ho salvato dovrei fare così?
Codice: [Seleziona]

procedure TForm1.BCercaClick(Sender: TObject);
var
  sl: TStringList;
begin
  OpenDialog1.DefaultExt := 'txt';
  OpenDialog1.Filter := '*.txt';
  if OpenDialog1.Execute then
  begin

    sl:= TStringList.LoadFromFile(Devo inserire  il percorso?);
    try

      sl.Values[Sig.Name] := Sig.Text;
      sl.Values[data.Name] := data.Text;
      sl.LoadFromFile(OpenDialog1.FileName);
    finally
      sl.Free;
    end;
  end;

end;

Grazie Ciao

ps. stavo leggendo nel forum che si può caricare una cartella per creare i report :) sono riuscito a caricare la cartella con la spiegazione di  xinyiman, sarebbe interessante in futuro trovare un bel tutorial a riguardo sui LazRepot.

Vi saluto
                         
Titolo: Re:Salvare il campo Text di un TEdit
Inserito da: nomorelogic - Gennaio 31, 2013, 01:14:41 pm
La E ho deciso di togliera dal nome nell'ispettore oggetti  :)
Ma non posso usare un writeln() per aggiungere quello che voglio prima di salvare?

esempio salvo:     Sig=Paolino Pippo
                           data=30/01/13

Poi con un writeln('-----Topolino----')  aggiungo per esempio un

titolo:            -----Topolino----
                    Sig=Paolino Pippo
                    data=30/01/13         

per la decisione di torgliere la E... no comment  ;D


per il resto, per fare qualcosa tipo Writeln() devi fare delle prove con sl.Add('----Topolino-----')
non so però poi che viene fuori quando usi sl.Values
Titolo: Re:Salvare il campo Text di un TEdit
Inserito da: nomorelogic - Gennaio 31, 2013, 01:19:02 pm
Codice: [Seleziona]
    sl:= TStringList.LoadFromFile(Devo inserire  il percorso?);
[...]
      sl.LoadFromFile(OpenDialog1.FileName);   // questo lo devi togliere

mi raccomando: non pigiare mai il tasto F1 quando sei sopra a strane diciture tipo "LoadFromFile" ;)
sl:= TStringList.LoadFromFile(OpenDialog1.FileName);
Titolo: Re:Salvare il campo Text di un TEdit
Inserito da: Simon75 - Gennaio 31, 2013, 02:10:44 pm
unit1.pas(156,57) Error: Only class class methods, class properties and class variables can be accessed in class methods
unit1.pas(156,57) Error: Only class methods, class properties and class variables can be referred with class references
unit1.pas(263) Fatal: There were 2 errors compiling module, stopping

Codice: [Seleziona]

sl := TStringList.LoadFromFile(OpenDialog1.FileName);

Titolo: Re:Salvare il campo Text di un TEdit
Inserito da: nomorelogic - Gennaio 31, 2013, 02:54:56 pm
ok, ok, me la son cercata ;)

s := OpenDialog1.FileName;
sl := TStringList.LoadFromFile(s);

prova così che dovrebbe andare
Titolo: Re:Salvare il campo Text di un TEdit
Inserito da: Simon75 - Gennaio 31, 2013, 03:44:54 pm
 l'ho dichiarata come:
var
  s: string;
  sl: TStringList;


 begin
    s := OpenDialog1.FileName;
    sl := TStringList.LoadFromFile(s);

Non è cambiato nulla:
Mi da il solito errore
Titolo: Re:Salvare il campo Text di un TEdit
Inserito da: nomorelogic - Gennaio 31, 2013, 03:55:50 pm
l'ho dichiarata come:
var
  s: string;
  sl: TStringList;


 begin
    s := OpenDialog1.FileName;
    sl := TStringList.LoadFromFile(s);

Non è cambiato nulla:
Mi da il solito errore

scusa ma a forza di fare copia/incolla non avevo letto quello che copiaincollavo... :P
sl.LoadFromFile(s);
Titolo: Re:Salvare il campo Text di un TEdit
Inserito da: Simon75 - Gennaio 31, 2013, 04:14:22 pm
Ok così compila, ma non riesco a leggere nelle TEdit quello che ho salvato, mi genera una eccezione di classe 'External:SIGSEGV'

Codice: [Seleziona]

  begin
    s := OpenDialog1.FileName;
    sl.LoadFromFile(s);


    try

      sl.Values[ESig.Name] := ESig.Text;
      sl.Values[Edata.Name] := EData.Text;

    finally 

Titolo: Re:Salvare il campo Text di un TEdit
Inserito da: nomorelogic - Febbraio 01, 2013, 09:05:46 am
Ok così compila, ma non riesco a leggere nelle TEdit quello che ho salvato, mi genera una eccezione di classe 'External:SIGSEGV'

Codice: [Seleziona]

  begin
    s := OpenDialog1.FileName;
    sl.LoadFromFile(s);


    try

      sl.Values[ESig.Name] := ESig.Text;
      sl.Values[Edata.Name] := EData.Text;

    finally 



Codice: [Seleziona]
begin
    if not OpenDialog1.Execute then
        exit;
    sl := TStringList.Create;
    try
      s := OpenDialog1.FileName;
      sl.LoadFromFile(s);
      ESig.Text := sl.Values[ESig.Name];
      EData.Text := sl.Values[Edata.Name];
    finally 
        sl.Free;
    end;
end;

Titolo: Re:Salvare il campo Text di un TEdit
Inserito da: Simon75 - Febbraio 01, 2013, 09:30:39 am
Nomore funziona alla grande  ;)
Sei un maestro  :)
Grazie
Ciao