martedì 21 maggio 2019

I margini del testo

Quando si mettono i campi nel testo questi hanno i margini impostati a 8 pixel dai bordi.
Ma possiamo cambiarli sia con la proprietà margins per impostare tutti e 4 i valori insieme, ad esempio:

on mouseUp
   set the margins of field 1 to 0
end mouseUp


oppure tutti e quattro i lati separatamente:

on mouseUp
   set the margins of field 1 to 2,10,10,0
end mouseUp


Oppure potete utilizzare le singole proprietà topMargin, rightMargin , bottomMargin , leftMargin.

mercoledì 3 aprile 2019

Testo giustificato

Per fare un testo giustificato in livecode non c'è l'opzione già pronta,comunque ci sono delle soluzioni.
Una è un widget gratuito per testi, hhtextEdit:
E' basato sul widget browser ed è pieno di opzioni. Potete scaricarlo da: http://livecodeshare.runrev.com/stack/860/HHTextEditBasic

In alternativa, come seconda soluzione, potete mettere questo codice in un campo di testo:

local finaltext

on closefield
   justifyme
end closefield

on justifyme
   lock screen
   put empty into finaltext
   stripspaces
   set the dontwrap of me to true
   put the text of me into temp
   set the text of me to empty
   replace return with (space & chartonum(1) & space ) in temp #we separete words with newlines attached, and much more, newline is a word now
   put the width of me into tw
   put the number of words of temp into nw
   repeat with i=1 to nw
      if word i of temp is chartonum(1) then
         put return after me
         put the text of me after finaltext
         put empty into me
         next repeat
      end if
      put word i of temp after me
      if the formattedwidth of me > tw then
         delete the last word of me
         addspaces 0
         put word i of temp & space into me         
      else
         put space after me
      end if
   end repeat
   put the text of me after finaltext
   set the text of me to finaltext
   set the dontwrap of me to false
   unlock screen
end justifyme

on addspaces temp
   if the number of words of me is 1 then
      put the text of me after finaltext
      set the text of me to empty
      exit addspaces
   end if
   
   put the width of me into tw
   put the number of words of me -1 into nspaces #the correct number of spaces between words is nspaces -1, but we'll use mod
   put temp mod nspaces into temp
   add 1 to temp
   put space after word temp of me
   if the formattedwidth of me > tw then
      put the number of chars of word 1 to temp of me into tc
      delete char (tc +1) of me
      put the text of me & space after finaltext
      set the text of me to empty
   else
      addspaces temp
   end if
end addspaces

on stripspaces
   put the text of me into temp
   repeat for each char tchar in temp
      if (tchar is space) and (the last char of t2 is space) then
         next repeat
      else
         put tchar after t2
      end if
   end repeat
   set the text of me to t2
end stripspaces

on resizeControl
   justifyme   
end resizeControl


Il risultato è buono:

venerdì 22 marzo 2019

Fare un pulsante toggle

I pulsati tipo toggle sono pulsanti che rimangono schiacciati finchè non li premete nuovamente. Ecco un esempio:

Per ottenere questo effetto, basta usare il seguente codice:
on MouseUp
   put the hilite2 of me into hitemp
   if hiTemp then
      set the hilite2 of me to false
   else
      set the hilite2 of me to true
   end if
end MouseUp

setprop hilite2 temp
   set the hilite of me to temp
   set the hilite2 of me to temp
end hilite2

venerdì 22 febbraio 2019

Menu che si espandono

Oggi vediamo come fare dei menu personalizzati che si espandono.
Negli esempi a seguire userò solo dei pulsanti, ma potete merrci dentro qualsiasi combinazione di oggetti.

Cominciamo dalla fine e vediamo cosa cerchiamo di ottenere:
 Per realizzarlo useremo un sacco di gruppi, ecco la struttura che creeremo:
Prima di tutto create un pulsante e chiamatelo main, poi un altro pulsante e chiamatelo +. Ridimensionateli per ottenere questo:
Ora nel pulsante + mettete questo codice:

