Italian Immissione di un IP

AlpVir

Well-Known Member
Licensed User
Longtime User
Qualcuno sa se c'è un dialog simile a quelli disponibili nella libreria Dialogs che consenta la facile immissione di un IP (4 numeri separati da un punto) toccando semplicemente un "+" o un "-" ?
Da qualche parte ho visto qualcosa del genere ma non sono riuscito a ri-trovarlo.
Grazie per l'attenzione !
 

LucaMs

Expert
Licensed User
Longtime User
Potrebbe esserci qualcosa per verificare un IP (tramite Regex) o magari una EditText custom che inserisca i punti automaticamente, ma con "+" e "-" cosa ottieni? L'incremento di ciascun blocco? Troppi click dovresti fare!
 

AlpVir

Well-Known Member
Licensed User
Longtime User
Nel mio caso non è proprio così. In un file INI memorizzerei "192.168.1.1" e poi visualizzerei i 4 numeri con 4 segni "+" e 4 segni "-".
In pratica il tutto si ridurrebbe a cliccare sull'uno più a destra. Zero o uno o due o al massimo tre click e sono a posto perchè gli IP saranno " "192.168.1.1" o "192.168.1.2" o "192.168.1.3", ecc.
 

Spinter

Active Member
Licensed User
Longtime User
avevo fatto qualche cosa prova a vedere se ti è utile

B4X:
Sub Globals
    Dim EditText_save_ip1 As EditText
    Dim EditText_save_ip2 As EditText
    Dim EditText_save_ip3 As EditText
    Dim EditText_save_ip4 As EditText
End Sub

Sub Activity_Create(FirstTime As Boolean) 
    EditText_save_ip1.InputType = EditText_save_ip1.INPUT_TYPE_NUMBERS
    EditText_save_ip2.InputType = EditText_save_ip2.INPUT_TYPE_NUMBERS 
    EditText_save_ip3.InputType = EditText_save_ip3.INPUT_TYPE_NUMBERS
    EditText_save_ip4.InputType = EditText_save_ip4.INPUT_TYPE_NUMBERS
end sub

Sub EditText_save_ip1_TextChanged (Old As String, New As String)
    Select Case EditText_save_ip1.text.Length 
Case 0,1,2,3 
Case Else
  EditText_save_ip1.text=Old
End Select
ServerIp=iptext(EditText_save_ip1.text,EditText_save_ip2.text,EditText_save_ip3.text,EditText_save_ip4.text)

End Sub
'------------------ip2---------------------
Sub EditText_save_ip2_TextChanged (Old As String, New As String)
        Select Case EditText_save_ip2.text.Length 
Case 0,1,2,3 
Case Else
  EditText_save_ip2.text=Old
End Select
ServerIp=iptext(EditText_save_ip1.text,EditText_save_ip2.text,EditText_save_ip3.text,EditText_save_ip4.text)
End Sub
'------------------ip3---------------------
Sub EditText_save_ip3_TextChanged (Old As String, New As String)
        Select Case EditText_save_ip3.text.Length 
Case 0,1,2,3 
Case Else
  EditText_save_ip3.text=Old
End Select
ServerIp=iptext(EditText_save_ip1.text,EditText_save_ip2.text,EditText_save_ip3.text,EditText_save_ip4.text)
End Sub
'------------------ip4---------------------
Sub EditText_save_ip4_TextChanged (Old As String, New As String)
        Select Case EditText_save_ip4.text.Length 
Case 0,1,2,3 
Case Else
  EditText_save_ip4.text=Old
End Select
ServerIp=iptext(EditText_save_ip1.text,EditText_save_ip2.text,EditText_save_ip3.text,EditText_save_ip4.text)
End Sub

Public Sub iptext(iptext1 As String, iptext2 As String , iptext3 As String, iptext4 As String)As String
Dim t As String 
t=iptext1 & "." & iptext2 & "." & iptext3 & "." & iptext4
t= t.Replace(" ","")
Return t
End Sub
 

AlpVir

Well-Known Member
Licensed User
Longtime User
Questa la mia soluzione ...
Anche se sono convinto che c'era - da qualche parte - un qualcosa già bello e pronto e soprattutto più valido esteticamente (ma il mio esempio può sicuramente essere migliorato)

