Corso di Delphi

Completiamo la nostra prima applicazione

 

La parte più importante di questo software

Ciò che abbiamo visto finora era importante, ma abbiamo sempre mancato la parte più significativa della nostra applicazione, quella che da all’utente la possibilità di scegliere il file da caricare e, successivamente, salvarlo.
Per dare la possibilità all’utente di scegliere un file, useremo un altro componente.

Si trova nella sezione “Dialogs”, e si chiama “OpenDialog”. Ancora, questo è un componente usato da Windows stesso.
Piazzandolo sul form, noterete che resta un rettangolo e non ha una “forma” come il memo o il button.

Ma i discorsi “filosofici” li faremo dopo, adesso siamo tutti ansiosi di completare l’applicazione, vero?
Non so voi, ma io lo sono !

Vi ricordate quello che avete fatto per aggiungere all’applicazione un modo per uscire? Bene, rifate lo stesso per il pulsante “Load”.

Bene, adesso s’inizia a scrivere codice “vero”.  Adesso voi dovreste avere di fronte questo nel Code Editor:

procedure TForm1.LoadBtnClick( Sender: TObject );
begin

end;


Vi trovate? Bene ! Adesso, è il caso di spiegare come funziona l’OpenDialog.
Quello dell’OpenDialog che ci interessa adesso è il metodo “Execute”.
Ecco il prototipo:

function Execute : Boolean;

Quando si richiama, questa funxione può restituire due valori: vero o falso( True o False ).

L’Object Pascal ha una simpatica e comodissima caratteristica ereditata dal Turbo Pascal: quando si fanno i confronti con True o False, si può sottintendere True. Che significa questo? Significa che scrivere:

if Maggiorenne then è uguale a if Maggiorenne = True then 

e scrivere

if Not Minorenne then è uguale a if Not( Minorenne = True ) then che è a sua volta uguale a
if
Minorenne = False then .

Questo significa che noi possiamo scrivere:

if OpenDialog1.Execute then che equivarrà a if OpenDialog1.Execute = True then .

Ripensandoci, però, sarebbe meglio modificare il nome del componente da “OpenDialog1” a “FileOpenDlg” così che saprete che quel TOpenDialog( questo è il nome della classe ) serve ad aprire files.

Prima di scrivere il gestore di evento per il bottone LoadBtn, selezionate la form e premete F12.
Questo vi riporta sul Code Editor dalla form e se ripremete lo stesso tasto dal Code Editor, tornate alla form.
Comodo, no? Ora andate sul Code Editor e premete Ctrl+PagSu.
Cercate la parola evidenziata “public”. Posizionate il cursore alla fine del commento sulla riga successiva e premete il tasto di invio. Questo è quello che dovreste vedere dopo aver fatto quello che vi ho detto:



Adesso, scrivete “ FileName : String; ”( senza le virgolette, mi raccomando ). Ora guardate come dovrebbe essere venuto(  più o meno ) :

Adesso siamo pronti per scrivere il codice del pulsante LoadBtn. Ecco il codice che andrà inserito, poi insieme lo commenteremo:

procedure TMainFrm.LoadBtnClick(Sender: TObject);
begin
  if OpenDlg.Execute then
  begin
    FileMemo.Lines.LoadFromFile( OpenDlg.FileName );
    FileName := OpenDlg.FileName;
  end;
end;


Bene, osservate questo codice. Noterete la parola if .Nella lingua inglese, “if” vuol dire “se”. Quindi questo implica una “decisione”. Ma cosa si decide? Si decide se eseguire delle istruzioni qualora una certa condizione sia incontrata.
Il codice che è compreso tra “begin” ed “end” sotto l’if sarà eseguito soltanto se il metodo Execute dell’oggetto OpenDlg ritorna un valore TRUE. Ricordate quello che dicemmo riguardo alla “brevità” dei confronti con True?
Ecco, questo è un esempio pratico di quanto sostenevo. Ma quand’è che il metodo Execute ritorna TRUE?

Solo se è stato selezionato un file. Quindi, con la selezione di un file, possiamo caricarlo in memoria ed – eventualmente – modificarlo. Adesso passiamo a comprendere una piccola cosa. Ricordate quando vi ho chiesto di scrivere quella cosa sotto “public”? Bene, quello era un campo della classe. Si dice campo di una classe una “variabile” disponibile nella classe. Vorrei porre l’accento sulle differenze tra “campi” di una classe e “proprietà” di una classe.
Le proprietà di una classe sono più complesse ed è un argpmento che affronteremo in profondità più avanti. La differenza principale, comunque, è che mentre una proprietà può modificare un campo per sua natura, un campo non può modificare una proprietà. Ma è un discorso che vedremo più avanti, come già accennavo più sopra.
Per ora prendetene atto, semplicemente. Veniamo adesso ad un altro punto “particolare” di quel codice.
Mi riferisco alla riga

FileName := OpenDlg.FileName.

Qui vediamo una caratteristica dell’Object Pascal. La sequenza “ := “ serve ad indicare( come in Turbo Pascal ) un’assegnamento. Vale a dire che noi stiamo “dando un valore” ad una variabile( nel caso specifico un campo ).
C’è ancora qualcosina da dire su quella riga. Come vedete ci sono due FileName. Ma sono la stessa cosa? NO !!!! ASSOLUTAMENTE NO ! Il primo, infatti, è un campo della nostra form.. mentre il secondo è una proprietà della classe TOpenDialog.

Ah, a proposito, una piccola digressione. Se non capite qualcosa, qualsiasi cosa anche se vi sembra stupida, non esitate a domandare. Via Email o sul forum. Non vi fate scrupoli,  io sono qui per voi. Intesi? :=)

Ma torniamo a noi. :=)

Dunque, avete notato la coppia “begin…end” sotto l’if? Bene, quando si vuol eseguire più di una istruzione in seguito al verificarsi di una certa condizione, la coppia è necessaria. Tuttavia è buona norma, per “sicurezza”, utilizzarla anche quando c’è una sola istruzione. Perché? Semplice. Perché poi, se bisognerà in seguito aggiungere del codice, dovremo comunque metterla, la coppia suddetta. Quindi tanto vale farlo subito.

Penso che non ci sia più niente da dire su quel codice e direi che può bastare per adesso.
A finirlo non ci siamo riusciti per questa lezione, va beh, succede. Ricordate che anche nella scrittura di programmi non sempre si riescono a rispettare i tempi di consegna, quindi abituatevi all’idea. :=)

Per adesso, arrivederci alla prossima, quando vedremo l’ultimo pezzo di codice del programma e parleremo un po’ meglio dell’if e di altri costrutti utili del linguaggio.
Con questo concludo, ci vediamo alla prossima!

 

Torna all'indice Generale del corso di Corso di Delphi di Software Planet