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 allutente la possibilità di scegliere il file da caricare
e, successivamente, salvarlo.
Per dare la possibilità allutente 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 lapplicazione, vero?
Non so voi, ma io lo sono !
Vi ricordate quello che avete fatto per aggiungere allapplicazione
un modo per uscire? Bene, rifate lo stesso per il pulsante Load.
Bene, adesso sinizia 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 lOpenDialog.
Quello dellOpenDialog 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 ).
LObject 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 lif sarà eseguito soltanto se il metodo Execute
delloggetto 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 laccento 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 dellObject Pascal. La sequenza
:= serve ad indicare( come in Turbo Pascal ) unassegnamento.
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
lif? 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 allidea.
:=)
Per adesso, arrivederci alla prossima, quando vedremo lultimo
pezzo di codice del programma e parleremo un po meglio dellif
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