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) C++Builder 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 Name di default MainMenu1 in MnPrincipale.

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 MnSaluto (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 CmdSaluto e premere il tasto di Invio.

Il click del mouse sulla voce MnSaluto 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 le opportune istruzioni.

A questo scopo C++Builder sostituisce l’ambiente grafico (visual) con l'editor C++ nel quale appare già preformata l’intestazione del metodo di nome CmdSaluto con le graffe di inizio e fine che ne delimitano il corpo.

void __fastcall TFrmSaluto::CmdSaluto(TObject *Sender)
{

}

Il programmatore deve quindi completare il corpo con le opportune istruzioni.

Questo metodo deve svolgere le seguenti operazioni:

Per poter memorizzare un dato è necessario che applicazione prepari in memoria il posto per questo dato e noti l'indirizzo del posto preparato. In C++ questa operazione si effettua con una dichiarazione di variabile.

Una dichiarazione di variabile è composta di due elementi:

Poiché in questo caso il dato da registrare è una sequenza di caratteri alfabetici, bisogna specificare che è di tipo stringa. In C++Builder la parola chiave per specificare questo tipo è AnsiString.

L'identificatore è lasciato alla fantasia del programmatore, ma è bene sia chiaramente autoesplicativo.

void __fastcall TFrmSaluto::CmdSaluto(TObject *Sender)
{
  AnsiString nome_utente;

}

Il metodo deve acquisire il nome dell’utente, chiedendoglielo e registrando la risposta in nome_utente (Input). A questo scopo C++Builder dispone della funzione di libreria InputQuery (Richiesta di input).

bool __fastcall InputQuery(const AnsiString ACaption, const AnsiString APrompt, AnsiString &Value)

Questa funzione richiede tre argomenti: due costanti di tipo stringa (ACaption,  A Prompt) e uno variabile (Value) sempre di tipo stringa. Quest'ultimo argomento deve venir modificato dalla funzione, quindi la funzione non ne deve ricevere il valore ma l'indirizzo. L'operatore che individua l'indirizzo di una variabile è &amp:.

InputQuery produce un valore di tipo booleano, cioè o true o false.

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

void __fastcall ShowMessage(constAnsiString Msg)

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 CmdSaluto di risposta all’evento click sulla voce “Saluto” del menù potrà essere quindi confezionata così:

void __fastcall TFrmSaluto::CmdSaluto(TObject *Sender)
{
  AnsiString nome_utente;
  if (InputQuery("Saluto","Come ti chiami?",nome_utente))
    ShowMessage("Ciao "+nome_utente);
}

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.


prontuario

indietro

Valid XHTML 1.0