Form mail



Quello che faremo, in questa sezione, è costruire un modulo per l'invio di un'email dal sito: questo modulo non fa uso di linguaggi esterni, ma invia i dati al client di posta dell'utente, client che poi invierà il messaggio.
Questa soluzione prevede una serie di svantaggi e di vantaggi, che elencherò alla fine: ma rientra in quello che era lo scopo del sito, l'utlizzo (quasi) esclusivo del Flash.
Creiamo un nuovo documento Flash, 700x300, 24 fps: andiamo al menu File/Open As Library, e apriamo come libreria il file flash5.fla. Da questo, trasciniamo nella libreria del nuovo filmato, il movieclip base. Allo stesso modo, apriamo come libreria il filmato testo.fla, dal quale prendiamo il movieclip ombra. Salviamo quindi con il nome contatti.fla

Costruzione

Funzionalità

Il nostro semplice form sarà composto da 4 campi, tutti obbligatori: nome del visitatore, indirizzo email, città di provenienza, corpo del messaggio. Inoltre, avremo due checkbox indipendenti, che serviranno a determinare due opzioni diverse nella risposta. Il riempimento corretto dei campi, sarà verificato da un controllo sui singoli inserimenti.

Struttura

In Flash, tramite il pannello Text Options, si può assegnare ad un campo di testo, sfondo e contorni. Purtroppo questi non possono essere modificati, nel senso che ne esiste un'unica versione: sfondo bianco e contorni neri.
Se quindi vogliamo dare sfondo e contorni differenti, dobbiamo inserire un campo di testo normale in un layer, e nel layer sotto, disegnare un rettangolo con i colori voluti. A questo scopo, noi utilizzeremo il movieclip base.
Innanzitutto, apriamo il file contatti.fla, e creiamo i layer secondo lo schema della figura:

Schema dei layer

Andiamo al layer "sfondi", e posizioniamo sullo stage 4 istanze del movieclip base, con dimensioni e posizioni differenti:

Posizione degli sfondi

Andiamo ora al layer "ombre", e trasciniamo sullo stage due istanze del movieclip ombra per ogni sfondo, posizionandole nei lati superiore e sinistro:

Ombre

Nel layer "titoli" inseriamo, accanto a ciascuno sfondo, il titolo del campo del form, e quindi: "nome", "email", "città", "testo".
Nel layer pulsanti, inseriamo due campi di testo statici, che selezioneremo uno alla volta, e convertiremo, tramite il tasto F8, in movieclip:

Pulsanti

Infine, sempre nello stesso layer, inseriremo accanto allo sfondo che conterrà il corpo del messaggio, due istanze dello stesso movieclip, contenente una freccia.

Frecce per scorrere

Alle due frecce per lo scorrimento, assegniamo uno script già visto:

onClipEvent (load) {
colore = new Color(this);
}
onClipEvent (mouseDown) {
if (this.hitTest(_root._xmouse,_root._ymouse,false)) {
colore.setRGB( 0xFFFFFF );
premuto = true;
}
}
onClipEvent (mouseUp) {
colore.setRGB( 0xFFCC33 );
premuto = false;
}
onClipEvent (enterFrame) {
if (premuto) {
_parent.testo.scroll--;
}
}

nel pulsante per scorrere verso l'alto, e

onClipEvent (load) {
colore = new Color(this);
}
onClipEvent (mouseDown) {
if (this.hitTest(_root._xmouse,_root._ymouse,false)) {
colore.setRGB( 0xFFFFFF );
premuto = true;
}
}
onClipEvent (mouseUp) {
colore.setRGB( 0xFFCC33 );
premuto = false;
}
onClipEvent (enterFrame) {
if (premuto) {
_parent.testo.scroll++;
}
}

per scorrere verso il basso. Quella che viene modificata è la proprietà scroll del campo di testo di input testo, che conterrà il corpo del messaggio inserito dal visitatore. I restanti comandi sono per cambiare il colore della freccia alla pressione del tasto sinistro del mouse (naturalmente, la pressione in assenza di testo, o di testo con un numero di righe inferiore a quelle visibili, non sortirà alcun effetto).

Campi di testo

Nel layer "caselle", inseriamo 4 campi di testi. Questi campi, dovranno essere sovrapposti agli sfondi del layer sottostante, e avere le stesse rispettive dimensioni. Vediamo le caratteristiche di ogni campo:

Tutti e quattro i campi di testo hanno le stesse impostazioni in relazione ai caratteri. Come Font, scegliamo il _sans (nessun peso aggiuntivo perchè carattere dispositivo), come dimensioni 10, e come colore il nero.

Caratteri

Per quanto riguarda l'allineamento, i quattro campi sono uguali: a sinistra.

Paragrafo

