venerdì 7 aprile 2017

Mostrare e far scomparire la tastiera Android

Se volete nascondere la tastiera virtuale di Android, vi basta creare un campo di testo con la proprietà lockText impostata su true, e invisibile (proprietà visible su false).
A questo punto vi basta usare il codice:



focus on field "invisibile"


Ecco un video dimostrativo:

martedì 4 aprile 2017

HexThello

Oggi vediamo una app per iOS creata con livecode in una settimana: HexThello.
Si tratta di una specie di Othello, ma con le tessere esagonali. Rispetto ad Othello che ha le tessere quadrate, le combinazione e strategie possibili sono molte di più.
Qui di seguito vedete una schermata:
Potete giocare contro il computer o contro un amico.
Complimenti a David Probert per il programma.

venerdì 31 marzo 2017

Immagini PNG e iOS

Il sistema di sviluppo per creare app per iOS, chiamato da Apple XCode, quando incontra un'immagine PNG, la compatta rendendola illegibile per molti programmi.
Per farle tornare normali bisogna usare il comando:
xcrun -sdk iphoneos pngcrush -revert-iphone-optimizations -q compresso.png nonCompresso.png

Ma come farlo dentro la APP?
Ecco il codice:
on mouseUp
   -- CHECK FOR EXISTENCE OF PNGCRUSH UTILITY
   put "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/pngcrush" into crushPath
   if there is not a file crushPath then
      answer error "Unable to locate pngcrush tool. Check location of xCode."
      exit mouseUp
   end if
   -- APPEND THE SHELL COMMAND PARAMETERSTO THE PNGCRUSH PATH
   put crushPath && "-revert-iphone-optimizations -q source.png destination.png" into theCommand
   -- ESTABLISH SOURCE AND DESTINATION FOLDERS
   put directory into D -- store the current directory
   answer folder "Locate folder containing PNG files:"
   if the result is "Cancel" then exit mouseUp
   put it into theSourceFolder
   set directory to theSourceFolder
   put the files into theList
   set directory to D -- restore the directory
   answer folder "Choose output folder:"
   if the result is "Cancel" then exit mouseUp
   put it into theDestinationFolder
   -- PROCESS FILES
   put 0 into theCount
   repeat for each line theFile in theList
      put theCommand into newCommand
      if char -4 to -1 of theFile is not ".png" then next repeat -- ignore non-PNG files
      put q(theSourceFolder & "/" & theFile) into theSourceFile
      put q(theDestinationFolder & "/" & theFile) into theDestinationFile
      replace "source.png" with theSourceFile in newCommand
      replace "destination.png" with theDestinationFile in newCommand
      get shell(newCommand)
      wait 20 millisecs with messages
      add 1 to theCount
      put theCount -- show processed file count in message box
   end repeat
   answer "PNGs have been fixed!"
end mouseUp

function q pString
   return quote & pString & quote
end q

lunedì 27 marzo 2017

Markdown

Oggi vediamo cosa fa la funzione mergMarkdownToXHTML(). In pratica prende un testo formattato MarkDown e lo converte in HTML.
Ad esempio il testo MarkDown:

An h1 header
============

Paragraphs are separated by a blank line.

2nd paragraph. *Italic*, **bold**, and `monospace`. Itemized lists
look like:

 * this one
 * that one
 * the other one


diventa:

<h1>An h1 header</h1>
 
 <p>Paragraphs are separated by a blank line.</p>
 
 <p>2nd paragraph. <em>Italic</em>, <strong>bold</strong>, and <code>monospace</code>. Itemized lists
 look like:</p>
 
 <ul>
 <li>this one</li>
 <li>that one</li>
 <li>the other one</li>
 </ul>

venerdì 24 marzo 2017

blur

Un nuovo comando è disponibile in livecode: blur.
Questo comando può sfocare un'immagine, ad esempio il seguente codice:

put the imageData of image 1 into theOriginalImageData
blur 5,"theOriginalImageData",the width of image 1,the height of image 1,"theNewImageData"
set the imageData of image 2 to theNewImageData


potete sfocare un'immagine così:

martedì 21 marzo 2017

Creare un lettore di codice QR (QR reader)