on mouseUp
   if the label of me is "+" then
      showMe
      set the label of me to "-"
   else
      hideMe
      set the label of me to "+"
   end if
end mouseUp


Raggruppate i due pulsanti insieme e chiamate il gruppo Main.
Ora create un altro pulsante e chiamatelo slider, ridimensionatelo e mettetelo sotto Main in questo modo:

Ora cliccate sul pulsante Slider e fatelo gruppo (si solo del pulsante slider) e chiamate il gruppo Slider.
Adesso raggruppate insieme il gruppo slider col gruppo Main e chiamatelo element 1.
Impostate la proprietà lockLocation del gruppo "element 1" su true.
Mettete questo codice nel gruppo element 1:

on showMe
   repeat while the top of group "Slider" of me < the bottom of group "Main" me - 4
      lock screen
      set the bottom of group "Slider" of me to the bottom of group "Slider" me + 4
      set the height of me to the height of me + 4
      layoutChanged the short name of me, 4
      unlock screen
      wait 10 milliseconds with messages
   end repeat
end showMe

on hideMe
   repeat while the bottom of group "Slider" of me > the bottom of group "Main" of me
      lock screen
      set the bottom of group "Slider" of me to the bottom of group "Slider" of me - 4
      set the height of me to the height of me - 4
      layoutChanged the short name of me, -4
      unlock screen
      wait 10 milliseconds with messages
   end repeat
end hideMe


Clonate il gruppo "element 1" 5 volte, per esempio. Numerati correttamente.
Mettete ogni clone sotto l'elemento precedente, ad esempio il 2 sotto l'uno e così via.
Raggruppateli e chiamate il gruppo List.
Impostate la proprietà lockLocation del gruppo List su true.
Mettete questo codice nel gruppo List:

on layoutChanged pGroup, pSize
   lock messages
   
   local tElementCount
   
   if pGroup is "Element Template" then exit layoutChanged
   
   put word 2 of pGroup into tElementCount
   add 1 to tElementCount -- look for the next one
   repeat while there is a group ("Element" && tElementCount)   
      set the top of group ("Element" && tElementCount) to the top of group ("ElemenT" && tElementCount) + pSize--
      add 1 to tElementCount
   end repeat
   set the vscroll of me to the vscroll of me
   
   if the bottom of group pGroup of me > the bottom of me then
      set the scroll of me to the scroll of me + pSize
   end if
   set the vScrollBar of group "List" to the formattedHeight of group "List" > the height of group "List"
   set the vScroll of group "List" to the vScroll of group "List"
   unlock messages
end layoutChanged


FINITO!!!

martedì 19 febbraio 2019

Gestionale completo di fatturazione elettronica in italiano

Ci credereste che sia possibile fare un gestionale completo con la fatturazione elettronica italiana con sole 900 righe di codice? Ebbene con livecode e la società italiana WhiteFly (http://www.borzini.it/) è stato già fatto.
C'è tutto quello che serve ad una azienda: dalle gestione delle anagrafiche, al carico e scarico di magazzino, alla fatturazione e a tutte quelle funzioni richieste da un applicazione del genere.

Per più informazioni scrivete a info@borzini.it

venerdì 1 febbraio 2019

Software gestione negozi e registratori di cassa

Ecco alcune schermate di un programma realizzato con Livecode per la gestione dei negozi di una catena, e per il software dei registratori di cassa.
Al momento non sono autorizzato a mostrarvi il codice, ma già dalle immagini potete capire che con livecode potete fare praticamente tutto:



venerdì 25 gennaio 2019

Trovare la posizione del cursore in testo

Se l'utente sta scrivendo un campo di testo (field) e vi serve sapere ad esempio dove si trova il cursore dovete usare il selectedChunk.
Ad esempio per sapere a che riga si trova il cursore potete usare questo codice:


   put word 2 of the selectedChunk into temp
   put the number of lines of char 1 to temp of field 1