[Risolto] Inibire digitazione numeri in campo testo

Discussioni sull'applicazione per i fogli di calcolo
Rispondi
patel
Volontario attivo
Volontario attivo
Messaggi: 4030
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

[Risolto] Inibire digitazione numeri in campo testo

Messaggio da patel »

Nel file allegato è presente una finestra di dialogo con un solo campo testo, riesco ad evitare la digitazione di un numero, ma il cursore viene riposizionato all'inizio della stringa digitata.
Questo il codice

Codice: Seleziona tutto

Dim Dlg as object

Sub Tasto_Premuto (Event As Object)	
 if instr("1234567890",Event.KeyChar) > 0 then
   dlg.getControl("TextField1").text = left(dlg.getControl("TextField1").text,len(dlg.getControl("TextField1").text)-1)
 end if		
End Sub

Sub ApriDialog
Dlg = LoadDialog("Standard","Dialog1")
dlg.getControl("TextField1").setfocus()	
Dlg.execute()
End Sub


Function LoadDialog(Libname as String, DialogName as String, Optional oLibContainer)
Dim oLib as Object
Dim oLibDialog as Object
Dim oRuntimeDialog as Object
	If IsMissing(oLibContainer ) then
		oLibContainer = DialogLibraries
	End If
	oLibContainer.LoadLibrary(LibName)
	oLib = oLibContainer.GetByName(Libname)
	oLibDialog = oLib.GetByName(DialogName)
	oRuntimeDialog = CreateUnoDialog(oLibDialog)
	LoadDialog() = oRuntimeDialog
End Function

Private Sub DlgClose                             ' CHIUSURA RIQUADRO DI DIALOGO
	dlg.endExecute()                              ' ESEGUE LA FUNZIONE DI CHIUSURA
End sub                                          ' FINE

Private Sub cmdWriteCell         

   dim Cognome as String                             ' Var. testo
   Cognome = dlg.getControl("TextField1").text       ' LEGGO IL VALORE INSERITO DALL'UTENTE
    Sheet = ThisComponent.Sheets(0)
    c = Sheet.createCursor
    c.gotoEndOfUsedArea(false)
    LastRow = c.RangeAddress.EndRow + 2
    Sheet.getCellRangeByName("A" & LastRow).String = Cognome
    dlg.getControl("TextField1").text = ""
    dlg.getControl("TextField1").setfocus()
End sub  

Allegati
DialogoNoNumeri.ods
(11.79 KiB) Scaricato 106 volte
Ultima modifica di patel il martedì 8 novembre 2016, 17:52, modificato 1 volta in totale.
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Gaetanopr
Volontario
Volontario
Messaggi: 3316
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: Inibire digitazione numeri in campo testo

Messaggio da Gaetanopr »

Ti basta selezionare il testo e posizionarti alla fine di questo.

Codice: Seleziona tutto

Sub Tasto_Premuto (Event As Object)
       Dim Sel as new com.sun.star.awt.Selection
     
       if instr("1234567890",Event.KeyChar) > 0 then
          Sel.Min = len(dlg.getControl("TextField1").text)-1
          Sel.Max = len(dlg.getControl("TextField1").text)-1
          dlg.getControl("TextField1").text = left(dlg.getControl("TextField1").text,len(dlg.getControl("TextField1").text)-1)
          dlg.getControl("TextField1").setSelection(Sel)'   
       end if
end sub
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
patel
Volontario attivo
Volontario attivo
Messaggi: 4030
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Inibire digitazione numeri in campo testo

Messaggio da patel »

grazie Gaetano, funziona ma non l'ho capita, me la puoi spiegare ?
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Gaetanopr
Volontario
Volontario
Messaggi: 3316
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: Inibire digitazione numeri in campo testo

Messaggio da Gaetanopr »

Sel.Min e Sel.Max indicano il punto di inizio e di fine della selezione, se io indico la lunghezza della stringa(naturalmente -1) il cursore una volta eliminato l'ultimo carattere(numero in questo caso) andrà a posizionarsi alla fine

Codice: Seleziona tutto

dlg.getControl("TextField1").setSelection(Sel)
, cioè selezionerà la parte finale.
Per capire meglio il funzionamento ti basta cambiare

Codice: Seleziona tutto

Sel.Min = len(dlg.getControl("TextField1").text)-1
          Sel.Max = len(dlg.getControl("TextField1").text)-1
con - 2 e vedrai dove si posiziona il cursore.
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
patel
Volontario attivo
Volontario attivo
Messaggi: 4030
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Inibire digitazione numeri in campo testo

Messaggio da patel »

tutto chiaro ora, grazie.
Sarebbe possibile invece di utilizzare la soluzione sopra riportata inviare un backspace ?

Codice: Seleziona tutto

      if instr("1234567890",Event.KeyChar) > 0 then
         invia  backspace
       end if
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Gaetanopr
Volontario
Volontario
Messaggi: 3316
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: Inibire digitazione numeri in campo testo

Messaggio da Gaetanopr »

Non so farlo.
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
patel
Volontario attivo
Volontario attivo
Messaggi: 4030
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Inibire digitazione numeri in campo testo

Messaggio da patel »

peccato :crazy: ci ho provato
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Rispondi