Il sito http://goqr.me/api/doc/read-qr-code/ vi permette di leggere o generare codici QR, basta inviare i dati al loro sito e lor si occupano dell'elaborazione della risposta.
Allora ho creato il seguente programma per vedere se funziona:
postimage
confermo che funziona. Potete scaricarlo da qui.
Il codice sorgente è questo:
on mouseUp
   put empty into tForm
   put "http://api.qrserver.com/v1/read-qr-code/" into tUrl
   put the filename of image 1 into tFile   
   put "<file>" & tFile into tFile
   if libURLMultipartFormData(tForm, "name","file","type","file", "file", tFile) is not empty then
      answer it ##error
   else
      set the httpHeaders to line 1 of tForm
      post line 2 to -1 of tForm to url tUrl
      put it into field "rawdata"
      ## check the result, etc., here
      set the httpHeaders to empty
      put jsonimport(the text of field "rawdata") into temp
      put temp[1]["symbol"][1]["data"] into field "text1"
   end if
end mouseUp

Vediamo come funziona: l'immagine deve essere spedita ad una pagina web. Il creatore della pagina web vuole ricevere via POST:
  • una variabile chiamata name, che contenga la parola file
  • una variabile chiamata type, che contenga la parola file
  • il file dell'immagine
Per fare questo dobbiamo usale il comando  libURLMultipartFormData, fatto ciò la risposta è un testo in formato JSON che trasformiamo in un array e prendiamo solo il testo.

mercoledì 15 marzo 2017

Tabelle

Scott Rossi ha creato un esempio di come sia possibile usare le normali tabelle invece dei datagrid. Questo esempio lo potete usare o digitando:

go url "http://tactilemedia.com/blog/tablelab1"

oppure scaricarlo da questo link  https://mega.nz/#!BJpRWLRB!jBdMghOOf2QeEFpGHXaOYGyEGG4Ew6tcZk1_e3xTjsc

venerdì 10 marzo 2017

Livecode 9 dp6

E' uscita una nuova versione di livecode la 9 dp6.
La novità più importante è che ora potete importare funzioni o classi Java dentro livecode, in questo modo se c'è qualcosa scritto in Java che vorreste usare in livecode, ora potete. Il sistema per sfruttarle è creare un widget che le integri al suo interno. Vi consiglio di leggere:

mercoledì 8 marzo 2017

Safe boating app

Oggi presentiamo un'app realizzata in pochi mesi: Safe boating disponibule per iOS e Android.
Potete scaricarla da qui per Android:
https://play.google.com/store/apps/details?id=com.rcmsar.safeboating&hl=en
Si tratta di un programma per pianificare in sicurezza viaggin in nave vicino alle coste del Canada, con link, previsione del tempo e condizioni per la pesca.
E' stata realizzata da Adam Hyde membro della Royal Canadian Marine Search and Rescue.
Il Sig. Hyde non era un programmatore prima di conoscere liveocde, ma in pochi mesi.
Ecco alcune immagini:








domenica 26 febbraio 2017

Trasformare un0immagine SVG in PNG

Il programmatore Cappellan ha creato un programma per convertire le immagini SVG (quelle vettoriali) in PNG:

Il programma permette di scrivere il codice SVG e vedere il risultato.
Potete scaricarlo da qui:

Potete vedere degli aggiornamenti da qui: http://forums.livecode.com/viewtopic.php?f=11&t=28384#unread

sabato 25 febbraio 2017

Nuova versione livecode

E' uscito livecode 9 dp5, vediamo le novità:
  • E' possibile leggere i dati delle trasmissioni NCF su Android con la funzioni:
    • mobilesNFCAvailable()
    • mobilesNFCEnabled()
    • mobileEnableNFCDispatch
    • mobileDisableNFCDispatch
    • nfcTagReceived
  •  revVideograbber è disponibile solo so Windows. 
  • Si può usare localhost negli indirizzi dei socket, con la seguente sintassi:
    opensocket from ":8080" to "10.2.1.1:8080"
  • cambiamenti ai messaggii nterni del messeage box
Come al solito le versioni sono tutte scaricabili su: http://downloads.livecode.com/livecode/

martedì 21 febbraio 2017

Apimac

