Comment avoir une petite fonction « input » bien sympa en Lua…

(improved version of Nick Steen’s website’s example)

Vous pourriez être très surpris par le fait qu’il n’y ait pas de manière native d’avoir une fonction d’entrée clavier (input) texte sur l’API Lua Nspire. En effet, c’est un peu bizarre car ce sont souvent utilisés pour de nombreux types de programmes (que ce soit dans les jeux pour taper le nom d’utilisateur, ou d’autres applications pour entrer des données utilisateur, etc.)

Quoi qu’il en soit, ne vous inquiétez pas, vous pouvez le programmer vous-même avec un petit bout de code à ajouter à votre script! Il capture en fait les touches appuyées avec la fonction on.charIn , et les enregistre ce que l’utilisateur tape dans une chaîne (concaténation). Il suffit ensuite d’afficher cette chaîne à l’écran, et c’est tout !

Si vous voulez que l’utilisateur sera en mesure de supprimer quelques lettres, il suffit d’ajouter du code pour la fonction on.backspaceKey, et c’est tout!

Dans l’exemple ci-dessous, nous avons fixé une limite de caractères à 25, mais vous pouvez ajuster cette valeur vous-même.

Bref, voilà le code dans sa totalité :

input = ""   
 
function on.paint(gc)
    gc:drawString(input,5,5,"top")  -- display string
end
 
function on.charIn(char)
    if string.len(input) <= 25 then   -- limit of 25 chars
        input = input..char   -- concatenate
        platform.window:invalidate()   --screen refreh
    end
end
 
function on.backspaceKey()
    input = string.usub(input,0,-2)  -- deleting last char
    platform.window:invalidate()  
end

2 réflexions sur “ Comment avoir une petite fonction « input » bien sympa en Lua… ”

  1. To be more flexible, I’ve found that in on.backspaceKey()

    The line:
    input = string.usub(input,0,string.len(input)-1)

    should be:
    input = string.usub(input,0,-2)

    The reason is that string.len() does not seem to handle strings with UTF-8 encoded characters above 0x7f correctly.

    For instance if the user types in « cos(30 » then the degree symbol from the « ?! » key, then types backspace to delete the degree symbol (UTF-8: c2 b0), when you execute the code: string.usub(input,0,string.len(input)-1), you get the full original string returned, it does not eliminate the degree symbol from the string.

    I have also found that even if the degree symbol is not the last character, the code string.usub(input,0,string.len(input)-1) returns the full original string.

    After some trial and error, I found that string.usub(input,0,-2) does indeed account for the UTF-8 encoding and removes the last character for the expanded character set.

Laisser un commentaire