B4X:
Sub Process_Globals
End Sub

Sub Globals
    Dim BotOK            As Button
    Dim IPX(4)          As Label
    Dim BP(4)            As Button
    Dim BM(4)            As Button
End Sub

Sub Activity_Create(FirstTime As Boolean)
    Dim gloIP_PC = "192.168.1.2"    As String
    Dim S                            As String
    Dim ele(4)                        As String
    Dim i                            As Int
    '
    Activity.Color = Colors.White
    S=gloIP_PC.Replace (".",",")
    ele = Regex.Split(",",S)
   
    For i=0 To 3
        IPX(i).Initialize ("IPX")
        Activity.AddView (IPX(i),5dip+DipToCurrent(70*i),105dip,60dip,40dip)
        IPX(i).Color = Colors.LightGray
        IPX(i).TextColor =Colors.Black
          IPX(i).Gravity = Gravity.CENTER
          IPX(i).Text = ele(0)
        IPX(i).TextSize = 24   
        IPX(i).Text = ele(i)
        '
        BP(i).Initialize ("BotPiu")
        Activity.AddView (BP(i),5dip+DipToCurrent(70*i),65dip,60dip,38dip)
        BP(i).Text ="+"
        BP(i).TextSize = 18
        BP(i).Typeface = Typeface.MONOSPACE
        BP(i).Tag = i 
       
        BM(i).Initialize ("BotMeno")
        Activity.AddView (BM(i),5dip+DipToCurrent(70*i),145dip,60dip,38dip)
        BM(i).Text ="-"
        BM(i).TextSize = 18
        BM(i).Typeface = Typeface.MONOSPACE
        BM(i).Tag = i 
    Next
    For i=0 To 2
        Dim Punto    As Label
        Punto.Initialize ("")
        Activity.AddView (Punto,68dip+DipToCurrent(70*i),120dip,10dip,30dip)
        Punto.Text ="."
        Punto.TextColor = Colors.Black
        Punto.TextSize = 24
    Next
    BotOK.Initialize ("BotOK")
    Activity.AddView (BotOK,5dip,185dip,270dip,40dip)
    BotOK.TextSize = 18
    BotOK.Text ="OK"
End Sub

Sub BotPiu_click
    Dim B             As Button
    Dim Valore      As Int
    B=Sender
     Valore = IPX(B.Tag).Text
    If Valore<255 Then
        IPX(B.Tag).Text = Valore + 1
    End If
End Sub

Sub BotMeno_click
    Dim B             As Button
    Dim Valore      As Int
    B=Sender
     Valore = IPX(B.Tag).Text
    If Valore>0 Then
        IPX(B.Tag).Text = Valore - 1
    End If
End Sub

Sub BotOK_click
    Dim S            As String
    S=IPX(0).text & "." & IPX(1).text & "." & IPX(2).text & "." & IPX(3).text
    Msgbox (S,"IP")
End Sub

P.S.: Qualcuno mi sa dire il perchè sono COSTRETTO a rimpiazzare i punti di separazione dell'IP con una virgola e POI applicare l'istruzione ele = Regex.Split(",",S) e non direttamente ele = Regex.Split(".",S) ?
 

LucaMs

Expert
Licensed User
Longtime User
P.S.: Qualcuno mi sa dire il perchè sono COSTRETTO a rimpiazzare i punti di separazione dell'IP con una virgola e POI applicare l'istruzione ele = Regex.Split(",",S) e non direttamente ele = Regex.Split(".",S) ?
Perchè il punto ha un significato speciale per Regex. Se lo fai precedere da un carattere di Escape "\" puoi farlo direttamente:
ele = Regex.Split("\.",S)


Già che ci sono, aggiungo un "trucchetto" (si fa per dire):
usando la Split non è necessario conoscere "al priore di Anzio" il numero di elementi che verranno estratti, quindi si sarebbe potuto dichiarare l'array:

B4X:
Dim ele() As String

e poi, dopo lo Split:
B4X:
For i = 0 to ele.Length - 1
    log(ele(i))
Next

(in questo caso si sa già che saranno 4, ovviamente).
 
Last edited:
Top