La società italiana Apimac realizza app per Mac e iOS con livecode, potete vedere il sito a questa pagina: http://www.apimac.com
Tra le app prodotto ecco alcune delle più famose:
  • Timer/orologio
  • Criptazione file
  • iNotepad
  • iDatabase
  • cartelle segrete per Mac
  • Compressore file per MAx
  • Clean text
  • slideshow
  • Cripta email
  • Self timer

domenica 19 febbraio 2017

Tree view widget

Il widget tree view permette di creare una vista ad albero, vediamo come funziona.
La proprietà principale è l'arraydata, questa proprietà è un vero array dove ogni chiave rappresenta la voce stessa. Prima di cominciare vi consiglio di settare la proprietà readOnly su true. Ad esempio con questo codice:


   put empty into temp["Lunedì"]["Carlo"]
   put empty into temp["Lunedì"]["Mario"]
   put empty into temp["Martedì"]["Giovanna"]
   put empty into temp["Martedì"]["Laura"]
   set the sortType of widget 1 to "text"
   set the sortOrder of widget 1 to "ascending"
   set the arraydata of widget 1 to temp

otterrete questo:
Non c'è limite al numero di nodi e sotto nodi che potete fare.
Inoltre se una voce non è un nodo per altre voci, potete anche assegnargli un valore. Esempio:
   put "$ 10" into temp["Lunedì"]["Carlo"]
   put "$ 20" into temp["Lunedì"]["Mario"]
   put "ristorante" into temp["Martedì"]["Giovanna"]
   put "parco" into temp["Martedì"]["Laura"]
   set the sortType of widget 1 to "text"
   set the showseparator of widget 1 to true
   set the sortOrder of widget 1 to "ascending"
   set the arraydata of widget 1 to temp


Risultato:

mercoledì 15 febbraio 2017

giovedì 2 febbraio 2017

ControlAtLoc e ControlAtScreenLoc

Oggi vediamo due funzioni che ci dicono cosa c'è in un punto della finestra del nostro programma ControlAtLoc() e ControlAtScreenLoc().
Entrambi vi dicono cosa c'è in una posizione, ad esempio:

if controlAtLoc("10,10") is not empty then
   put the name of controlAtLoc("10,10") into temp
   answer "In posizione 10,10 c'è " & temp
end if

controlla cosa c'è alla posizione 10,10 della finestra corrente e se c'è qualcosa vi avverte.
La funzione ControlAtScreenLoc() è simile ma misura partendo dall'angolo in alto a sinistra dello schermo.
Possiamo sfruttare questa funzione per creare un gioco del puzzle, perchè basta controllare che i pezzi siamo in determinati punti. Se prendiamo ad esempio il baricentro della posizione corretta di un pezzo come punto di controllo, abbiamo un controllo preciso, ma non eccessivamente, giusto per capire se l'untente ha messo in ordine i pezzi.
Ad esempio per fare questo programma:


Basta creare 6 immagini vuote, un gruppo che le contenga, una cornice "qq" attorno al gruppo, un pulsante per caricare una nuova immagine e un pulsante come behavior per tutte e 6 le immagini.
Codice pulsante per caricare:
on mouseUp
   posizionacartella
   lock screen
   resetta
   answer file "scegli immagine"
   put it into temp
   create image
   set the filename of the last image to temp
   set the rect of the last image to the rect of group 1
   put "imm1,imm2,imm3,imm4,imm5,imm6" into lista      
   repeat for each item tItem in lista      
      export snapshot from rect ( the rect of image titem ) of this card to file tItem AS JPEG
      set the filename of image tItem to empty
      set the filename of image tItem to tItem
      set the loc of image titem to (random(383), random(257))
   end repeat   
   set the rect of group 1 to the rect of graphic "qq"
   delete the last image   
   unlock screen
end mouseUp

on resetta
   repeat with i=1 to 6
      set the rect of image i to the inizio of image i
   end repeat
end resetta

on posizionacartella
   set itemDel to "/"
   set the defaultFolder to item 1 to -2 of (the effective fileName of this stack)
end posizionacartella


Codice del behavior per tutte le immagini:

on MouseDown
   grab me   
end MouseDown

On MouseUp
   controlla
end MouseUp

