CAPITOLO 11

CHIARIMENTI SULLA PROGRAMMAZIONE WINDOWS


PARTE PRIMA: L'oggetto Form.

Tutti i programmi Windows sono costituiti da finestre, come ormai dovreste avere appreso in Delphi le finestre prendono il nome di Form e sono discendenti dell'oggetti TForm.

S09.gif (1558 byte) Ma che metodi e proprietà dispongono le Form?
S09.gif (1558 byte) Come si fa a richiamare una seconda Form?
S09.gif (1558 byte) Come si agganciano i menu standard di Windows?
S09.gif (1558 byte) E i pop-up menu richiamabili con il tasto destro del mouse?

Queste sono le domande che verranno trattate in questo capitolo.


Supponiamo ad esempio di voler creare una finestra contenente un Menu tramite il quale sia possibile richiamare una seconda finestra. Il primo passo sarà ovviamente creare un nuovo progetto dal vostro compilatore preferito (Delphi, of course). Fatto questo aggiungeremo un TMainMenu dalla palette degli strumenti.
La vostra Form dovrebbe avere ora un componente simile a questo p11img1.gif (164 byte) Cliccate quindi sulla proprietà Items dell'oggetto MainMenu1 (ovviamente da Object Inspector), Il risultato è una finestra simile alla seguente

p11img2.gif (17141 byte)

Sarà bene familiarizzare da subito con questo editor, è da qui che si creano e modificano menu.
Nell'Object Inspector inseriremo ora come caption '&File' e nome mnuFile, vi chiederete ora che oggetto stiamo modificando, la risposta è nessuno! Abbiamo appena creato un nuovo oggetto, un TMenuLine (line di menu), Si noti anche che il carattere '&' è divenuto nell'editor un segno di sottolineatura. Inseriamo un nuova line di menu cliccando sul campo vuoto sottostante il menu File, precisamente inseriremo una linea 'About' (nome oggetto mnuAbout) una linea '-' nome oggetto mnuN1 e una linea 'Exit' (mnuExit). Per capirci il risultato dovrebbe essere come segue:

p11img3.gif (9048 byte)

Chiudiamo quindi la finestra con titolo Form1.MainMenu1 (l'editor insomma), il risultato sarà una form con un Menu(!)
Abbiamo quindi creato un componente Windows senza digitare una sola linea di codice (e poi parlano di C) ma in maniera del tutto RAD (o Visuale, a dir si voglia).


Il secondo passo di questa lezione consisterà nel creare una seconda Form richiamabile dal menu About, per fare ciò scegliere new dal menu File di Delphi e dalla Dialog scegliere Form.
Verrà quindi aperta una seconda Form di nome Form2 (che fantasia sti progettisti di Delphi...) che provvederemo a rinominare (tramite Object Inspector, ma vi devo sempre dire tutto?) in frmAbout.
Inseriamo quindi nella form un TCalendar prelevabile dalla palette Sample di Delphi e settiamo la proprietà Align di Calendar1 a alClient, così facendo l'oggetto calendar1 sarà autoresizeble (concedetemi il termine.
L'ultimo passo sarà rendere attivo il menu About, per fare questo richiamiamo la prima Form (Forms dal menu View di Delphi) e clicchiamo sul menu About, si dovrebbe aprire una finestra codice nella quale digiteremo frmAbout.Show;
Nel menu Exit inseriamo invece la riga Form1.Close; avviamo il progetto e se tutto è stato fatto correttamente avremo... un ERROREEEEEEE!!!!!!! (SI AVETE LETTO BENE!!!!!!!).
Per l'esattezza dovrebbe apparire una finestra di conferma come la seguente:

p11img4.gif (3754 byte)

Nella realtà non è stato commesso nessun errore, se ci pensate la variabile di riferimento della TfrmAbout (frmAbout) non è dichiarata nella unit della Form1, basterebbe quindi aggiungere semplicemente il nome del file contenente la classe TfrmAbout nella direttiva uses dalla unit Form1 (spero di essere stato chiaro). Rispondendo quindi yes alla richiesta information Delphi stesso provvederà a correggere questa incongruenza (diavolo di compilatore!), infatti troveremo dopo la direttiva Uses nella sezione implementation il file Unit1. Vi chiederete (almeno spero) perchè non sia stato inserito nella sezione interface, il motivo è presto detto: è la stessa identica cosa.
Aggiungiamo adesso un TPopUpMenu nel form frmAbout e dall'editor Items aggiungiamo la linea BlaBla (Caption BlaBla e name mnuBlaBla), Nell'evento click del menu inseriamo la riga ShowMessage('PopUpMenu');
Ora non resta che assegnare alla proprietà PopUpMenu di Calendar1 l'oggetto PopUpMenu1.
Abbiamo così creato un progetto che visualizza un semplice calendario alla pressione di un menu About (completamente inutile ma funzionante).


Al fine di una più completa conoscenza dell'oggetto TForm provare ad aggiungere nella Form1 un Pannel (palette Standard), settatene caption a nulla e align ad alTop. All'interno del Panel si disponga uno SpeedButton e da Object Inspector si assegni all'evento OnClick l'eveno mnuAboutClick. ATTENZIONE non si deve creare un nuovo evento, ma tramite la drop list selezionare un'evento già presente. Per finire cambiare la proprietà Glyph dello SpeedButton con una bitmap prelevabile dalla cartella images\buttons di Delphi. Abbiamo così creato una barra degli strumenti presente nelle versioni datate di Office.


TIP lampa03.gif (2066 byte)

SOLO PER DELPHI 3.0

Settate a True la proprietà ShowHint dello SpeedButton, aggiungete del testo alla proprietà Hint e cambiate a true la proprietà Flat. Otterete così dei "CoolButton" in stile Office '97 (pulsanti a scomparsa con testo di Help sensibile al passaggio del mouse).


PARTE SECONDA: alcune Tips & Tricks


Altre domande che il principiante programmatore Delphi si pone spesso sono:

S09.gif (1558 byte) Come si manipola l'oggetto Items di una ListBox
S09.gif (1558 byte) Come si ordina una lista di stringhe?
S09.gif (1558 byte) Come si crea un "Hot Key" nell'applicazione?


L'oggetto Items contenuto come proprietà di una ListBox o di una ComboBox è uno dei più potenti oggetti messi a disposizione da Delphi. Tecnicamente è assimilabile all'oggetto TStringList.
I metodi più importanti incapsulati da Items sono:

Punto.gif (924 byte) Add(S: String)
Punto.gif (924 byte) Delete(Index: Integer)
Punto.gif (924 byte) Insert(Index: Integer; S: String)
Punto.gif (924 byte) Clear


Tramite l'insieme items si può facilmente memorizzare e ordinare una lista di stringhe. Settando infine la proprietà Sorted a true la lista di stringhe inserite si ordinetà automaticamente!


Per creare un Hot Key provate il seguente modo:

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
  if (ssCtrl in shift) and (chr(key) in ['A', 'a']) then
    ShowMessage('Ctrl-A');
end;