Nel pannello "Opzioni del Testo", scegliamo Input Text dal menu. I primi tre campi (nome, email, città), saranno impostati come linea singola, mentre il campo testo come Multilinea. Nel campo variabile, a seconda dei casi, inseriremo le variabili già elencate. Nel campo Max Chars, il numero massimo di caratteri: per i primi tre, una trentina al massimo. Per il testo, anche un migliaio.

Opzioni del testo

Oltre a questi quattro campi, ne inseriamo un altro appena sotto i pulsanti per l'invio. Questa volta si tratterà di un campo di testo dinamico, e non di input: la variabile associata sarà out.

I checkbox

Costruiamo adesso il movieclip che fungerà da checkbox, e che useremo due volte all'interno del form.
Clicchiamo sul + in basso a sinistra nel pannello libreria, e aggiungiamo un movieclip che chiameremo checkboxin. All'interno di questo movieclip, creiamo tre layer: il primo in alto lo chiameremo "tick", il secondo "testo", il terzo "casella". Nel layer "casella", trasciniamo dalla libreria un'istanza del movieclip base, che ridimensioniamo a 10 pixel per 10, e che posizioniamo al centro dello stage. Nel layer "testo", inseriamo un campo di testo dinamico a singola linea: il colore del carattere è indifferente, la variabile associata è _parent.scelta (cioè il nome di istanza del movieclip che conterrà checkboxin).
Nel secondo frame del layer "tick" (il primo resterà vuoto), inseriamo un'istanza del movieclip tick, contenente il simbolo di spunta in grigio, e centrata sul movieclip base nel layer "casella". Nel terzo frame, un'altra istanza del movieclip tick, questa volta tinta, tramite il pannello effetti, di nero. Quello che otterremo sarà questo:

Secondo frame del movieclip checkboxin

Secondo frame

Terzo frame del movieclip checkboxin

Terzo frame

Andiamo alla timeline principale, e trasciniamo un'istanza del movieclip checkboxin sullo stage. Le assegniamo come nome di istanza interno, e associamo questo script:

onClipEvent(load){
_root[_parent._name+"1"] = _parent.scelta+": no"
stop();
}
onClipEvent(mouseMove){
if(this.hitTest(_root._xmouse,_root._ymouse,false)){
sopra = true;
}else{
sopra = false;
}
}
onClipEvent(mouseDown){
if(sopra){
premuto = true;
this.gotoAndStop(2);
}
}
onClipEvent(mouseUp){
if(premuto){
if(sopra){
if (!aperto) {
this.gotoAndStop (3);
_root[_parent._name+"1"] = scelta + ": si";
} else {
this.gotoAndStop (1);
_root[_parent._name+"1"] = scelta + ": no";
}
aperto = !aperto;
}else{
if (!aperto) {
this.gotoAndStop (1);
} else {
this.gotoAndStop (3);
}
}
}
premuto = false;
}

Selezioniamo il movieclip sullo stage, e premiamo F8: lo convertiamo in un altro movieclip, che chiameremo checkboxout.
Traciniamo sullo stage, dalla libreria, un'altra istanza di questo nuovo movieclip: alla prima, come nome di istanza, diamo messaggio, alla seconda, materiale.
Alla prima associamo:

onClipEvent (load) {
scelta = "Messaggio di conferma";
}

alla seconda:

onClipEvent (load) {
scelta = "Invio del materiale";
}

Vediamo di fare un po' d'ordine.
Nei due movieclip che fungono da checkbox, con quest'ultimo script, abbiamo settato la variabile scelta, diversa per ognuno.
Con lo script associato al movieclip interno, invece, settiamo una variabile sulla timeline principale, che ci indica se la scelta è per il si, o per il no (no di default). Vediamo i casi per uno dei due movieclip:

// al caricamento del movieclip
onClipEvent(load){
// sulla root setta la variabile uguale al nome del
// movieclip che contiene questo, più il numero 1, con
// il valore di scelta , più ": no".
// quindi se il movieclip si chiama "messaggio", e
// scelta è "messaggio di conferma", sulla root
// troveremo: messaggio1 = "Messaggio di conferma: no"
_root[_parent._name+"1"] = _parent.scelta+": no"
stop();
}
// script già visto per stabilire se si è sopra il
// movieclip con il puntatore del mouse
onClipEvent(mouseMove){
if(this.hitTest(_root._xmouse,_root._ymouse,false)){
sopra = true;
}else{
sopra = false;
}
}
// alla pressione sul movieclip, questo va al frame 2
// di checkboxin, dove c'è il tick grigio
onClipEvent(mouseDown){
if(sopra){
premuto = true;
this.gotoAndStop(2);
}
}
// al rilascio del pulsante sinistro del mouse
onClipEvent(mouseUp){
if(premuto){
// se siamo ancora sul movieclip
if(sopra){
// se la casella era deticcata, la ticchiamo
// andando al frame 3, dove c'è il tick nero
if (!aperto) {
this.gotoAndStop (3);
// e settiamo: messaggio1="Messaggio di conferma: si"
_root[_parent._name+"1"] = scelta + ": si";
// altrimenti
} else {
// deticchiamo la casella andando al frame 1
this.gotoAndStop (1);
// e settiamo: messaggio1="Messaggio di conferma: no"
_root[_parent._name+"1"] = scelta + ": no";
}
aperto = !aperto;
// altrimenti (abbiamo rilasciato fuori dal moveiclip)
}else{
if (!aperto) {
// se il pulsante era aperto, vai al frame 1
this.gotoAndStop (1);
// altrimenti vai al frame 2
} else {
this.gotoAndStop (3);
}
}
}
premuto = false;
}

