Italian [B4J] Inserire numeri come fa un pos

moore_it

Well-Known Member
Licensed User
Longtime User
Ciao a tutti,

vorrei creare una custom view partendo magari da un textfield che mi permetta di inserire i numeri come fa un pos o come fa pay-pal cioè partendo da destra e inserendo i numeri popolano la stringa verso sinistra mantenendo l'eventuale punto o virgola dei decimali.

Per ora grazie se avete ideee o suggerimenti attendo con pazienza e nel frattempo studio un metodo.
 

LucaMs

Expert
Licensed User
Longtime User
Inizia da prove con un semplice layout con una EditText, prima di tentare la CV.

Se inserisci il testo a runtime è ovviamente semplice; lo è meno quando sia l'utente ad inserirlo.

Non dovrai fare altro che sfruttare l'evento TextChanged, che ti restituisce il vecchio testo ed il nuovo digitato dall'utente.

Dovrai usare anche una variabile booleana globale che indichi la "fase", ovvero se la TextChanged scatti perché l'utente ha digitato o perché tu stesso modifichi il testo inserito dall'utente.

Mi sa che faccio prima a scrivere il codice che a spiegarlo :p
 

moore_it

Well-Known Member
Licensed User
Longtime User
Ciao,
guarda sto facendo di tutto ma l'evento textchange mi riporta la stringa completa e diventa difficile capire dove ci si trova
Ho trovato una bella classe che tramite jReflector mi da il valore della digitazione fatta ma anche là la gestione diventa difficile perchè bisognerebbe gestire tutti i tasti non alfanumerici (enter freccette ecc)

Mah!
 

moore_it

Well-Known Member
Licensed User
Longtime User
Infatti troppo semplice.

vorrei fare una cosa così :

.00

L'utente digita 1 e avremo

.01

L'utente digita 0 e avremo

.10

altri due digitazioni di 0 e avremo

10.00

non so spero di essermi spiegato

Ciao grazie per il tempo perso
 

LucaMs

Expert
Licensed User
Longtime User
In effetti, non ho capito (non sei tu che non ti sei spiegato, sono io che ho un gran sonno :D).

digita 1 -> .01
digita 0 -> .10
digita due volte 0 -> 10.00

è così?

Come fai a stablire se la cifra digitata debba essere un decimale o un'unità?
 

moore_it

Well-Known Member
Licensed User
Longtime User
l'idea è dare al programmatore la possibilità nella classe di dire quante cifre di decimali ha il numero come proma cosa
quindi costruire la stringa iniziale con il punto o con la virgola e gli zero in conseguenza dei decimali scelti
seconda cosa si potrebbe dire che il numero è composto da 10 cifre quindi sapere che l'array di caratteri è composto così
0000000.00 se due decimali
quindi digito e partendo sempre dal carattere + grande torno indietro sapendo che nr decimali + 1 c'è il divisore
 

LucaMs

Expert
Licensed User
Longtime User
Si ma non puoi sapere se, quando digita 5, questo vada inserito tra i decimali (e non sai nemmeno se sia la prima cifra decimale, l'ultima o una centrale, se impostasse 3 o più decimali) oppure a sinistra, come unità, decine, centinaia...

Quale sia lo scopo di tutto questo, poi... boh :D
 

moore_it

Well-Known Member
Licensed User
Longtime User
in teoria ...
la digitazione è sempre alla fine non puoi muoverti nel campo quindi il carattere è sempre l'ultimo
solo la cancellazione toglie numeri che scalerebbero a dx

Voglio creare un input numerico per valute
quello che fa pay-pal quando inserisci pagamenti
 

LucaMs

Expert
Licensed User
Longtime User
Non ho idea di come si inserisca un importo con PayPal (su app o sul web, poi?) ma, a parte che allora dovresti impedire che l'utente possa spostare il cursore dove vuole, se è come dici, ovvero solo cancellare le ultime cifre inserite, la EditText nella modalità normale inserisce le cifre normalmente da sx a dx, con la singola riga proposta in #7 fa il contrario.

Al limite potresti pensare di usare due EditText, una per la parte intera e una per la decimale.
 

moore_it

Well-Known Member
Licensed User
Longtime User
MMMM mi sa che creo una customview con un canvas, intercetto le digitazioni e mi gestisco un'array che poi visualizzerò.
Ti faccio sapere.

Grazie per ora
Ciao
 

Star-Dust

Expert
Licensed User
Longtime User
B4X:
Sub Process_Globals
    Private fx As JFX
    Private MainForm As Form
    Private TextField1 As TextField
End Sub

Sub AppStart (Form1 As Form, Args() As String)
    MainForm = Form1
    MainForm.RootPane.LoadLayout("Layout1") 'Load the layout file.
    MainForm.Show
    
    TextField1.Style="-fx-aligment: right"
End Sub

'Return true to allow the default exceptions handler to handle the uncaught exception.
Sub Application_Error (Error As Exception, StackTrace As String) As Boolean
    Return True
End Sub

Sub TextField1_TextChanged (Old As String, New As String)
    TextField1.SetSelection(0,0)
End Sub
 

Star-Dust

Expert
Licensed User
Longtime User
Mi spiace, ma cosa volevi ottenere?
 

Star-Dust

Expert
Licensed User
Longtime User
Che ti appare 0,00 e pian piano si riempiono i campi a modo di registratore di cassa?
 
Last edited:
Top