Web Explorer

{progetto 9}


In questo capitolo sfrutteremo la proprietà di salvataggio che hanno i componenti che mostrano del testo e con questa scusa utilizzeremo anche un altro potente componente di Delphi. Creiamo un nuovo progetto e salviamolo con il nome “WebNetExplorer”, come nel precedente esempio diamo lo stesso nome alla unit principale e alla barra del titolo in alto. Impostiamo la proprietà WindowState su wsMaximized e posizioniamo sulla form un componente Panel che allineeremo su “alTop”, fatelo diventare invisibile (lo abbiamo visto nel progetto precedente) e cancellate la sua Caption. Inseriamo in questo pannello a partire da sinistra due pulsanti, più altri due più piccoli, così:

 

 

A seguire mettiamo il componente “TComboBox” che fa parte dello stesso gruppo del pulsante, agganciamo il suo lato destro agendo sulla sua proprietà Anchors. Nella parte centrale della form inseriamo il componente che ci permetterà come per magia di visualizzare le pagine web, si chiama “TWebBrowser” e lo trovate nella sezione “Internet”.

 

 

Modificate l’allineamento facendo in modo che occupi tutto lo spazio rimanente (proprietà Align su alClient), così occuperà quasi tutto lo schermo.

La barra degli indirizzi è in realtà una lista a discesa che mostra una serie di righe in formato testo con la possibilità anche di scriverne del nostro. Come il componente Memo e ListBox visti prima, anche questo possiede una proprietà oggetto di tipo TStrings ed è Items. Quindi useremo questa per memorizzare gli indirizzi e per salvarli in un file. Cancelliamo il testo di default (ComboBox1) e scriviamo nell’evento “onKeyPress” il codice che invia a WebBrowser l’indirizzo inserito:


PROCEDURE TFormWebNet.GoUrl(IndUrl : String);

BEGIN

WebBrowser1.Navigate(IndUrl);

END;


procedure TFormWebNet.ComboBox1KeyPress(Sender: TObject; var Key: Char);

begin

If Key=#13 Then

Begin

Key := #0;//per togliere il fastidioso beep

GoUrl(ComboBox1.Text);

End;

end;

Key è la variabile passata dall’evento e contiene il codice ASCHI del carattere premuto, il 13 corrisponde a “Invio” e il simbolo cancelletto “#” davanti al numero ci dice che parliamo di un carattere ASCHI è non di un numero. Per maggiori dettagli riguardo alla simbologia ASCHI riferirsi al manuale, si ricorda comunque che il range di questa tabella va da 0 a 255.

