Newsgroup: it.comp.lang.delphi
Titolo: LoadFromFile

Sto cercando di imparare a usare le classi. Ne sto sviluppando una dove uno 
dei campi, di tipo string, va settato con il contenuto di un file .rtf sul 
disco. Al LoadFromFile ricevo un  "Access violation error". Semplificando, 
le mie istruzioni sono le seguenti:
function TMemos.GetMemo(const aType, aFullname: string): string;
var
  aMemo: TRichedit;
begin
  GetMemo:= '';
  if fileexists(aFullname) then
  begin
      aMemo.Lines.LoadFromFile(aFullname);  // QUI, ACCESS VIOLATION
      GetMemo:= aMemo.Lines.Text;
  end;
end;
Provando ad eseguire un'applicazione di prova dove ho copiato la funzione e 
ho verificato, come sospettavo, che se invece della variabile metto in un 
form il componente RichEdit allora va tutto bene. Ho provato a definire la 
var come TStrings, ma ho sempre lo stesso risultato.
Come ne esco ? D'altronde devo reperire questo testo dal file .rtf e quindi 
devo usare LoadFromFile ... 


mmm mi sento un pochino in difficoltà ..., da dove inizio ???
1° domanda da porsi quando l'errore è un AV, "cosa sto cercando di 
'usare' che non è stata creata ???" .. ma certo l'oggetto TRichedit non 
è stato istanziato ... dunque prima di eseguire una load fromfile devo 
creare/istanziare (fate voi) l'oggetto a cui mi devo riferire.
function TMemos.GetMemo(const aType, aFullname: string): string;
var
aMemo: TRichedit;
begin
   Result := '';
   aMemo := TRichedit.Create(self); // Creo l'oggetto/componente
   Try // é cosa buona e giusta ...
     if fileexists(aFullname) then // OK test file
     begin
       .. qui non sto a dilungarmi su come settare le
       .. varie property del componente
       aMemo.Lines.LoadFromFile(aFullname);  //
       Result := aMemo.Lines.Text; // testare la property plaintext
     end;
   finally
     FreeAndNil(aMemo); // tutto ciò che si crea si distugge
   end;
end;
NB: function non testata scritta 'on the fly', e non sapendo a cosa 
serve 'aggiustata' a scopo didattico
Ovviamente se butti sulla form un componente hai il create già bello e 
pronto :)
^_Goblin_^

ciao,
la mia è un'esperienza dilettantistica... ma è stato creato l'oggetto?
---
giova

 quindi devo usare LoadFromFile ...
Nel tuo codice, hai dichiarato una variabile di tipo "TRichEdit", ma non 
hai creato l'oggetto su cui lavorare.
Trattandosi di un controllo grafico, peraltro, non so che senso abbia 
crearlo all'interno di un metodo, soprattutto se poi utilizzi una 
propriet� ("Lines") appartenente a un tipo ("TStrings") che puoi 
istanziare direttamente creando uno dei suoi discendenti (ad esempio, 
TStringList) senza dover necessariamente creare l'istanza di un intero 
controllo visuale che poi, alla fine, non visualizzi, n� benefici di 
altre funzionalit� specifiche.
Nel tuo metodo, poi, hai due parametri che non vengono utilizzati, 
quindi non escludo che nel restante codice sorgente che hai omesso non 
vi siano altri errori logici, compresa la distruzione (con "Free") degli 
oggetti che vai a creare e utilizzare all'interno del metodo.
Difficile suggerirti puntualmente come correggere: continua il percorso 
di studio che stai affrontando ed eventualmente creati degli esempi che 
non coinvolgano elementi non ancora conosciuti senza approfondirne l'uso 
e il significato.
Ciao!
   Marco.
-- 
MARCO BREVEGLIERI
  (
http://www.marco.breveglieri.name
)

 funzionalità specifiche.


 funzionalità specifiche.


 ha scritto nel messaggio 
news:4b993150$0$1141$4faf...@reader1.news.tin.it...


>
Credo manchi la creazione del componente, se provi ad aggiungere le 
righe sopa vedrai che funziona.
Ciao.

 funzionalità specifiche.


 Non è che non posso usare direttamente una TStrings ?
No, perché *TStrings* è una classe astratta, funge principalmente da 
scheletro che viene implementato in classi discendenti, come *TStringList*.
Approfondisci il significato di "classe astratta"... :)
Ciao,
