Menù. Eventi. Input e output.


 

Un applicazione informatica come quella prodotta con le tecniche descritte nel paragrafo precedente non è molto utile se non è in grado di interagire con l’utente. A questo scopo normalmente un’applicazione è dotata di un menù che presenta la lista delle funzioni che l’applicazione è in grado di svolgere.

Per dotare una TForm di un menù principale (e di altre numerose risorse) Delphi mette a disposizione del programmatore una vasta serie di componenti visivi già pronti per l’uso immediato. Tali componenti sono rappresentati da icone in una barra sottostante alla riga del menù detta “palette” (letteralmente “tavolozza” da cui il pittore attinge i colori per dipingere un quadro). 

La palette è segmentata in tanti sottogruppi contenenti diverse serie di componenti. Il sottogruppo di uso più frequente è quello intestato “Standard”.  Passando lentamente col cursore del mouse sulle icone appare in un riquadro giallo il nome del componente rappresentato.

Si clicchi sull’icona  “MainMenu” e poi si clicchi sul rettangolo della TForm. L’icona viene ricopiata nella TForm e in OI appaiono le proprietà del nuovo componente. Cambiare il Name di default  “MainMenu1” in “M_Principale”. 

Cliccando doppio sull’icona del menù nella TForm si apre l’editor del menù che permette di inserire nel menù le voci (“items”) che lo compongono.

In OI appaiono le proprietà del primo item. Assegnare come Caption “&Saluto”. Il carattere “&” nella Caption di una voce di menù ha lo scopo di segnalare con quale lettera attivare quella voce da tastiera premendo Alt+Lettera.

Guardare la TForm. Appare la Caption immessa, con la S sottolineata. Assegnare come Name “M_Saluto” (Menù Saluto).

Fatto ciò, cliccare sul foglio Events di OI. Nella prima colonna appaiono le denominazioni degli eventi captabili dalla voce di menù. Di fianco a “OnClick” scrivere “CM_Saluto” e premere il tasto di Invio.

Il click del mouse sulla voce “Saluto” del menù è un evento che viene captato dalla TForm. Sta al programmatore specificare come la TForm deve rispondere se si verifica questo evento (OnClick) scrivendo una procedura contenente le istruzioni da eseguire.

A questo scopo Delphi sostituisce l’ambiente grafico (visual) con l’editor Pascal nel quale appare già preformata l’intestazione della procedura di nome “CM_Saluto” con le istruzioni di inizio e fine

procedure CM_Saluto(Sender: TObject);

begin

end;

Il programmatore deve quindi completare la procedura con le opportune istruzioni.

Questa procedura deve svolgere le seguenti operazioni:

Chiedere il nome dell’utente e memorizzarlo.

Se lo riceve, salutarlo.

Per poter memorizzare un dato è necessario anzitutto che l’applicazione prepari in memoria il posto per questo dato. In Pascal questa operazione si effettua inserendo una sezione var (variabili) prima di begin, all’interno della quale specificare tutti i dati da memorizzare durante l’attività della procedura. La specificazione di ogni dato è composta di due parti, identificatore e tipo, separate da due punti.

Poiché in questo caso il dato da registrare è una sequenza di caratteri alfabetici, bisogna specificare che è di tipo String.

procedure CM_Saluto(Sender: TObject);

var
  nome_utente: String;

begin

end;

Per prima cosa la procedura deve acquisire il nome dell’utente, chiedendoglielo e registrando la risposta in nome_utente (Input). A questo scopo Delphi dispone della funzione di libreria InputQuery (Richiesta di input).

function InputQuery(const ACaption, APrompt: string; var Value: string): Boolean;

Questa funzione richiede tre argomenti: due costanti di tipo stringa (Acaption,  A Prompt) e uno variabile (Value) sempre di tipo stringa. Gli argomenti variabili possono essere modificati dall’esecuzione della funzione.

L’esecuzione di InputQuery fa apparire sullo schermo un riquadro con il titolo, la domanda, un campo di scrittura per la risposta e due bottoni: uno di conferma e uno di annullamento. Se l’utente clicca sul bottone di conferma InputQuery è vera, se clicca sul bottone di annullamento InputQuery è falsa.

Se InputQuery è vera, l’applicazione emette un messaggio di saluto, altrimenti non fa nulla.

Il modo più semplice di emettere un messaggio (Output) è dato dalla procedura ShowMessage

procedure ShowMessage(const Msg: string);

ShowMessage richiede come argomento una stringa costante, cioè una sequenza di caratteri nota.

Due o più stringhe possono formarne una sola concatenandole con il segno “+”.

La procedura CM_Saluto di risposta all’evento click sulla voce “Saluto” del menù potrà essere quindi confezionata così:

procedure CM_Saluto(Sender: TObject);

var
  nome_utente: String;

begin
  if InputQuery('SALUTO','Come ti chiami?',nome_utente)
    then
      ShowMessage('Ciao, '+nome_utente)
end;

Si provveda a salvare tutto il nuovo lavoro prodotto. In questo caso è sufficiente File->Save All (oppure un click sull’icona del dischetto) perché i nomi e le collocazioni dei files del progetto sono già stati stabiliti.

Si ricompila il progetto: Project->Build Saluto.

Si lanci l’eseguibile prodotto: Run->Run e si sperimenti l risultato ottenuto.