Come si può vedere allora la prima cosa che si fa è controllare che il tasto premuto sia invio (#13), dopo la verifica si annulla la variabile Key (Key := #0) altrimenti il sistema suona un bip. La riga seguente è quella che visualizza la pagina web, rimandando il codice a una nostra procedura privata di nome “GoUrl”.

WebBrowser è un componente molto potente e la procedura Navigate è una delle tante ma non tutte sono attive per la versione Turbo di Delphi, non ci possono mica regalare tutto! Comunque, il comando è molto semplice basta passare alla procedura l’url e il gioco è fatto. Tutto qui, se provate a runtime e se la connessione a internet è attiva vedrete comparire la pagina web che inserite nell’edit.

Ora dobbiamo fare in modo di salvare nella lista degli indirizzi tutti gli url scritti nella edit, questo lo possiamo fare nello stesso punto dove visualizziamo la pagina:


PROCEDURE TFormWebNet.GoUrl(IndUrl : String);

BEGIN

WebBrowser1.Navigate(IndUrl);

ComboBox1.Items.Add(IndUrl);

END;


La riga evidenziata invia a ComboBox il testo battuto e se fate caso il modo in cui lo facciamo è uguale a quello visto per ListBox, in entrambi i casi infatti Items è un oggetto TStrings. A runtime possiamo vedere che ogni volta che si va su un sito l’indirizzo viene salvato nella lista. Conoscendo ora il modo per visualizzare un indirizzo possiamo implementare il codice anche per il pulsante Home:


procedure TFormWebNet.Button2Click(Sender: TObject);

VAR UrlHome : String;

begin

UrlHome := 'www.micla.it';

GoUrl(UrlHome);

ComboBox1.Text := UrlHome;

end;


La variabile locale contiene l’indirizzo a vostra scelta da identificare come Home, mentre il resto serve per visualizzare il sito e per scrivere nell’edit l’indirizzo che si sta visualizzando.

I pulsanti con le frecce come avrete intuito servono per navigare attraverso gli indirizzi precedenti e successivi, e per fare ciò basta richiamare due semplici procedure del componente WebBrowser:


procedure TFormWebNet.Button3Click(Sender: TObject);

begin

WebBrowser1.GoBack;

end;


procedure TFormWebNet.Button4Click(Sender: TObject);

begin

WebBrowser1.GoForward;

end;


anche in questo caso la semplicità è disarmante, i nome delle procedure si spiegano da soli. Sfogliando le proprietà che questo componente mette a disposizione scopriamo che ne possiede alcune che permettono di sapere il titolo del sito e l’indirizzo reale (alcuni indirizzi sono in realtà dei mirror, in questo caso si viene reindirizzati su quello vero), ma questi dati sono ottenibili solo dopo che la pagina viene caricata. Pertanto cerchiamo negli eventi del componente WebBrowser quello che viene chiamato dopo che ha caricato la pagina e scopriamo che si chiama “onDocumentComplete”.

Qui scriviamo il codice per leggere le due informazioni dette prima:


procedure TFormWebNet.WebBrowser1DocumentComplete(ASender: TObject;

const pDisp: IDispatch; var URL: OleVariant);

begin

ComboBox1.Text := WebBrowser1.LocationURL;//url reale

Caption := 'WebNetExplorer - '+WebBrowser1.LocationName;//titolo

end;


Però dobbiamo fare in modo che all’avvio venga visualizzato la nostra home page, senza che dobbiamo ogni volta premere il pulsante:


procedure TFormWebNet.FormShow(Sender: TObject);

begin

Button2Click(Sender);

end;


Nell’evento onShow della form scriviamo il codice che richiama la procedura associata all’evento onClick del pulsante Home. Con il nome generico “Button2” non si capisce, ma se avessimo dato a “Button2” il nome della sua caption sarebbe risultato sicuramente più intuitivo.

L’ultima cosa da fare ora è salvare la lista degli indirizzi alla chiusura del programma ma per fare questo dobbiamo sapere dove salvarla, ossia sapere il nome del file e la posizione. Per il nome scegliamo quello dell’eseguibile con estensione “.lst” mentre la posizione prendiamo la stessa dove risiede il programma.

 Il nome del file viene usato sia dalla procedura che salva i dati sia da quella che li legge, pertanto è inutile scrivere due volte la stessa cosa. Potremmo creare una procedura oppure scrivere il codice nell’evento onCreate della form, così ricaviamo il nome del file proprio all’inizio dell’avvio del programma. Ecco la procedura:


procedure TFormWebNet.FormCreate(Sender: TObject);

begin

NFlista := ChangeFileExt(Application.ExeName,'.lst');

end;


NFlista è una variabile privata che abbiamo dichiarato nell’oggetto form:

 

 

ChangeFileExt è una funzione di Delphi che mi permette di modificare l’estensione a un nome di file, come primo parametro accetta il nome del file da modificare, mentre il secondo parametro è l’estensione che si vuole dare, molto semplice.

ExeName è una proprietà dell’oggetto Application, di cui abbiamo già parlato, e contiene il nome dell’eseguibile e la posizione dove risiede, quindi ci sono tutte le informazioni che a noi servono. Passando questo dato come primo parametro alla funzione ChangeFileExt si ottiene proprio il nome del file che avevamo prefissato. Se per esempio l’eseguibile si trova in “c:\progetti\ WebNetExplorer.exe” il risultato sarà “c:\progetti\ WebNetExplorer.lst”.

Nell’evento onClose della form scriviamo quindi il codice che ci permette di salvare il contenuto della lista in questo file:


procedure TFormWebNet.FormClose(Sender: TObject; var Action: TCloseAction);

begin

ComboBox1.Items.SaveToFile(NFlista);

end;


questa procedura sovrascrive ogni volta il file aggiornando le informazioni contenute. Nell’evento onCreate invece bisogna inserire il codice per leggerlo:


procedure TFormWebNet.FormCreate(Sender: TObject);

begin

NFlista := ChangeFileExt(Application.ExeName,'.lst');

If FileExists(NFlista) Then

ComboBox1.Items.LoadFromFile(NFlista);

end;


però bisogna effettuare un controllo se il file esiste effettivamente, questo lo fa la funzione FileExists.

Indietro    Guide