Guida A Livecode
Introduzione
Livecode e' un linguaggio di programmazione completo di grafica, open source e gratuito, per:
- Windows
- Linux
- MacOS
- Android
- iOS
- Raspberry PI
- Kindle
si puo' scaricare da http://livecode.com/download/ .
Questo nuovissimo linguaggio di programmazione, che con pochissime righe di codice vi permette di creare programmi e APP completi e con una bellissima interfaccia grafica, fino a poco tempo fa ogni licenza costava $ 500, ma ora e' gratuito e opensource!.
Guardate questo video di esempio:
⚠ (:youtube 3AbV4Evqy8E:)
Aggiornamenti
Visto che questa e' una guida generale se volete avere più informazioni vi consiglio di seguire il mio blog:
Altri siti
Potete vedere altre fonti su livecode come:
- http://livecodeitalia.blogspot.it/
- http://livecodeitalia.freeforums.org/
- http://lessons.runrev.com
- http://livecode.com sito principale
- http://livecode.wikia.com wiki
- http://forums.livecode.com forum
- http://livecode.com/store/ download
- http://docs.runrev.com/ dizionario
- http://revonline.runrev.com/ esempi
- http://livecode.com/community/newsletters articoli della newsletter
- https://github.com/runrev/livecode LiveCode source code
- http://quality.runrev.com/ BugTracker
- https://plus.google.com/u/0/communities/109731058120269230218 G+
- http://livecode.byu.edu/ Sito di appassionati
- http://www.amazon.com/LiveCode-Mobile-Development-Beginners-Guide/dp/1849692483/ref=sr_1_1?s=books&ie=UTF8&qid=1366681870&sr=1-1&keywords=livecode libro per svilupare app
Requisisti di sistema
Le applicazioni create con Livecode hanno requisiti molto bassi, mentre il software Livecode per crearli ha i seguenti requisiti:
- monitor almeno 1024x768
- 256Mb di RAM
- 150Mb di spazio libero sull'hard-disk
Windows
Per Windows Livecode funziona con almeno:
- Windows 2000 SP4
- Windows XP SP2
- Windows Server 2003
- Windows Vista SP1 (sia 32-bit sia 64-bit)
- Windows 7 (sia 32-bit sia 64-bit)
- Windows Server 2008
Installate QuickTime 7 o successivo per avere accesso alle funzioni multimediali (musica, video, ecc.)
Linux
Pe Linux basta una qualunque moderna distribuzione (da Ubuntu 7 in poi), in particolare i requisiti minimi sono:
- versione 32-bit, o a 64-bit con la compatibilita' a 32 bit (ormai quasi tutte ce l'hanno)
- kernel 2.4.x o superiore
- glibc 2.3.2 o superiore
- gcc 4.9
- X11R5 o superiore
- componenti opzionali:
- compositing window manager (optional - required for alpha-blended window shapes)
- gtk/gdk/glib (optional - required for native theme support)
- pango/xft (optional - required for pdf printing, anti-aliased text and unicode font support)
- lcms (optional - required for color profile support in JPEGs and PNGs)
- gksu (optional - required for elevate process support)
- mplayer (optional - required for video playback)
- esd (optional - required for audio playback)
Ho fatto anche dei pacchetti di installazione scaricabili da qui: https://www.maxvessi.net/livecode/linux/index.php
Mac OS X
Funziona su:
- 10.3.9 (Panther) on PowerPC
- 10.4.11 (Tiger) on Intel and PowerPC
- 10.5.8 e superiori (Leopard) on Intel and PowerPC
- 10.6.x (Snow Leopard) on Intel
Licenze
Come gia' detto Livecode e' gratuito, ma la versione gratuita non permette di chiudere il codice e renderlo illeggibile (closed source).
Se siete uno sviluppatore che vuole rendere il proprio codice inaccessibile, e' possibile comprare la versione "commercial. Dopo aver immesso la chiave della licenza del programma, Livecode diventera' COMMERCIAL, scaduta la licenza Livecode poi tornera' COMMUNITY. Questo non vuol dire che i vostri programmi durino solo un anno o meno, i vostri programmi creati con Livecode COMMERCIAL saranno sempre closed source. Il termine della licenza influenza solo l'ambiente di sviluppo per creare nuovi programmi o nuove versioni del programma.
Per le aziende e infrastrutture molto grandi, che hanno bisogno di supporto telefonico, corsi specifici e soluzioni in 24 ore e' possibile acquistare licenze dai costi piu' alti che garantiscono del personale dedicato per 12 mesi.
Elenco licenze
Ecco un elenco aggiornato delle Licenze (Settembre 2015):
- Community: è gratuita permette di ottenere programmi con licenza GPL per Windows, Linux, Mac e Android. (iOS non permette programmi pienamente GPL)
- Indy: costa € 55 al mese, permette di ottenere programmi commerciali per Windows, Linux, Mac, Android e iOS. Il codice può essere chiuso.
- Business: costa $ 188 al mese. E' obbligatoria se si guadagna più di $ 500'000 all'anno con Livecode (Si, c'è gente che guadagna così tanto programmando con Livecode). Vi da' accesso ad un forum riservato.
L'elenco delle licenze e qui: https://livecode.com/products/livecode-platform/pricing/
In caso di problemi
C'e' il forum italiano: http://livecodeitalia.freeforums.org/
C'e' il forum in inglese: http://forums.livecode.com , li' troverete molti esperti.
Livecode ha anche un dizionario integrato che potete ritrovare anche qui: http://docs.runrev.com/
Nella peggiore delle ipotesi potete vedere http://support.runrev.com/ o scrivere a support@runrev.com
C'e' il blog italiano: http://livecodeitalia.blogspot.it/
Concetti principali
Dopo aver installato Livecode, avviatelo e andate su File->New Mainstack. Vi apparira' una nuova finestra vuota. L'idea di Livecode e' quella di creare programmi moderni che hanno degli oggetti tipo finestre, pulsanti, grafici, ecc. Dentro ogni oggetto, che puo' essere la finestra stessa, potete inserire del codice da far eseguire. Il codice e' semplicissimo e molto simile all'inglese parlato.
Mettere gli oggetti nelle finestre e' semplicissimo, basta trascinarli dalla finestra Tool alla finestra del vostro programma, poi potete modificarne l'aspetto, la posizione e inserirci del codice. Il codice si attiverà quando si attiverà l'oggetto che lo contiene. Ad esempio il codice di un pulsante si attivera' quando qualcuno cliccherà su un pulsante.
Infine potete salvarlo e inviarlo così come e' ai vostri amici che hanno Livecode, oppure trasformarlo in un eseguibile che non ha bisogno di Livecode.
Comunque e' possibile realizzare anche programmi senza interfaccia grafica, basta scrivere il codice in un file e inviarlo direttamente all'eseguibile Livecode. Questo metodo e' spesso utilizzato per dialogare direttamente con il webserver Apache.
Esiste addirittura il Livecode webserver.
Modificare e utilizzare
Se siete in Edit mode potete modificare il programma e il suo codice, se siete in Run mode lo state usando. Per passare da un modo all'altro potete:
- premere uno dei due pulsanti in cima alla finestra Tool,
- oppure con CTRL+0 e CTRL+9,
- oppure con Tool -> Browser tool e Tool -> Pointer tool''
In questo modo creare e provare se i programmi funzionano e' immediato! Non c'è nessun lungo tempo di compilazione da aspettare!
Struttura di una applicazione
In Livecode ogni finestra e come un mazzo di carte (stack), una stessa finestra puo' contenere diverse carte (card). Ogni carta e' una sorta di sottofinestra che contiene tutti gli oggetti che sono mostrati in quel momento. Quindi un programma puo' avere una o piu' finestre (mazzi o stack) e ogni finestra puo' cambiare completamente il suo aspetto semplicemente cambiano la carta che mostra.
All'inizio può sembrare complicato, ma in realta' questo sistema e' molto semplice ed anche molto utile.
Per iniziare, fate programmi dove ogni finestra contiene una sola "carta", poi dopo capirete perche' e' utile avere anche piu' carte disponibili in una finestra.
Il mazzo di carte che contiene tutti gli altri mazzi si chiama Mainstack, mentre tutti gli altri mazzi si chiamano ovviamente Substack.
All'interno delle carte mettete tutti gli oggetti che vi aggradano, ma se vi serve di agire su piu' oggetti insieme, li potete raggruppare in gruppi (group).
Livecode salva il vostro programma, anche se composto da tante finestre, sempre in un unico file.
Database
Si possono memorizzare molti dati in Livecode, ma potete anche usare i database. Livecode incorpora SQLite3 e si puo' interfacciare con:
- MySQL
- Oracle
- PostgreSQL
- Valentina
- qualunque database che accetti una connessione ODBC
Livecode IDE
Livecode e' anche uno strumento integrato per sviluppare software:
Lo strumento Application browser, che trovate in Tools->Applicatio browser, vi permette di scorrere facilmente attraverso tutti gli elementi del vostro programma.
Menu bar
Il menubar contiene tutta una serie di menu e pulsanti per programmare in Livecode. Non sembra, ma e' il vero cuore di Livecode.
File
Il File menu ha tutta una serie di voci per l'apertura e il salvataggio dei file, l'esportazione del programma in formati nativi di altri sistemi operativi.
Qui di seguito vi spiego i comandi principali:
- New Main Stack: crea un nuovo programma da zero
- New Sub stack: crea una nuova finestra (sotto mazzo)
- Save Salva il file. Ricordate che Livecode non ha il salvataggio automatico, quindi salvate spesso e fate copie di backup.
- Stand alone application settings: questa voce e' molto importante, da qui potete impostare per quali sistemi operativi ottenere l'eseguibile autonomo, con quali impostazioni e molto altro.
- Save as Stand alone application: questo e' il comando per ottenere gli eseguibili per i diversi sistemi operativi. In questo modo non c'e' bisogno di installare Livecode per farli girare.
Edit
Qui trovati le classiche voci Undo, Copia, Taglia e Incolla. Inoltre trovate Prefrences per impostare le vostre preferenze, io vi raccomando caldamente di levare la spunta dalla voce Livecode elementes UI appears in list of stack. In questo modo non modificherete Livecode e vi concentrerete solo sul vostro programma!
Un'altra funzione utile e' il Replicate, vi mette tante copie dell'oggetto selezionato a seguendo i parametriche impostate:
Tools
Qui potete passare da Run mode a Edit mode, usando Browser tool e Pointer tool. Inoltre potete lanciare il Application browser, per vedere e controllare tutti gli elementi del nostro programma, o il Project browser (che e' la stessa cosa ma con l'anteprima):
Qui trovate anche Message box, altro non e' che un terminale per provare righe di codice, o dove avere un output usando la parola put:
Un altro strumento molto utile in questo menu e' il Menu Builder, che vi permettedi creare quelle barre dei menu tanto comode (come "File, Edit, Help"):
Object
Questo menu contiene tutti una serie di comandi che e' molto piu' utile lanciare attraverso il tasto destro del mouse.
Text
Qui trovate tutta una serie di comandi che troverete negli inspector per le caratteristiche dei Font. L'unico comando che non troverete e' link che vi permette di dare l'aspetto di un link web ad una scritta o parte di essa.
Development
Qui trovate RevOnline, una specie di market totalmente gratuito dove potete prendere o condividere programmi. I vari programmi possono essere votati e commentati in modo da qualificarli meglio:
Inoltre trovate il comodissimo Object Library, un libreria di oggetti e immagini gia' pronte da utilizzare che amplia e completa tutta i comandi che potete inserire nei vostri programmi:
La voce Plugins contiene dei microprogrami per aiutarvi a programmare, dal righello al programma di salvataggio automatico.
Poi avete tutta una serie di strumenti per fare il debug (trovare errori) nei vostri programmi. Se attivate il Script Debug Mode, il programma si blocchera' raggiunto dei breakpoint che inserite nel codice.
Il Message Watcher e' uno strumento per capire cosa fa il vostro programma, fa vedere tutti i messaggi in ordine cronologico: i messaggi sono la serie di eventi di cui il programma si accorge e per cui reagisce:
Un'altra funzione utilissima e' Suspend development tools, che fa sparire tutti gli strumenti di Livecode, in modo da far eseguire il programma senza altri fronzoli.
View
Questo menu contiene tutti gli strumenti per vedere o nascondere determinati oggetti. Il comando piu' importante e' Show invisible objects, che vi permette di vedere anche gli oggetti impostati come invisibili: potrebbe capitarvi di aver impostato come invisibile l'oggetto sbagliato, in questo modo lo recupererete in un attimo.
Window
Questo menu contiene la lista delle finestre aperte, e ptete passare da l'una all'altra.
Help
Il menu Help e' tra i piu' utili, contiene tutta una serie di esempi e aiuti per programmare. Tra le varie edizioni di Livecode l'ordine delle voci cambia, ma piu' o meno in questa guida troverete tutto.
Dictionary
E' uno degli strumenti piu' importanti, e' un dizionario che contiene la lista di tutti i comandi, le variabili, le funzioni, gli oggetti di Livecode. Spiega tutto!
Ne esiste anche una versione su internet: http://docs.runrev.com/
Start Center
E' un menu contenente tutta una serie di link utili per chi e' agli inizi:
Altro
Poi ci sono tutta una serie di link per svariati aiuti, dalla newsletter al forum.
Code Editor
L'editor integrato in Livecode e' una della parti piu' importanti per programmare. Colora da solo le parole, indenta correttamente da solo le righe, spiega ogni parola mettendo il cursore su quella parola, elenca tutte le funzioni (o messaggi) della pagina corrente. E' utilissimo!
L'uniche cosa importanti da sapere sono:
- CTRL+S salvate
- di mettere la spunta alla casella Full Document in basso a destra per vedere la documentazione completa di quello che scrivete
- CTRL+F cercate
- premendo il tasto TAB della tastiera si sistema tutto il codice da solo con la giusta indentazione!
Creiamo il nostro primo programma
Apriamo Livecode e clicchiamo su File -> New Main Stack, ottenendo questo:
Ora trasciniamo un pulsante della finestra degli strumenti Tools sulla finestra del nostro programma (che per ora si chiama tristemente Untitled 1, cioe' "senza titolo 1"), ottenendo questo:
Ora clicchiamo con il pulsante destro sul bottone che abbiamo appena messo e clicchiamo sulla voce Edit script del menu che uscira' fuori:
Ora dovrebbe apparirci l'editor e scriviamo il seguente codice:
on mouseUp answer "Funziona! Ha cliccato sul pulsante!" end mouseUp
Bene, salviamo (CTRL+S).
Ora facciamo un piccolo ritocco sul pulsante, clicchiamo sempre con il destro sul nostro pulsante del programma e scegliamo Property Inspector, ci apparira' la seguente finestra:
Scriviamo "Clicca qui..." alla voce Label.
Ora salviamo il programma e proviamo il programma (CTRL+9). Se tutto e' andato per il verso giusto, dovremmo cliccando sul nostro pulsante dovremmo ottenere questo risultato:
Visto quanto e' semplice? Avete scritto solo una riga di codice!!
Nel seguito analizzeremo meglio come fare i programmi
Costruire un'interfaccia grafica
Costruire l'interfaccia grafica e' semplicissimo, basta trascinare gli elementi che vogliamo dalla barra 'Tool' al nostro programma.
In questo capitolo proveremo ad analizzare un po' tutti gli oggetti a disposizione.
La barra degli oggetti, o controlli, è divisa in varie sezioni:
- pulsanti per passare da Run mode a Edit mode
- controlli (pulsanti, campi di testo, ecc.)
- elementi grafici
- disegno a mano libera
Gli ultimi due li potete usare anche per creare disegni, grafici, videogiochi e molto altro. Questi ultimi due hanno dei pulsantini piu' piccoli per controllare spessore linea, colore e tipo di tratto.
Oggetti
Anche se vedete molti oggetti disponibili, molti sono lo stesso tipo con qualche opzione diversa, gli oggetti principali sono:
- bottoni
- campi di testo
- tab panel
- data grid
- scrollbar
- immagini
- player multimediale (per audio e video)
Proprieta'
Cliccando sul tasto destro di un oggetto appare un menu a tendina, scegliendo Property inspector appare il menu delle proprieta':
Qui potete modificare tutto dell'oggetto, colore, dimensioni, posizione, il testo (Content) e tanto altro. Se premete il luccchetto, la finestra non cambiera' anche se selezionate un altro oggetto, questo vi permette di provare vari effetti. Dal primo menu a tendina potete accedere di solito ai seguenti sotto menu:
- basic properties
- icons & border
- colors & patterns
- custom properties
- geometry
- graphic effect
- blending
- property profiles
- size & position
- Text formatting
In seguito entreremo nel dettaglio.
Allineare
Se selezionate piu' di un oggetto alla volta nel menu delle proprieta' apparira' una voce in piu' per l'allineamento e garantire la stessa dimensione agli oggetti. In questo modo la vostra interfaccia grafica avra' uniformita'.
Tipi di finestre (stack)
Le finestre possono essere:
- Top level: sono le finestre normali dei programmi,solo in questa modalita' possono essere modificate. Hanno i soliti pulsanti in alto per chiuderle e ridimensionarle.
- Modeless: non hanno i pulsanti in alto per chiuderle e ridimensionarle. Ricordatevi sempre di aggiungere un modo per chiuderle!
- Palette: per creare menu di aiuto, rimangono a lato della finestra principale ed e' sempre sopra a tutte le altre, non viene mai coperta.
- Modal : si blocca tutto finchè non si chiudono. Non hanno nessun pulsante predefinito, servono per gli avvisi.
Per trasformarla da un modo ad un altro premete SHIFT+CTRL+tasto destro del mouse, vi apparira il menu con la voce Stack mode.
Interfacce gia' pronte
Ask
Il comando ask serve per generare una domanda:
ask "Come ti chiami?"
La parte piu' bella che ha gia' pronta tutta una serie di icone per arricchire di grafica l'interfaccia:
- information
- question
- error
- warning
basta mettere il tipo di icona dopo ask, esempio:
ask information "Come ti chiami?"
la risposta e' sempre memorizzata nella variabile temporanea it
Ask password
La classica interfaccia per chiedere le password, appaiono sullo schermo gli asterischi al posto delle lettere:
ask password "Digitare password"
Ask file
Interfaccia comodissima per richiedere dove salvare un file:
ask file "Dove salvo il file?"
potete anche aggiungere with per specificare un percorso o with filter per specificare un tipo di file:
ask file "Dove si salvo il tuo diario?" with filter "Text file, *.txt"
il formato del filtro prevede una descrizione del file (opzionale) e il tipo di estensione. Se volete indicare piu' tipi di file, inserite il punto e virgola, cosi':
ask file "Dove si salvo il tuo diario?" with filter "*.txt;*.doc;*.odt"
Answer
Il comando answer fa apprire una finestra per inviare messaggi all'utente, contiene gia' il pulsante OK.
answer "Hello"
anche qui possiamo usare le stesse icone di ask:
- information
- question
- error
- warning
la cosa carina e che possiamo mettere piu' pulsanti con testi molto simpatici usando la parola with
answer question "Ti piace Livecode?" with "Poco" OR "Tanto" OR "Tantissimo"
Chiaramente il risultato viene memorizzato nella variabile it.
Answer file
E' la maschera per chiedere quale file aprire o leggere.
Answer folder
Il comando answer folder serve per chiedere una directory, esempio:
answer folder "Quale dierctory contiene i tuoi appunti?"
Answer color
Il comando answer color lancia una finserta per scegliere il colore:
answer color
Il colore scelto va sempre nella variabile it.
Potete anche decidere il colore di partenza con with:
answer color with 125,3,255 answer color with "#FF0033"
per indicare il colore di partenza o usate una tripletta da 0 a 255, che corrispondono alle concentrazioni di rosso, verde e blu; oppure il codice HTML del colore.
Answer printer
Il comando answer printer serve a impostare quale stamapre usare per stampare, comodissimo:
answer printer
Answer page setup
Il comando answer page setup serve per impostare la pagina di stampa e le impostazioni connesse:
answer page setup
Answer effect
Il comando answer effect e' il piu' complesso, permette di selezionare un effetto per il lettore multimediale. Il lettore multimediale predefinito e' Quicktime, ad esso si puo' imporre una serie di effetti:
answer effect
l'effetto scelto sara' memorizzato nell variabile it sotto forma di dati binari e potra' essere usato per creare transizioni molto belle.
Gruppi
I gruppi sono oggetti raggruppati in un gruppo, per esempio i bottoni radio buttons vanno sempre racchiusi in un gruppo in modo che solo uno di loro alla volta si possa scegliere. Il vantaggio dei gruppi che si puo' scrivere uno script del gruppo che influenzi solo gli elementi del gruppo. Il groppo ha delle proprieta' comune a tutti gli oggetti al suo interno, quindi si possono far sparire e riapparire tutti insieme con un solo comando.
Per creare un gruppo basta selezionare piu' oggetti insieme e premere il pulsante Group del file menu, viceversa per annullare un gruppo basta selezionarlo e premere il pulsante Ungroup. Il pulsante Gruop diventa Ungroup quando selezionate un gruppo.
I gruppi possono contenere all'interno altri gruppi.
Un gruppo puo' essere condiviso (shared) con piu' carte.
Un gruppo che deve apparire su tutto le carte, cioe' condiviso su tutte le carte, si chiama background.
Carte
Ogni finestra (stack) contiene all'interno sempre almeno una carta (card). Sono le carte che contengono gli oggetti e i gruppi, Le carte sono numerate automaticamente a partire da 1. E' possibile vedere solo una carta alla volta. Per passare da una carta all'altra basta usare il comando go:
go to card 2
chiaramente si puo' usare il comando go in varie maniere:
go to stack "finestra comandi" go to card 3 of stack "finestra comandi"
Usare piu' carte su una finestra e' comodo anche per stampare, ogni carta e' una pagina da stampare, basta creare una carta per pagina e poi mandare in stampa l'intero stack:
go to card 1 open printing to pdf "./MiaStampaInPDF.pdf" print this stack close printing
Immagini
Le immagini in Livecode possono essere utilizzate facendo riferimento a file esterni o incorporarli nel programma.
Fare riferimento a file esterni e' molto semplice:
- trascinate il simbolo dell'immagine dal tool menu al vostro programma
- aprite le proprieta' dell'immagine
- premete sulla cartellina vicino al campo source indicando dove si trova l'immagine
Per incorporarli e' piu' complicato bisogna andare su File -> Import as Control -> Image File. Cercate sempre di usare immagini della dimensione giusta, sia perche' occupano meno spazio, sia perchè il motore grafico di ridimensionamento non e' il massimo.
Behavior
Il behavior e' una delle funzioni piu' importanti di Livecode. Immaginate di avere tanti oggetti che si devono comportare allo stesso modo, invece di scrivere il codice dentro ognuno di essi, basta prendere un pulsante e infilarci dentro tutto il codice che deve essere eseguito dai nostri oggetti, ed indicare ai nostri di usare il behavior di questo pulsante.Il behavior è l'ultimo campo delle proprieta' Basic properties, nel behavior va sempre inserito il long ID del nostro pulsante contenente tutti i comandi.
Facciamo un esempio:
- creiamo due pulsanti
- chiamiamoli comandante e soldato
- in uno inseriamo nel pulsante comandante un script tipo:
On MouseUp answer the name of me End MouseUp
- digitiamo nella message box
put the long id of me
- copiamo il risultato nel behavior del pulsante soldato
- ora entrambi hanno lo stesso comportamento!
Scrivere il codice
Fino ad ora abbiamo visto cosa si puo' comporre con livecode, ma il codice da scrivere come e'? Da un lato il codice e' molto semplice e molto simile alla lingua inglese, riesce a ottenere processi complessi in poche riche; ma dall'altro per operazioni molto semplici puo' sembrare un po' prolisso.
Ad esempio per inderire il valore 5 nella variabile temp, il codice e':
put 5 into temp
Un'altra differenza rispetto ad altri liguaggi e' che il codice (script) non e' scritto in un singolo file che viene eseguito dall'inizio alla fine, ma il codice deve essere sempre inserito in qualche oggetto che puo' essere lo stack, una carta, un gruppo o un oggetto. Questo perche' ogni azione dell'utente genere un evento, e gli eventi attivano i messaggi, e quindi il codice associato al messaggio verra' eseguito. Puo' sembra complicato, ma un esempio vi fara' capire come sia semplice e logico.
Il messaggio MouseUp si attiva quando l'utente clicca su un oggetto, quindi se scrivo nello script di un bottone:
on MouseUp answer "Hai cliccato" end MouseUp
Cliccando sul pulsante mi fara' apparire un'altra finestra (comando answer) con la scritta "Hai cliccato". Possiamo mettere anche messaggi che richiamano messaggi:
on MouseUp MioMessaggioPersonale end MouseUp on MioMessaggioPersonale answer "Hai cliccato" end MioMessaggioPersonale
Nei prossimi capitoli affronteremo meglio questo concetto. Per ora affrontiamo le basi del linguaggio di programmazione.
Variabili
Le variabili sono contenitori temporanei per i valori, possono essere chiamate con qualsiasi nome che cominci per una lettera, ad esempio: mario, Luigi2, pippo.3, etc. L'importante e che non comincino per "rev", le variabili che cominciano per rev sono riservate, la compagnia che possiede LiveCode si chiama RunRev e ha deciso che tutte le variabili interne iniziano per rev.
Per assegnare un valore ad una variabile, basta usare il comando put
put "testo di esempio" into test
Le variabili non sono visibili al di fuori del messaggio in cui sono scritte, ad esempio:
on MouseUp MioMessaggio answer temp end MouseUp on MioMessaggio put 1 into temp put 1 + temp into temp end MioMessaggio
Vi apparira' "temp" come risultato invece di 2, perche' nel messaggio MouseUp non e' stata indicata nessuna variabile di nome temp e quindi LiveCode la considera direttamente una stringa.
Se volete una variabile che sia visibile da altri messaggi o da altre parti del programma, dovete usare una custom property (proprieta' personalizzata). Che vedremo piu' avanti
Vettori e Matrici
Le variabili di solito contengono solo un valore, ma puo' far comodo che una singola variabile contenga molti valori, come un elenco telefonico, i dati di una tabella, le coordinate dei punti di un grafico, ecc. Per contenere molti valori si possono usare i vettori (matrici modimensionali) e le matrici (matrici multidimensionali). Anche in matematica esistono tantissime funzioni che operano direttamente sulle matrici.
I vettori o matrici monodimensionali sono variabili dove ogni valore dentro la variabile e' contrassegnato da un'etichetta; ad esempio il codice:
put "esempio" into mioVettore["primo"]
inserice il valore esempio dentro la varibile mioVettore, etichettandolo con la parola primo.
Le matrici usano piu' etichette, ad esempio il codice:
put "esempio2" into miaMatrice["primo"]["h"][4]
usa ben tre etichette per indicare dove si trova il valore dentro la variabile.
I dati delle matrici sono sottoforma di dati binari e non possono essere salvati cosi' come sono su disco, bisogna usare le funzioni arrayEncode() e arrayDecode() per trasformarle in una stringa che possa essere salvata o usata esternamente a LiveCode.
Potete svuotare il contenuto di un elemento dentro una matrice inserendo il valore empty, in questo modo l'etichetta rimarra', esempio:
put empty into miaMatrice["primo"]["h"][4]
mentre se volete cancellare anche l'etichetta, bisogna usare delete:
delete variable miaMatrice["primo"]["h"][4]
Le etichette di una matrici si richiamano con la parola key:
put the keys of miaMatrice into ListaEtichette
Potete anche richiamare solo alcune etichette, per esempio solo quelle che hanno gia' una etichetta, in pratica si fa cosi':
put the keys of miaMatrice["primo"] into ListaEtichette
Anche un testo puo' essere convertito in una matrice usando il comando split, questo comando permette anche di indicare cosa interpretare quali caratteri interpretare come separatori per i valori e le etichette. Ad esempio il seguente testo:
A 12 B 13 C 14
puo' essere trasformato in una matrice cosi':
split testo by return and space
a questo punto la variabile testo e' diventata una matrice:
- testo[A] = 12
- testo[B] = 13
- testo[C] = 14
Per trasformare una matrice in un testo, basta usare il comando combine nella stessa maniera di split:
combine testo using return and space
E' anche possibile inserire una matrice dentro una matrice:
put miaMatrice1 into MiaMatrice2["nodo51"]
Funzioni utili con le matrici
Alcune funzioni sono applicabili a tutti gli elementi di una matrice, in questo modo si risparmia tantissimo tempo! Ecco le funzioni piu' utili:
- add somma o sottrae un numero a tutti gli elementi
- multiply moltiplica tutti gli elementi per un numero. Se usato fra due matrici esegue un prodotto matriciale.
- divide divide tutti gli elementi per un numero
- sum fa la somma di tutti gli elementi
- transpose fa la matrice trasposta di quella data
- union unisce due matrici evitando chiavei duplicate, se gia' c'e' una chiave nella prima, non aggiunge nuovamente l'elemento della seconda.
Esempio:
put 25 into myArr[1] put 50 into myArr[2] add 1 to myArr multiply myArr by 3 divide myArr by 2 answer "la somma di tutti gli elementi e': " & return & sum(myArr) combine myArr with return and comma answer "La matrice ora e' composta cosi': " & return & myArr put 25 into myArr[1] put 50 into myArr[2] put 75 into myArr2[2] put 100 into myArr2[3] union myArr with myArr2 combine myArr with return and comma answer "L'unione di due matrici ha dato: " & return & myArr
Proprieta'
Tutti gli oggetti hanno delle proprieta', per esempio visible e' una proprieta' che decide se un oggetto e' visibile o invisibile. Il comando set permette di impostare il valore di una proprieta', ad esempio il seguente codice permette di far diventare invisibile il pulsante "test":
set the visible of button "test" to false
Per prendere il valore di una proprieta' basta usare put:
put the visible of button "test" into temp
Di solito si mette il the davanti alle proprieta' per far capire che sono proprieta', abbellisce il codice e lo rende piu' leggibile.
Proprieta' personalizzate (custom property)
VIsto che le proprieta' sono visibili a tutti, si possono usare come variabili globali. Ogni volta che provate ad assegnare un valore ad un proprieta' che non esiste ad un oggetto, creerete automaticamente una proprieta' personalizzata; altrimenti andrete a modificare una proprieta'.
set the miaproprieta of me to "questo e' un esempio"
Riferimenti
Come abbiamo visto quando si lavora con una proprieta', bisogna sempre indicare a chi si riferisce, possiamo indicare gli oggetti con:
- me: rappresenta l'oggetto in cui si svolge lo script
- this ....: di solito si riferisce a qualcosa in cui l'oggetto corrente e' contenuto, per esempio: this card, this stack, this group
- ID 1234: Livecode numera automaticamente tutti gli oggetti in maniera univoca, ogni oggetto si puo' indicare con un ID seguito dal numero univoco. Personalmente sconsiglio questa tecnica, crea solo molta confusione.
- button "nome": questa tecnica e' la migliore, si specifica il tipo di oggetto e il nome che gli avete dato: field "Esempio"
Commenti
I commenti sono parte di codice che non viene eseguito, serve per chiare al programmatore a cosa serve un comando, esitono molti modi per commentare in LiveCode, ad esempio con il simbolo cancelletto #:
#il seguente messaggio serve per scrivermi on scrivi_a_max revMail "angerangel@gmail.com" #non abusatene! end scrivi_a_max
I commenti si possono fare anche con il doppio meno e se dovete fare un commento molto lungo su piu' linee /* per aprire e */per chiudere, esempio:
#Io sono un commento -- anche io sono un commento /*Io sono un commento molto molto molto lungo*/
I commenti possono essere usati per escludere del codice velocemente.
Messaggi
Come anticipato ogni evento fa scattare un messaggio, per esempio l'avvio di una finestra fa scattare il messaggio OpenStack.
Tutti i messaggi di uno oggetto sono disponibili agli oggetti contenuti in esso: ad esempio i messaggi di una finestra (stack) sono disponibili a tutti i bottoni, testi, immagini, gruppi, carte (card) all'interno della finestra. Quindi se create un messaggio in una finestra, tutti i bottoni di quella finestra potranno chiamarlo.
Viceversa se create un messaggio dentro un bottone, potra' essere chiamato solo dentro a quel bottone.
Se dentro un oggetto chiamate un messaggio con lo stesso nome di un altro, all'interno di quell'oggetto verra' eseguito quel messaggio e non quello del contenente... Ok sembra complicato, ma facciamo un esempio: un carta ha un messaggio che si chiama "test" che fa apparire la scritta "test", se un bottone ha un messaggio che si chiama "test" ma che fa apparire la scritta "test2", premendo il pulsante apparira' "test2".
LivCode legge tutti i messaggi degli oggetti mostrati, se qualche oggetto ha un messaggio attivato da un qualche evento, lo eseguira'. Ad esempio, il codice:
on OpenStack answer "Finestra aperta" end OpenStack
puo' essere messo dentro un qualunque oggetto della finestra (immagini, bottoni, testi, campi...) e quando verra' aperta la finesta apparira' "Finestra aperta".
I messaggi possono avere degli argomenti, ad esempio:
on MouseUp somma 1, 2 somma somma 2 end MouseUp on somma primo,secondo put primo + secondo into temp answer temp end somma
Gli argomenti si separano sempre con la virgola e non sono mai obbligatori.
E' possibile usare messaggi di altri oggetti basta usare send oppure call.
Funzioni
Le funzioni sono come i messaggi, solo che debbono ritornare un risultato. Ad esempio la funzione round() arrotonda al numero intero piu' vicino di quello indicato e si usa così:
answer round(2.7)
ma non potete usare una funzione come un messaggio:
round(2.7) #ERRORE
per creare una funzione il codice e' il seguente:
function miafunzione parametro1 put parametro1 * 3 + 4 into temp return temp end miafunzione
Se non mettete il return il valore di ritorno sara' vuoto (empty).
getProp
Le funzioni getprop si intromettono quando uno richiama una proprieta' (che sia personalizzata o meno). Sono molto utili per attivare una qualche funzione quando viene chiamata una proprieta', ma bisogna indicare sempre il valore di ritorno, altrimenti quella proprieta' risultera' vuota utilizzandola.
Ad esempio:
on MouseUp put the miaprop of me into temp put temp answer temp end MouseUp getprop miaprop answer "attivato" put the miaprop of me into temp return temp end miaprop
SetProp
Similmente a getpropo anche le setprop si intromettono, ma solo quando viene imposto un valore ad una proprieta'. Anche in questo caso intromettendosi interrompo il normale flusso di dati e quindi bisogna inserire nel setprop il comando per cambiare il valore della proprieta' o usare pass, altrimenti non verra' cambiato. Ecco un esempio chiarificatore:
on MouseUp
set the miaprop of me to "Esempio" answer the miaprop of me end MouseUp setprop miaprop parametro1 answer "attivato" set the miaprop of me to parametro1 end miaprop
oppure
on MouseUp set the miaprop of me to "Esempio2" answer the miaprop of me end MouseUp setprop miaprop parametro1 answer "attivato" pass miaprop end miaprop
Passare le variabili per referenza
Quando si scrive un programma di solito si passano le variabili da un messaggio ad un altro per valore, cioe' si copia il contenuto. In altri linguaggi di programmazione si puo' passare anche per referenza, e anche Livecode offre questa possibilita', ma io la sconsiglio fortemente. Passare le variabili per referenza rende il programma piu' difficile da leggere e puo' creare dei risultati assolutamente imprevedibili se si prova a migliorare il codice.
Esempio di variabili passata per valore:
on MouseUp put "Esempio" into temp pervalore temp answer temp end MouseUp on pervalore temp2 put " testo aggiunto" after temp2 end pervalore
esempio variabile passata per referenza:
on MouseUp put "Esempio" into temp pervalore temp answer temp end MouseUp on pervalore @temp2 put " testo aggiunto" after temp2 end pervalore
Come vedete per passare per referenza basta aggiungere una @ davanti alla variabile.
Scelte
In programmazione esistono sistemi di scelte che indicano al programma cosa fare a seconda di certe circostanze. LiveCode non e' da meno. Generalmente la condizion e' il valore di una variabile.
IF... THEN... ELSE
Il ciclo IF (l'italiano se) e' il ciclo di scelta piu' comune a tutti i linguaggi di programmazione. Ecco un esempio in Livecode:
if miaVar is 3 then answer "MiaVar vale 3" else answer "MiaVar non vale 3, chissa' quanto vale?" end if
la condizione da controllare dopo IF puo' essere qualsiasi cosa: a>3, a="pittore", ecc. Else e' opzionale, potete non metterlo.
Switch
Switch si usa per fare una scelta quando i possibili valori di una variabile sono molti e per ognuno bisogna eseguire un'azione diversa.
Ad esempio controlliamo la variabile miaVar':
switch miaVar case 3 answer "miaVar vale 3" break case 4 answer "miaVar vale 4" break default answer "Non ho la piu' pallida idea di quanto valga miaVar" end switch
Come vedete dall'esempio ogni situazione indicata da case e' chiusa dalla parola break; se non si chiude la situazione, tutti i casi successivi sono eseguiti fino ad incontrare un break oppure un end switch. Alla fine si mette la condizione di default, cioe' che viene eseguita se gli altri casi non sono eseguiti.
Il comando break e' comodo, perche' omettendolo si possono costruire strutture di scelta molto articolate, ad esempio:
put 80 into etti_di_pasta switch invitati case 4 add 110 to etti_di_pasta case 3 add 100 to etti_di_pasta case 2 add 90 to etti_di_pasta case 1 add 80 to etti_di_pasta end switch answer "Bisogna usare " & etti_di_pasta & " etti di pasta per " & invitati & " persone invitate"
WHILE
In programmazione la scelta while serve per ripetere una operazione fintanto che una certa condizione e' vera.
Ad esempio:
put 1 into a repeat while a < 5 add 1 to a end repeat put a
mostra come risultato 5.
UNTIL
Il comando until e' utilizzato per smettere di ripetere un'operazione quando una condizione diventa vera, ad esempio:
put 1 into a repeat until a < 5 add 1 to a end repeat put a
mostra come risultato 1. Il ciclo viene completamente ignorato perche' la condizione e' gia' vera.
Al contrario:
put 1 into a repeat until a > 5 add 1 to a end repeat put a
mostra come risultato 6.
Forever
E' il ciclo piu' pericoloso, se non mettete un modo per uscirne entrerete in un ciclo infinito da cui il programma non uscira' piu':
put 0 into myVar repeat forever add 1 to myVar if myVar = 10 then exit repeat end if end repeat
Ripetere n volte
Potete usare repeat per ripetere un numero di volte una determinata operazione, esempio:
put 0 into myVar repeat for 10 times answer myVar add 1 to myVar end repeat
Repeat WITH
E' una forma per utilizzare una variabile che tenga conto del numero di ciclo, e' molto personalizzabile questa forma, ad esempio:
repeat with myVar=21 to 32 answer myVar end repeat
vi mostrera' tutti i numeri da 21 a 32.
Mentre indicando l'incremento (step) potete fare:
repeat with myVar=21 to 32 step 5 answer myVar end repeat
questo esempio mostra 21, 26, 31 e 36!!! Questo perche' a 31 non ha raggiunto la fine ed esegue un altro ciclo!
si può anche andare all'indietro:
repeat with myVar=21 down to 1 step -3 answer myVar end repeat
FOR EACH
La forma con for each consente di sfruttare testi, liste o matrici (array).
Vediamo un testo formato da item (di solito gli item sono separati dalla virgola):
put "red,green,blue" into myVar repeat for each item temp in myVar answer temp end repeat
vediamo ora come ripetere una operazione per ogni riga
put "Prima riga" & return & "Seconda riga" into myVar repeat for each line temp in myVar
answer temp
end repeat
vediamo ora con le matrici:
put 15 into myVar["Mario"] put 24 into myVar["Luigi"] repeat for each element temp in myVar answer temp end repeat
il risultato sara': 15 e poi 24.
Programmi temporizzati
Generalmente un programma esegue tutto il suo codice nel minore tempo possibile, senza interruzioni. In alcune situazioni puo' essere utile aspettare un certo lasso di tempo fra un evento ed un altro, oppure ripetere un messaggio di sveglia ogni cinque minuti.
Per esempio se vogliamo mandare un messaggio tra un po':
send "updateStatus" to me in 20 seconds send "updateAnimation" to me in 33 milliseconds
come vedete si puo' specificare il tempo in secondi o millisecondi
Per ripetere un messaggio ad intervalli di tempo, basta scrivere in un messaggio di rinviarsi tra un po':
on MessaggioRipetuto answer "Va tutto bene" send MessaggioRipetuto to me in 30 seconds end MessaggioRipetuto
State attenti che in quest'ultimo caso, se non mettete qualcosa che interrompa il ciclo rischiate di entrate in un ciclo infinito. Esiste anche un'altra possibilita' per evitare i cicli infiniti, cancellare il messaggio, ma è piu' complicato e se mettete intervalli di tempo troppo brevi diventa quasi impossibile.
Vediamo come cancellare un messaggio temporizzato: ogni volta che un messaggio e' nella lista da inviare ha un identificativo unico che viene copiato nella variabile di sistema result. La variabile result contiene sempre il risultato dell'ultima operazione effettuata. Quindi per cancellare un messaggio basta memorizzare da qualche parte l'ID del messaggio e poi indicare al comando cancel l'ID del messaggio da cancellare, esempio:
on EventoRipetuto answer "Messaggio ripetuto" send EventoRipetuto to me in 10 seconds set the idmessaggio of me to the result end EventoRipetuto on cancellamessaggio put the idmessaggio of me to IDmex cancel IDmex end cancellamessaggio
E' anche possibile visualizzare la lista di tutti i messaggi che sono stati temporizzati e che verranno lanciati nel futuro con la funzione 'thependingMessages, esempio:
put the pendingMessages into messaggiCheVerrannoLanciati
ogni linea e' un messaggio che verra' lanciato, contenente varie informazioni tipo:
69,1387277697.442,MouseUp,stack "C:/Programmi/RunRev/LiveCode Community 6.5/Toolset/revmessagebox.rev"
Il primo numero (69) e' l'ID per cancellarlo, il secondo e' la data nel formato UNIX date che (1387277697.442) che in questo questo caso rappresenta Tue, 17 Dec 2013 11:00:33 GMT; per finire abbiamo il messaggio da mandare e a quale stack.
Potete visualizzarli facilmente dalla message box , premendo il quinto pulsante (quello con la busta e il numero):
Manipolazione del testo
Un capitolo a parte merita la manipolazione del testo, Livecode puo' eseguire facilmente i compiti piu' impegnativi in questo campo.
Prima di tutto chiariamo quello che in Livecode si chiamano chunk expression, ovvero "pezzi di espressione". Nonostante possiate usare le espressioni regolari (regular expression o regex), Livecode vi permette di estrapolare o cercare dei testi utilizzando una sintassi molto semplice. I tipi di pezzi sono i seguenti:
- char (lettera)
- word (parola)
- line (linea)
- item (oggetto)
- token (gettone)
Per esempio se volete la prima lettera di una frase, potete scrivere cosi':
put the first char of "Una frase di esempio"
oppure
put char 1 of "Una frase di esempio"
Lo stesso vale per le parole (word) e le linee (line).
Le lettere sono tutti i caratteri, sia stampabili che non stampabili.
Le parole sono identificati da insiemi di lettere separate da spazi, tabulazioni, o interruzioni di linea.
le linee sono identificati da interruzioni di linea, potete impostare diversamente la proprieta' lineDelimiter per secegliere un altro carattere che identifichi la separazioni tra le linee, ma io ve lo sconsiglio.
Gli item sono parole separate da virgola o da un altro carattere che potete specificare, ad esempio:
put item 2 of "pane,casa,mela"
da come risultato "casa"; mentre specificando un altro carattere grazie alla proprieta' itemdel :
set itemdel to "-" put item 2 of "pane-casa,mela"
da come risultato "casa,mela".
Cambiare itemDel e' molto comode per estrarre parti di testo.
Potete anche mischiare parole e numeri, ad esempio:
put "Siamo in 133" into temp add 1 to word 3 of temp answer temp
da come risultato "Siamo in 134".
Il token o gettone e' un gruppo di lettere o uno dei seguenti simboli: =, +, -, *, /, [, ], (, ), {, }, <, >, e la virgola. In realta' e' poco utile per il programmatore, serve al linguaggio Livecode stesso per analizzare gli script, comunque la compagnia RunRev la lasciato disponibile anche agli altri programmatori. Ecco un esempio:
put token 1 of "someFunction(a+b)" # da someFunction put token 2 of "someFunction(a+b)" # esce ( put token 3 of "someFunction(a+b)" # esce a put token 3 of "a+b" #esce b
Potete usare anche parole come first (primo), last (ultimo) e middle, ad esempio:
put last char of "Ciao a tutti" # esce i put middle char of "Ciao" #esce a put middle char of "ABCDE" #esce C
Se usate numeri negativi, si comincia a contare dalla fine, ad esempio:
put char -2 of "ABCDE" # esce D
si possono anche mescolare le espressioni, ad esempio:
put char 2 of word 3 of "Ciao a tutti" # esce u
Se avete in mente espressioni molto complesse, potete usare le parentesi tonde per indicare come raggruppare e leggere correttamente il tutto: ad esempio se non usate le parentesi non potete scrivere:
put item 2 of (word 3 of "A,B,C I,J,K X,Y,Z") #esce Y
Potete anche indicare un inizio e una fine del testo da estrarre, ad esempio:
put char 1 to 3 of "ABCDEF" # esce ABC put char 3 to -2 of "ABCDEFGH" #esce CDEFG
Un'altra parola che potete usare e' number, esempio:
put the number of char of "ABCDEFG" # esce 7
Cercare
Potete cercare con le chunk expression, per esempio
if "A" is in "ABC" then answer "C'e' A" end if
mentre la seguente espressione e' falsa
if "13" is in "123" then ...
la ricerca con le chunck expression non distingue fra maiuscole e minuscole, se volete invece distinguere basta impostare la prorieta' caseSensitive su verso (true), cosi':
set the caseSensitive to true
Formato
Tutti i dati sono stringhe in qualche modo, quindi potete sempre fare dei test per vedere se sono anche:
- True (vero)
- False (falso)
- a Number (numero)
- an Integer (intero)
- a Point (punto, quindi due coordinate separate da una virgola, tipo "10,15")
- aRectangle (rettangolo, quindi 4 coordinate separate da virgole, tipo "10,15,24,5")
- a Date (una data, esistono moti formati, tipo "5/12/13")
- a Color (un colore, quindi 3 coordinate separate da virgole, tipo "10,15,240")
il codice per i test e' come il seguente:
if "12" is a number then answer "12 e' un numero!!!" end if
Inizio e fine
Potete anche verificare se un testo comincia (begins) o finisce (ends) con una seri di caratteri, ad esempio
if "Mario dorme spesso" begins with "Mar" then ... if "Mario dorme spesso" ends with "esso" then ...
Sostituzione del testo
Per la sostituzioni del testo esistono varie funzioni o comandi, cominciamo col piu' semplice '''replace. Questo comando sostituisce tutto le occorrenze indicate, ad esempio:
put "Manda" into temp replace "A" with "O" in temp put temp
notate che temp adesso contiene MOndO. Fate attenzione alla eventuale distinzione fra maiuscole e minuscole. Potete anche indicare espressioni parole piu' lunghe:
put "Manda" into temp replace "nd" with "rsi" in temp put temp #temp adeso contiene Marsia
certe volte per fare una sostituzione molto complicata conviene sapere dove si trova una determinata lettera, riga, parola o item; per questo esistono le seguenti funzioni:
- offset() (lettere)
- wordOffest() (parole)
- lineOffset() (linee)
- itemOffset() (item)
ad esempio:
put offset("C","ABC") #esce 3
Espressioni regolari
Se la vostra ricerca e' molto complicata, potreste utilizzare le espressioni regolari, le espressioni regolari di LiveCode sono compatibili con quelle in PCRE (Perl), potete trovare una guida alle espressioni regolari su http://www.pcre.org/ e piu' in generale la mia guida su EspressioneRegolareRE.
La funzione matchText accetta espressioni regolari e puo' salvare i risultati, ad esempio
matchText("06-54321","([0-9]+)-([0-9]+)",prefisso,numeroDiTelefono)
memorizza ilprefisso e il numero di telefono in maniera separata dal numero. Chiaramente si ferma alla prima occorrenza trovata.
Potete anche sostituire il testo con la funzione replaceText utilizzando espressioni regolari.
Filtraggio
La funzione filter e' molto utile e molto rara in altri linguaggi di programmazione, permette di eliminare da un testo le righe che non vogliamo e prendere solo quelle che vogliamo. Ad esempio per eliminare le linee vuote di un testo basta:
filter miotesto without empty lines
Se al contrario vogliamo solo le seguenti parole: rosa, rose; bastera':
filter miotesto with "ros[ae]"
altri simboli accettati sono l'asterisco (*) e il punto di domanda (?).
L'asterisco sostituisce un qualunque numero di caratteri, quindi il seguente comando:
filter miotesto with "AB*DE"
accetta sia "ABCDE", sia "ABCCCCDE", sia "ABzhjkDE".
Il punto di domanda sostituisce solo un carattere:
filter miotesto with "AB?DE"
accetta sia "ABCDE", sia "ABZDE", ma non "ABzhjkDE".
Cancellare del testo
Usate ala parola 'delete per cancellare una parte del testo, ad esempio:
put "Ciao a tutti" into esempio delete last char of esempio # adesso e' "Ciao a tutt" delete word 2 of esempio # adesso e' "Ciao tutt"
Stile del testo
Potete cambiare lo stile del testo si applicando uno stile HTML che uno RTF. Facciamo un esempio:
set the HTMLtext of field esempio to "<h1>Titolo</h1>testo normale<br>testo in <b>grassetto</b>"
Ecco il risultato:
Usate la proprieta' HtmlText se volete servirvi del codice HTML, mente utilizzate la proprieta' RTFtext se volete usare il codice RTF.
Potete inoltre cambiare gli stiliutilizzando gli stili livecode (proprieta textStyle), ad esempio il seguente codice funziona:
set the textStyle of line 2 of field esempio to "bold"
Ordinare i dati
Ordinare dati , righe, testi e' un'operazione importante ma anche semplice utilizzando il comando sort. Con sort potete operare su righe o items o entrambi, ma per semplicita' visiva cerchero' sempre di utilizzare le righe.Vediamo qualche esempio considerando il testo esempio cosi' composto:
1 3 5 4 2
poi proviamo ad ordinarle:
sort lines of esempio
adesso esempio contiene
1 2 3 4 5
possiamo invertire l'ordinamento
sort lines of esempio descending
cosi' esempio contiene:
5 4 3 2 1
NOTA: se si ha a che fare con i numeri, bisogna specificarlo. L'ordinamento di solito avviene secondo la modalità "testo". Il comando sort supporta le seguenti modalita':
- text
- numeric
- dateTime
Esempi:
sort lines of esempio descending 5 4 3 2 10 sort lines of esempio descending numeric 10 5 4 3 2
L'opzione piu' interessante e' che e' possibile specificare di ordinare le righe solo secondo elementi di ogni riga, utilizzando l'opzione by ... of each. Ad esempio prendiamo un testo fatto cosi':
10, mario, 15/5/2010 23, luigi, 10/2/2009 30, andrea, 27/7/2013
ora proviamo ad ordinarlo secondo i nomi:
sort lines of esempio by item 2 of each 30, andrea, 27/7/2013 23, luigi, 10/2/2009 10, mario, 15/5/2010
si possono scrivere espressioni molto complesse:
sort lines of fld 1 numeric by char 2 to -1 of the first item of each
E' possibile anche ordinare in sequenza casuale, ecco un esempio:
put the number of lines of esempio into numerorighe sort lines of esempio by random(numerorighe)
L'esempio appena mostrato indica come sia possibili indicare una funzione per ordinare. In questo modo non avete limite alle possibilita' di ordinamento.
E' possibile anche mettere in ordine le carte (card) di una finestra (stack). Questa opzione è fondamentale quando volete creare delle stampe o dei PDF, ogni carta sara' una pagina, quindi e' estremamente importante che siano tutte nell'ordine giusto.
sort cards of this stack
e' possibile ordinarle anche indicando un elemento della carta:
sort cards by field "Cognome"
Interfaccia grafica
In questo capitolo studieremo meglio gli aspetti riguardanti gli elementi grafici, come modificarli e piegarli al nostro volere con poche righe di codice:
Creare o cancellare oggetti
Potete creare oggetti con la parola create, ad esempio:
create button "Esempio"
potete anche specificare dove usando la parola in.
Potete cancellare un oggetto con la parola delete:
delete button "Esempio"
delete puo' essere usato anche per cancellare lettere, parole, item, ecc., dai testi.
Riferirsi agli oggetti
Ogni oggetto puo' essere indicato in diversi modi:
- me (me)
- this ... (questo ...)
- the target (l'obbiettivo del messaggio corrente)
- nome (ogni oggetto ha un nome)
- ID (Livecode assegna un ID unico ad ogni elemento di una carta, ma l'ID si puo' ripetere in un'altra carta)
- numero (Livecode assegna un numero progressivo ad ogni elemento, ma capire questo numero non e' molto semplice o affidabile. Potete usare anche parole che specificano un numero come first or last.)
vediamo praticamente:
set the text of me to "Ciao a tutti" set the text of title of this stack to "Esempio" set the text of the target to "Ciao a tutti" set the text of field "CampoNome" to "Ciao a tutti" set the text of field ID 1062 to "Ciao a tutti" set the text of field 2 to "Ciao a tutti"
e' possibile, ma fortemente sconsigliata, usare la parola control invece che della parola che identifica il vostro oggetto (field, button, ecc.). Io lo sconsiglio perche' risulta poi impossibile capire eventuali errori di programmazione. Comunque ecco un esempio:
set the text of control ID 1062 to "Ciao a tutti"
Chiaramente certe volte e' meglio specificare bene a quale oggetto facciamo riferimetno, altrimenti Livecode pensara' che stiamo parlando della carta corrente dello stack corrente; esempio:
set the text of field "CampoCognome" of card "InserimentoDati" to "Ciao a tutti" set the text of field "CampoCognome" of card "InserimentoDati" of stack "FinestraPrincipale" to "Ciao a tutti"
Altri programmatori, ma io lo socnsiglio, prefriscono impostarre la variabile DefaultStack per indicare a che stack si riferiscono, ma anche qui io credo che crei non pochi problemi, se sfugge la riga con defaultstack,capire perche' un programma non funziona.
Quando un oggetto fa parte di un gruppo, potete specificarlo per evitare confusioni con eventuali omonimie:
button "Guido" of group "Stereotipi"
Proprieta'
Come gia' accennato e' possibile accedere alle proprieta' piu' importanti dalla finestra Property Inspector, comunque ce ne sono molte di piu' per ogni oggetto. Ogni proprieta' puo' essere letta o impostata anche con un comando. Per leggere basta scrivere:
put the text of field "esempio" into miaVariabile
Per impostare una proprieta' basta usare il comando set:
set the text of field "esempio" to "Ciao a tutti"
Se impostate una proprieta' che prima non esisteva, creerete una Custom property che ritroverete nella lista delle custom property nel Property Inspector.
Alcune (rare) proprieta' molto critiche possono essere solo lette.
Le proprieta' possono contenere qualsiasi cosa: testi, numeri, dati, immaggini, file binari, array, qualsiasi cosa.
Certe proprieta' sono vuote (empty) nel senso che non si discostano dal comportamento standard. Ad esempio se creo un testo, la proprieta' testFont è vuota, nel senso che usa il font standard di Livecode (qualunque esso sia sul computer in uso, sulla versione di Livecode in uso), ma se per la mia applicazione ho la necessita' di sapere esattamente il font utilizzato, devo usare la parola effective. La parola effective ricerca esattamente il valore della proprieta', quidi:
put the textFont of label "testo" into esempio # cosi' esempio non contiene nulla put the effective textFont of label "testo" into esempio # cosi' esempio contiene "Helvetica"
Questo vale per tutte le proprieta'.
Proprieta' del testo
Al contrario di tutte le altre proprieta' il testo e' piu' versatile. E' possibile impostare le proprieta' dei testi, come ad esempio il font o la grandezza, sia a tutto il testo, sia separatamente ad ogni singolo caratte, parola, item o linea. Quindi tutti i seguenti comandi sono validi:
set the textFont of word 3 of field "My Field" to "Courier" set the foregroundColor of line 1 of field 2 to "green" if the textStyle of the clickChunk is "bold" then beep
chiaramente di un testo con diversi stili, grandezze dei font, ecc., chiedendo la proprieta' complessiva, otterremo come risposta: "mixed".
Modificare i template
Ogni novo oggetto che viene creato parte da tutta una serie di impostazione da un modello chiamato template. Alcuni programmatori sostengono che sia meglio cambiare il template e poi creare gli oggetti. La mia personale opinione e' che a meno di progetti molto grandi dove bisogna persoanlizzare tutto, il template e' meglio lasciarlo cosi' come e'.
Comunqe se siete interessati a cambiare il template, basta aggiungere la prefisso template all'oggetto della proprieta' che intendete modificare per modificarne il template. Ad esempio
set the text of templateField to "prova testo"
Per fortuna se fate pasticci la parola reset vi viene in aiuto, ripristinando il template allo stato originario:
reset the templateField
Salvare le proprieta'
Puo' essee comodo salvare tutte le proprieta di un oggetto (comprese le custom) in un singolo array (matrice), per farlo basta scrivere:
put the properties of field "esempio" into backupProprieta
Come vedete con la parola properties prendete tutte le proprieta' in una volta sola. E potete anche impostare tutte le proprieta' di un oggetto in questa maniera.
Profili delle proprieta'
I profili servono per memorizzare tutta una serie di proprieta' di un oggetto e cambiarle tutte insieme. Tipicamente sono utilizzate per cambiare lalingua del programma o per personalizzare l'interfaccia come le "skin" dei programmi. Il profilo Master e' quello di partenza. Il profilo e' sempre memorizzato nella proprieta' revProfile. Se abbiamo un profilo per un pulsante chiamato Profilo1 bastera' scrivere:
set the revProfile of button "esempio" to "Profilo1"
La cosa interessante per i profili, che e' possibili applicarli a tutti gli oggetti della carta corrente di una finestra. In questo modo e' molto piu' semplice cambiare le proprieta di tutti gli oggetti in un attimo. Per fare questo e' necessario usare il comando revSetCardProfile cosi':
revSetCardProfile "Profilo1","StackdellaFinestra" #bisogna indicare lo stack, non la carta
ma attenzione, gli oggetti devono gia' avere quel profilo dentro di loro su cui cambiare, altrimenti rimarrano come sono.
Per cambiare tutti gli oggetti di uno stack su un profilo si usa il comando revSetStackProfile , cosi':
revSetStackProfile "Profilo1","MioStack"
ma attenzione, gli oggetti devono gia' avere quel profilo dentro di loro su cui cambiare, altrimenti rimarrano come sono.
Per creare un profilo, oltre a farlo graficamente con il Properties Inspector (e' molto istruttivo farlo, provateci almeno una volta graficamente), potete farlo con il codice revProfile. Ma solo se avete attivato la voce Create profiles automatically nel pannello delle preferenze:
Questo perche' il comando per creare un nuovo profilo non c'e' e quindi bisogna utilizzare quello per impostare il profilo. Per evitare confusioni o problemi, di solito, quando si imposta un profilo che non esiste, non succede nulla, mentre con questa opzione attiva si crea un nuovo profilo:
set the revProfile of button "bottoneEsempio" to "NuovoProfilo"
tutto qua.
La stessa opzione sipuo' configurare con il seguente codice (impostare true o false a seconda dell'esigenza):
global gRevProfileReadOnlyput true into gRevProfileReadOnly
Muovere le finestre
Un metodo per muovere le finestre e' impostare la proprieta' loc (location), che rappresenta il centro della finestra. Per esempio per mettere al centro dello schermo una finserta, basta scrivere:
set the location of stack "esempio" to the screenLoc
perche' screenLoc e' il centro dello schermo.
Ridimensionare le finestre
Un modo veloce per impostare le dimensioni di una finestra e' dire la posizione dei sue angoli estremi della finestra si usa la proprieta' rectangle, per esempio per metterli al punto (100,100) e (600,200) bastera':
set the rectangle of this stack to "100,100,600,200"
Pulsanti del titolo
Potete anche indicare i pulsanti che debbono apparire nella finestra, basta indicarli con una serie di valori divisi dalla virgola, esempio:
set the decorations of stack "Gamma" to "title,minimize"
Finestre ridimensionabili
Per impedire o permettere di ridimensionare una finestra, basta impostare la proprieta' resizable su true o false:
set the resizable of this stack to false
Finestre irregolari o semitrasparenti
E' possibile dare qualsiasi forma alle finestre, anche con buchi, per esempio un ovale:
Basta creare un'immagine con delle parti trasparenti (con il formato PNG), poi caricarla nel programma con il comando File->Import as Control->Image file, e infine vedere l'ID assegnato da Livecode all'immagine importata. Fatto cio' basta impostare la proprieta' windowshape' all'ID dell'imagine, esempio:
set the windowshape of this stack to ID 1008
Spostare gli oggetti col mouse (drag)
Per attivare la funzione che permetta ad un oggetto di essere spostato o trascinato, basta aggiungere all'oggetto il seguente codice:
on mouseDown grab me end mouseDown
Database
Livecode puo' lavorare con qualunque database. Livecode ha integrato SQLite, ma potete interfacciarci con qualunque database cha abbia una interfaccia ODBC (quasi tutti ce l'hanno), ecco i piu' popolari:
- SQLite
- MySQL
- Oracle
- PostgreSQL
- Valentina
I database sono, di solito, dei file esterni al nostro programma che possono essere sullo stesso pc su cui gira il nostro programma o su un server remoto. I database contengono tantissime informazioni catalogate. Grazie ai database noi possiamo ricercare informazioni, inserire o cancellare dei dati, tutto secondo particolari criteri che impostiamo noi.
Il linguaggio utilizzato da quasi tutti i database è il SQL. Generalmente i comandi validi per un database, valgono anche per tutti gli altri.
Riassumendo in poche parole un database, si può affermare che si tratta di una raccolta di tabelle, dentro ogni tabella i dati sono organizzati per righe e per colonne.
I database hanno dei vantaggi:
- veloci a trovare i dati che si servono tra migliaia di dati
- occupano poco spazio
- sono ottimizzati per fare il loro lavoro
- sono velocissimi
- si riescono ad incrociare i dati di piu' tabelle facilmente
Potreste fare le stesse cose di un database con una matrice, ma trattando molti dati, vi consiglio di imparare ad utilizzare i database.
Connessione
Per utilizzare un database bisogna prima connettersi ad un database, utilizzando la funzione revOpenDatabase() e memorizzare l'identificato della connessione. Per esempio con SQLite si scrivera':
put revOpenDatabase("sqlite", "./mioDB.sqlite", , , , ) into connID
in questo esempio la variabile connID contiene l'identificativo della connessione (e' un semplice numero). Potete stabilire piu' connessioni contemporaneamente.
Interrogare
Per recuperare delle informazioni dal database, in gergo si dice interrogare, basta usare il comando la funzione revDataFromQuery, specificando come separare righe e colonne:
put "SELECT * from utenti ; " into tSQL put revDataFromQuery(tab,return,connID,tSQL) into tRecords
in questo caso abbiamo che tRecords contiene tutti i dati dove ogni colonna e' separata dall'altro dal carattere TAB e ogni riga da un accapo. Questa forma potete cambiarla, ma e' molto comoda perchè permette di visualizzare i dati un un campo di testo come una vera tabella (field, label).
Eseguire
Per eseguire dei comandi che modificano in database, basta usare il comando revExecuteSQL, ad esempio:
put "INSERT into users (name,surname) VALUES ('Jack','Sparrow')" into tSQL revExecuteSQL connID,tSQL
Stampare e PDF
Stampare e' semplicissimo, di solito si crea una o piu' carte (card) e si mandano in stampa. La semplicita' di Livecode vi permettera' di creare anche dei report complicatissimi. Stampare significa che potete anche creare dei PDF. L'unica differenza tra la stampa normale e creare un PDF e' nel dispositivo di stampa che sara' il programma per i PDF incluso in Livecode invece di una stampante.
Livecode vi permette di impostare parecchi aspetti della stampante o anche di stampare solo quello dentro ad un determinato rettangolo o solo il contenuto di un campo di testo (field).
Impostare la stampante
Innanzitutto potete scegliere la stampante da utilizzare. Per avere una lista delle stampanti basta usare la proprieta' availablePrinters:
put the availablePrinters into field "lista stampanti"
e dovreste ottenere una lista tipo:
\\RMCSERVER01\PRT_A4V PDFill PDF Writer Microsoft XPS Document Writer Microsoft Office Live Meeting Document Writer Microsoft Office Live Meeting 2007 Document Writer Microsoft Office Document Image Writer Lexmark T640 XL ImagePrinter Automatico Lexmark T640 su PC22 Automatico HP LaserJet 2200 Series PCL 6 su RMCSERVER01 Automatico HP Color LaserJet 3550 su RMCSERVER01 Adobe PDF
Per impostare una stampante basta impostare la proprieta' printerName:
set the printerName to "Lexmark T640 XL"
Poi potete scoprire che opzioni ha la vostra stampante con la proprieta' printerFeatures:
put the printerFeatures
nel mio caso e' uscito:
collate,copies
Cosi' sapete cosa potete attivare della stampante. Nel mio caso e' possibile dire quante copie fare di una stampa (in modo da non dover mandare in stampa tante volte lo stesso documento) e nel caso di copie e' possibile scegliere se stampa prima tutte le prime pagine, poi tutte le seconde, poi tutte le terze, oppure stampa dalla prima all'ultima e ricomincia per ogni copia (opzione collate).
Altre opzioni potrebbero essere "color" (a colori), "duplex" (fronte retro), ogni stampante ha le sue.
Se volete far scegliere all'utente, Livecode ha gia' tutto pronto, basta usare:
answer printer
e apparira':
Piu' semplice di cosi' non e' possibile.
Nel medesimo modo per far impostare all'utente di impostare le opzioni di pagina:
answer page setup
e apparira':
Salvare tutte le impostazioni
Tutte le impostazione di stampa sono memorizzate nella proprieta' globale printerSettings. Questa variabile contiene tutti i dati possibili sulla stampa, ma e' scritto in codice macchina, quindi non pensate che si possa modificare facilmente. Di contro e' comoda per salvare tutte le impostazioni e recuperarle in un secondo momento. Se cambiate pc o sistema operativo, questa proprieta' cambia.
Impostazioni avanzate
Potete recuperare l'effettiva area di stampa sul foglio dalla proprieta': printRectangle. Non confondetelo con la proprieta' printPaperRectangle, quest'ultima indica solo le dimensioni del foglio di stampa, ma non l'area effettivamente stampabile. Molte stampanti, infatti, non riescono a stampare su tutto il foglio.
L'orientamento di stampa si imposta con: printPaperOrientation. Potete solo scegliere tra portrait (verticale), landscape (orizzontale), reverse portrait (verticale dall'altro lato), reverse landscape (orizzontale dall'altro lato). Esempio:
set the printPaperOrientation to "landscape"
Il fattore di scala si imposta con: printPaperScale. Potete impostare un valore usando un numero decimale (1, 0.5, 3, 0.21, ecc.)
Il numero di copie si imposta con: printCopies . Ricordatevi di impostare printCollate opportunamente (true o false).
Per scegliere se stampare a colori o in bianco e nero impostare: printColors (true o false).
Quando si stampa con un PC, il sistema applica un titolo di riconoscimento al lavoro di stampa (job), potete impostare questo titolo con la proprieta': printTitle
Stampare
Per stampare basta usare il comando print. Ecco alcuni esempi:
print this card print card 12 print this stack
Come vedete potete stampare o solo una carta o tutte le carte di una finestra (stack). Quando stampate le carte di una finestra, andate sempre alla prima card che volete che sia stampata, le altre seguiranno l'ordine numerico:
go to card 1 print this stack
Prima di stampare impostate formatForPrinting su true, in questo modo tutti i font saranno quelli per la stampa, poi rimetteteli su false.
Creare PDF
Per creare i PDF basta lanciare i seguenti comandi, ad esempio:
open printing to pdf "./esempio.pdf" print this stack close printing
Stampare solo il testo un campo
Certe volte vi potrebbe servire di stampare solo il contenuto di un campo, basta usare revPrintField
revPrintField the long id of field "text document"
C'e' anche revPrintText che ha piu' opzioni.
Creare un eseguibile
Gli script Livecode di solto girano solo se avete installato Livecode sul vostro PC. Livecode vi permetto comunque di creare dei programmi eseguibili per ogni tipo di PC senza che ci sia installato Livecode. Andate su File->StandAlone Application settings e decidete per quali sistemi operativi volete creare l'eseguibile ed eventuali opzioni. Una volta fatto cio' andate su File->Save as standalone e il vostro programma sara' creato all'istante.
Scrivere o leggere un file
Quandi indicate un file o una directory, potete utilizzare sia un percorso relativo,che un percorso assoluto. Quando usate un percorso relativo, esso parte dalla cartella DefaultFolder; quindi se non sapete qual è questa cartella sul sistema operativo corrente, vi conviene impostarlo come la cartella del vostro eseguibile con il seguente codice:
On OpenStack set itemDel to "/" set the defaultFolder to item 1 to -2 of (the effective fileName of this stack) end OpenStack
per savare basta usare put e URL insieme:
put "testo di esempio" into URL "binfile:esempio.txt"
potete usare put sia per testi che per file binari, ricordate sempre scrivere binfile: prima del nome del file.
Allo stesso modo potete leggere i file:
put URL "binfile:esempio.txt" into esempio
NOTA: per chi usa il Mac c'e' e ci sara sempre un problema con i nomi, perche' il Mac permette di usare il simbolo "/" (slash) per i nomi dei files, ma questo crea sempre molta ambiguita' sui percorsi. Livecode cerca di superarla sostituendo automaticamente il carattere "/" con i due punti ":". Siccome il due punti sono vietati su Mac, l'ambiguita' e' risolta. Comunque evitate di usare il carattere slash (/)con i nomi, crea solo confusione.
Rinominare
Per rinominare, basta utilizzare il comando rename:
rename "esempio.txt" to "esempio2.txt" rename folder "/Volumes/Disk/Applications/MyApp/" to "/Volumes/Disk/Applications/OtherApp/"
Cancellare
Per cancellare basta usare il comando delete:
delete URL "binfile:../mytext.txt"
Cartelle speciali
Livecode utilizza delle scorciatoie per delle cartelle predefinite, esempi:
put specialFolderPath("Desktop") into myPath put specialFolderPath("Start") into myPath put the DefaultFolder into myPath
Internet
Utilizzando la parola URL potete interagire su internet, per esempio se volete leggere il contenuto di una pagina potete scrivere:
put URL "https://www.maxvessi.net/pmwiki/pmwiki.php" into miaVar
potete anche utilizzare il protocollo ftp:
put URL "ftp://www.maxvessi.net/esempio.pdf" into miaVar
potete anche inviare file sia con protocollo http (la maggior parte dei server non lo permette), sia con protocollo ftp:
put "Testo di esempio" into URL "https://www.maxvessi.net/esempio.txt" put "Testo di esempio" into URL "ftp://user:password@ftp.maxvessi.net/esempio.txt"
Se inviate un file in una directory che non esiste, la directory verra' creata automaticamente. Il metodo migliore per creare una directory e' inviandogli empty come file:
put empty into URL "ftp://user:password@ftp.maxvessi.net/nuovacartella/"
NOTA: Se volete usare nomi con caratteri speciali o spazi in un URL, potete passare attraverso la funzione URLEncode:
put URLEncode("ftp://user:password@ftp.maxvessi.net/nuovacartella/Nuova cartella/") into miourl put empty into URL miourl
Trasferimenti in background e copia cache
Potete mettere a scaricare uno o piu' file senza bloccare il programma in attesa di aver scaricato tutti i file. Un altro vantaggio e' la possibilita' di poter vedere lo stato di avanzamento di uno scaricamento.
Il comando per scaricare e' load:
load URL "http://www.example.com/index.html" load URL "http://www.example.com/test.html" with message "myUrlDownloadFinished" on myUrlDownloadFinished answer "Scaricamento finito" with "OK" end myUrlDownloadFinished
Notate come potete impostare un messaggio che si attivi alla fine dello scaricamento; questo messaggio potrebbe far apparire una finestra o attivare altre funzioni del programma. Il comando load non salva l file in una variabile effettiva, ma copia la pagine o il file in una memoria comune (cache) in modo che non sia piu' necessario scaricarla, quindi per utilizzarla bisogna scrivere put come al solito:
load URL "http://www.example.com/index.html" put URL "http://www.example.com/index.html" into var1
come vedete apparentemente il codice sembra che carichi la pagina dentro la variabile var1 come al solito, in realta' la pagina e' stata prima copiata in na memoria interna, in gergo copia cache, e poi non ogni volta che viene richiamata viene presa la copia cache. Il vantaggio e' duplice: potete richiamare la pagina anche cento volte senza doverla leggere dal sito ogni volta, potete inoltre mettere in cache tante pagine senza bloccare l'esecuzione del programma.
Usando il comando load potete anche sapere se ci sono stati problemi con lo scaricamento grazie alla proprieta' URLStatus:
load URL "http://www.example.com/index.html" put the URLStatus of "http://www.example.com/index.html" into esempioStatus
la proprieta' URLStatus puo' assumere i seguenti valori:
- queued - e' ancora nella lista delle pagine da scaricare
- contacted - il sito esiste, ma ancora non la scaricato
- requested - il link e' stato richiesto
- loading, bytes, Totalbytes - sta ricevendo un file grosso , indica quanti byte ha ricevuto e quanto e' il totale di byte del file
- uploading, bytes, bytesTotal -sta inviano un file, indica quanti byte ha inviato e quanto e' il totale di byte del file
- cached - la pagina e' nella cache e completo
- uploaded - il file e' stato caricato
- error - c'e' stato un errore e non e' stato trasferito
- timeout - errore di time out, puo' essere dovuto a tanti fattori, anche ad una connessione troppo lenta
- empty - e' stato elimanto dalla cache o non c'e'
Chiaramente non ha senso tenere impegnata la memoria cache se non avete piu' intenzione di leggere una determinata pagina o risorsa, per questo motivo potete cancellarla dalla cache o interrompere il suo scaricamento con il comando unload:
unload URL "http://www.example.com/index.html"
Aprire il browser
Per aprire il browser del vostro sistema operativo basta usare il comando launch:
launch URL "https://www.maxvessi.net"
Inviare email
Per inviare email il metodo migliore e' utilizzare il comando launch, ad esempio il seguente comando scrive ad una serie di persone sia direttamente, che in copia e copia nascosta:
launch url "someone@example.com,anotherone@example.com?cc=someoneelse@example.com&bcc=andsomeoneelse@example.com&subject=Summer%20Party&body=You%20are%20invited%20to%20a%20big%20summer%20party!"
E apparira':
TO: someone@example.com,anotherone@example.com
CC: someoneelse@example.com
BCC: andsomeoneelse@example.com
Subject: Summer Party
You are invited to a big summer party!
Riempire i dati di un form web e altro ancora
Tutti i comandi che cominciano per libURL vi permetto di fare cose incredibili via internet, cercateli sul dizionario. Potrete interagire con i siti e creare applicazioni distribuite e per cloud. Potete utilizzare anche i socket, ecco alcuni esempi:
open socket (tIPAddress & ":" & tPort) with message "chatConnected" on chatConnected pSocket read from socket pSocket with message chatReceived end chatConnected on chatReceived pSocket, pData put pData after field "chat output" read from socket pSocket with message "chatReceived" end chatReceived write field "chat text" to socket tSocket close socket (tIDAddress & ":" & tPort)
Uso da linea di comando
Livecode e' un linguaggio di programmazione grandioso per programmi grafici, comunque puo' essere utilizzato anche da linea di comando. Se per esempio scrivete un programma e lo chiamate "esempio.livecode" potete lanciarlo da line dicomando cosi':
livecode esempio.livecode
se poi il vostro programma ha bisogno di parametri, potete metterli dopo, esempio:
livecode esempio.livecode param1 -h 52 --parametro-4
ogni parametro e' memorizzato in una variabile globale sempre accessibile numerata, nell'esempio precedente abbiamo:
- $0 = esempio.livecode (il nome del programma)
- $1 = "param1" (primo parametro)
- $2 = "-h" (secondo parametro)
- $3 = "52" (terzo parametro)
- $4 = "--parametro-4" (quarto parametro)
Potete anche utilizzare il terminale da dentro il vostro programma, sfruttando la funzione shell(); ecco un esempio su Linux:
put shell("ls -a") into listafiles
l'unico inconveniente di shell() e' che il programma si blocca finche' non ha finito di eseguire il comando.
Un altro modo per poter interagire con il sistema operativo e' il comando launch. Potete lanciare altri programmi, esempio:
launch "/home/max/esempio.txt" with "/usr/bin/gedit"
se il sistema operativo ha associato un programma predefinito a certi tipi di file, potete semplicemente lanciare il file con la parola document; esempio:
launch document "C:/documento.pdf"
per avviare il browser predefinito basta usare la parola URL:
launch URL "http://www.livecode.com/"
Plugin
Potete scrivere plug in (componenti aggiuntivi) per il vostro Livecode IDE semplicemente copiando il file del vostro programma nella cartella Plugins di Livecode.
Una volta fatto cio' troverete il vostro plugin nella lista del menu Development -> Plugins. Nel menu Development -> Plugins-> Plugin Settings potete decidere quali plugin avviare automaticamente insieme a Livecode.
Lavorare con le immagini
Livecode supporta tantissimi tipi di immagini, chiaramente il formato migliore e' il PNG che ha anche le trasparenze. Ecco i principali:
- PNG
- JPEG
- GIF
- BMP
- PBM
- PGM
- PPM
- XBM
- XPM
- XWD
- PICT
Importare immagini
Per importare immagini dentro il vostro programma, basta andare su File -> Import As Control -> Image File. L'immagine sara' caricata dentro Livecode e apparira' nella finestra corrente. All'immagine sara' anche assegnato un ID che potrete usare come riferimento ogni volta che vorrete usarla.
Si puo' importare un'immagine anche solo come riferimento, ma non viene salvata dentro al programma, viene memorizzato solo il percorso relativo della sua posizione. Io sconsiglio questo modo, perche' se spostate la cartella del programma, non ritroverete piu' le immagini. Importarle per riferimento ha senso solo se avete migliaia di immagini e non volete appesantire troppo il programma.
Potete importare anche un'istantanea dello schermo (screenshot), basta andare su File -> Import AsControl -> Snapshot, oppure con il comando:
import snapshot from 100,100,200,200
Creare immagini
Se inserite nella finestra un'immagine (vuota o piena), potete modificarla con gli strumenti per disegnare della Tool palette.
Se volete potete anche crearla con il codice vostro del programma, ad esempio:
set the rect of the templateImage to 100,100,400,400 create image "esempio" choose brush tool set the brush to 8 set the brushColor to red set the dragSpeed to 20 drag from "120,120" to "300,300"
Potete anche tagliare le immagini con crop e ruotarle con rotate.
Quando manipolatele immagini, cambiate il valore della proprieta' resizeQuality opportunamente.
Potete anche creare le immagini da estraendole da una porzione della finestra di un vostro programma, ad esempio:
import snapshot from 100,100,200,200 of stack "Layout"
oppure da un elemento:
import snapshot from button 5 of stack "objects"
Esportare immagini
Potete salvare le immagini in un file con la sintassi per scrivere i file:
put image "miaimmagine" into URL "binfile:esempio.jpg"
oppure esportare l'immagine di una finestra direttamente in un file con il comando export:
export snapshot from the selectedObject to file "snap.jpg" as JPEG
il comando export vi permette di decidere il formato dell'immagine.
Copia e incolla con le immagini
E' valido scrivere il seguente comando:
put image 1 into image 2
GIF animate
Le immagini GIF animate vi permetto di creare brevi animazioni. Potete utilizzarle come tutte le altre immagini, la proprieta' repeatCount vi permette di decidere quante volte ripeterel'animazione; il valore 0 blocca l'animazione, il valore -1 vi permette di ripetere l'animazione all'infinito.
Immagini vettoriali
Potete creare immagini vettoriali (quelle che non sgranano ingrandendole) sia con gli strumenti presenti nella Tool palette che il codice di programmazione.
Lavorare con Video e Audio
Per i video Livecode si appoggia a:
- QuickTime, su Windows e Mac
- Mplayer su Linux
in questo modo potete sfruttare ogni tipo di file riconosciuto da questi lettori (MP£, MP4, AVI, ...). Per sfruttare questa capacità basta creare un lettore, e' l'icona vicino a quella delle immagini nella Tool Palette', in questo modo vi ritroverete un player; oppure da codice:
create player "esempio" set the filename of player "esempio" to "miofile.avi" set the currentTime of player "esempio" to zero start player "esempio"
per fermare un lettore basta usare il comando stop:
stop player "esempio"
I comandi e le proprieta' dei lettori multimediali sono tantissime.
Audio
Per l'audio potete importare il file come le immagini: File -> Import as Control -> Audio File. Quindi basta usare il comando play senza dover scomodare un lettore apposito:
play audioClip "esempio"
per fermare l'audio basta aggiungere stop:
play stop
per impostare il volume basta usale la proprieta' playLoudness (si considera sempre un numero tra 0 e 100):
set the playLoudness of audioclip "esempio" to 50
Schermo intero
Per mettere un'applicazione a schermo intero, basta impostare la proprieta' fullScreen:
set the fullScreen of this stack to true
Librerie incluse
Livecode comprende comandi anche per:
- compressione file
- cifratura
- checksum
- XML
- SSL
- https
- lettura testi, (text to speech)
Nel dizionario troverete tutte le spiegazioni.
comments powered by Disqus