Gran parte di questo script potrebbe sembrare, per così dire, inutile. A parte il codice per settare la variabile sulla root che ci dice se inviare o no il messaggio di conferma, tutto il resto serve a far assomigliare il checkbox a quello di Windows. Infatti, in quello di Windows, il tick passa per un colore intermedio, prima di cambiare stato, e rimane di quel colore per tutta la durata della pressione. Inoltre, rilasciando fuori dal checkbox, questo ritorna allo stato precedente.

Pulsante "ripristina"

Andiamo al layer dove è contenuto il movieclip con la scritta "ripristina". Questo, una volta premuto, dovrà resettare il contenuto di tutti i campi di testo. Gli associamo:

onClipEvent (load) {
colore = new Color(this);
}
onClipEvent(mouseMove){
if(this.hitTest(_root._xmouse,_root._ymouse,false)) {
colore.setRGB(0xFFCC33);
sopra = true;
}else{
colore.setRGB(0xFFFFFF);
sopra = false;
}
}
onClipEvent (mouseDown) {
if (sopra) {
_parent.out = "";
_parent.testo = "";
_parent.nome = "";
_parent.citta = "";
_parent.mail = "";
_parent.messaggio.interno.aperto = false;
_parent.materiale.interno.aperto = false;
_parent.messaggio.interno.gotoAndStop(1);
_parent.materiale.interno.gotoAndStop(1);
_parent.materiale1 = _parent.materiale.interno.scelta + ": no";
_parent.messaggio1 = _parent.messaggio.interno.scelta + ": no";
}
}

Quello che fa questo script, non è altro che svuotare i campi di testo presenti nella root. Per essere più precisi, con _parent.testo = ""; inseriamo nella casella testo, una stringa che non contiene alcun carattere.
Inoltre, questo pulsante deve anche resettare i checkbox. Quindi setta in entrambi la variabile aperto come falsa (serve a stabilire se siamo sul frame 1 o 3) , rimanda entrambi al frame 1 (dove non è presente il tick nella casella), e setta nella root entrambe le variabili d'opzione sul no.

Pulsante "invia"

Associamo al movieclip con la scritta "invia":

onClipEvent (load) {
colore = new Color(this);
}
onClipEvent(mouseMove){
if(this.hitTest(_root._xmouse,_root._ymouse,false)) {
colore.setRGB(0xFFCC33);
sopra = true;
}else{
colore.setRGB(0xFFFFFF);
sopra = false;
}
}
onClipEvent (mouseDown) {
if (sopra) {
_parent.convalida();
}
}

Il contenuto importante dello script, è quello assoggettato al mouseDown. Se il puntatore del mouse è sopra il movieclip, e viene premuto il tasto sinistro del mouse, allora viene richiamata la funzione convalida, definita a livello della _root.

Ultimi articoli Flash

Un progetto Flex/Java EE con Eclipse

Sviluppare una Web application con front-end in tecnologia Flex e...

Creare l'effetto Time Machine di Leopard in Actionscript 3.0

Come sviluppare un effetto grafico per visualizzare le foto come il...

Sviluppare un'applicazione per iPhone con Flash Builder

Sviluppare applicazioni per iPhone e iPad con Flash Builder e Flex SDK

Sviluppare interfacce fluide con Flash Builder

Sviluppare un'interfaccia che adatti automaticamente i contenuti in...

Sviluppare applicazioni mobile con Flash Builder

Come sviluppare applicazioni mobile con Flash Builder e Flex SDK

Altri articoli

Guide Flash

Guida FlashDevelop

Installare e usare FlashDevelop, potente ambiente di sviluppo open...

Guida Flash Builder 4

Un percorso alla scoperta delle potenzialità più importanti...

Guida Papervision3D

Un percorso pratico alla scoperta di uno dei framework 3D più...

Altre guide

Newsletter @Flash

Ogni martedì, guide, articoli, FAQ, movie, audio su Macromedia Flash e Actionscript direttamente nella tua casella di posta

Iscriviti alla newsletter

Altre newsletter

Corsi in aula

Corso Google AdWords Base

25 Giugno 2012 a Milano
Disponibilità: 7 Posti

Corso Google AdWords Base

05 Giugno 2012 a Roma
Disponibilità: 7 Posti