on controlla
   put "imm1,imm2,imm3,imm4,imm5,imm6," into lista   
   if controlatloc("79,73") is not empty then    put the short name of controlatloc("79,73") & comma after posizione
   if controlatloc("199,73") is not empty then put the short name of controlatloc("199,73") & comma after posizione
   if controlatloc("319,73") is not empty then put the short name of controlatloc("319,73") & comma after posizione
   if controlatloc("79,193") is not empty then put the short name of controlatloc("79,193") & comma after posizione
   if controlatloc("199,193") is not empty then put the short name of controlatloc("199,193") & comma after posizione
   if controlatloc("319,193")is not empty then put the short name of controlatloc("319,193") & comma after posizione
   if lista = posizione then
      answer "Vinto"
   end if
end controlla


Fine, non serve altro.

martedì 31 gennaio 2017

listIndex

Oggi vediamo una nuova proprietà molto interessante: listIndex.
Questa proprietà permette di cambiale la numerazione di elenco puntato, come avviene anche in HTML.
Ad esempio un elenco puntato in HTML che parta del numero 2 si scrive così:

<ol>
<li value=2> prima riga</li>
<li > seconda riga</li>
</ol>

potreste fare la stessa cosa utilizzando la proprieta HTMLtext di un campo di testo, oppure utilizzare la proprietà listIndex. Se ade esempio volete che il secondo elemento sia numerato col numero 4, potreste fare così:

LineItem
set the htmlText of field 1 to "<ol><li>riga 1</li><li>riga 2</li></ol>"
set the listIndex of line 2 of field 1 to 4

ottenendo questo:

giovedì 26 gennaio 2017

TinyIDE

Sempre del programmatore Andy Piddock c'è questo plugin gratuito chiamato TinyIDE:

E' un sostituito dell'IDE di livecode, molto compatto. Potete scaricarlo da http://2108.co.uk/tinyide/

martedì 24 gennaio 2017

Master library

Il programmatore Michael Doub ha creato una raccolta di funzioni scritte da vari utenti, tutto in una comoda finestra che permette di inserirle nei nostri programmi:

Potete scaricarla da qui: https://www.dropbox.com/s/3wpwn3hfbmpl7sk/MasterLibrary.livecode?dl=0
Se volete potete contattare Michael Doub a questa email: mike@doub.com

venerdì 20 gennaio 2017

Seth

Il programmatore Andy Piddock ha rilasciato un plugin per cambiare i colori dell'IDE Livecode come preferiamo:

 
Potete scaricarlo al costo di $ 15 da: http://2108.co.uk/script-editor-themer/

lunedì 16 gennaio 2017

Creare un menu che ricorda la scelta precedente

Quando usiamo un bottone tipo pulldown menu, potrebbe farci comodo far vedere all'utente quale opzione è selezionata, nel caso lo avesse premuto per errore.
Il seguente codice aggiunto ad un pulldown menu crea questo effetto:
Chiaramente potete scegliere qualsiasi carattere:

on menuPick pItemName
   DoMyCheckMark pItemName
   switch pItemName
      #your code here
   end switch
end menuPick

on DoMyCheckMark pLabel   
   if pLabel = empty then exit DoMyCheckMark
   put   numTochar(49851) into myMark
   put the text of the target into tPrevText
   replace myMark with empty in tPrevText
   replace myMark with empty in pItemName
   put lineoffset(pLabel & cr, tPrevText & cr) into tMH
   put myMark before line tMH of tPrevText
   set the text of the target to tPrevText
end DoMyCheckMark


In questo modo potete crearvi dei menu personalizzati senza dover utilizzare il menu builder.

martedì 10 gennaio 2017

Relayer

Il comando relayer permette di mettere un un oggetto prima o dopo di un altro, senza dover contare in che layer si trovi. E' un sistema semplice per fare visualizzare gli oggetti che si sovrappongo nella maniera corretta.
Ad esempio il codice:

relayer button 1 after button 2

mette il pulsante 1 davanti (più visibile) al pulsante 2.
Ricordatevi che il primo è quello più visibile.
Qui potete vedere altri esempi: http://livecode.wikia.com/wiki/Relayer
Tenetelo a mente se sviluppate giochi o interfacce molto complicate.