Risultati da 1 a 4 di 4

Discussione: 2 problemi in vb

  1. #1
    Prontolone L'avatar di Admin
    Data Registrazione
    May 2004
    Età
    51
    Messaggi
    4,179

    Predefinito Problema 1

    Codice:
    Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
    Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
    Private Const GWL_STYLE = (-16)
    Private Const ES_NUMBER = &H2000&
    
    	Dim i As Long
    	i = GetWindowLong(Text1.hWnd, GWL_STYLE)
    	Call SetWindowLong(Text1.hWnd, GWL_STYLE, i Or ES_NUMBER)
    Con queste due API imposti la textbox, nel Form_Load, per accettare solo numeri. Quindi non devi intercettare nulla e puoi anche usare copia incolla, se non mi sbaglio, cancellare ed inserire numeri.

    VB 6 ha poi l'evento Validate, che viene eseguito ogni volta che ti sposti a un altro campo o controllo. All'interno di questo evento controlli se il numero è valido:

    Codice:
    Private Sub Text1_Validate(Cancel As Boolean)
    	
    	On Error Resume Next
    	
    	Select Case CInt(Text1.Text)
    		Case 800 To 16000
    		Case Else
    			Cancel = True
    	End Select
    	
    	If Err.Number Then
    		Cancel = True
    		MsgBox "Il testo non è un numero valido!", vbExclamation
    	ElseIf Cancel Then
    		MsgBox "Digitare un numero fra 800 e 16000!", vbExclamation
    	End If
    	
    End Sub

  2. #2
    Prontolone L'avatar di Admin
    Data Registrazione
    May 2004
    Età
    51
    Messaggi
    4,179

    Predefinito Problema 2

    Codice:
    Private Sub Command1_Click()
       Dim FoundPos As Integer
       Dim FoundLine As Integer
       ' Cerca il "ABC" nella RichTextBox1.
       FoundPos = RichTextBox1.Find("ABC", , , rtfWholeWord)
    
       If FoundPos <> -1 Then
    	  ' Mostra numero di riga dove la parola è stata trovata
    	  FoundLine = RichTextBox1.GetLineFromChar(FoundPos)
    	  MsgBox "Numero di riga: " & FoundLine
       Else
    	  MsgBox "La parola non è stata trovata."
       End If
    End Sub
    La TextBox normale non fornisce i metodi di ricerca, mentre la RichTextBox sì (fornisce anche la formattazione del testo, illimitati dimensioni, stampa, lettura e salvataggio di testi in due formati, RTF e normale).

    La RichTextBox è ideale per tutti i testi che non sono limitati a un paio di righe.

  3. #3
    Prontolone L'avatar di Admin
    Data Registrazione
    May 2004
    Età
    51
    Messaggi
    4,179

    Predefinito

    Ho capitoooooo !

    Quindi devi fare un po di esercizi... Trovata la variabile, fai di nuovo una ricerca, per il prossimo spazio, o meglio, fai:

    FoundPos = FoundPos + RichTextBox1.SelLength

    Questo ti posiziona virtualmente dopo la stringa trovata.

    Poi cerchi la riga nuova:

    FoundPos2 = RichTextBox1.Find(vbCrLf, FoundPos)

    ed estrai il valore:

    Value = Trim$(Mid$(RichTextBox1.Text, FoundPos, FoundPos2 - FoundPos + 1))

    Ora, non ho provato su VB, ma credo che è la formulina giusta. Caso mai ho sbagliato con il Mid$ (lunghezza della stringa).

    L'altra possibilità è che selezioni tutta la riga e poi con Split() di VB separi variabile e valore.

  4. #4
    Prontolone L'avatar di Admin
    Data Registrazione
    May 2004
    Età
    51
    Messaggi
    4,179

    Predefinito

    Il problema è che avendo selezionato il testo ricercato, la richtext fa la ricerca all'interno della stringa selezionata.

    Se aggiungi:

    RichText1.SelLength = 0

    oppure fai:

    FoundPos = RichTextBox1.Find(a, 0, , rtfWholeWord)

    all'inizio della funzione dovrebbe funzionare.

    Comunque, dato che leggi il file dal disco, ti converrebbe farlo completamente diverso:

    Codice:
    Private Sub Form_Load()
    	Dim ff As Long
    	Dim a As String
    	Dim b As String
    	Dim f As String
    	Dim vntSplit As Variant
    	Dim v As Variant
    	Dim var As Variant
    	
    	f = "nomefile.dat"
    	
    	ff = FreeFile
    	
    	Open f For Input As #ff
    	Do While Not EOF(ff)
    		Line Input #ff, a
    		a = Trim$(a)
    		If Len(a) Then				  'riga piena
    			If Left$(a, 1) <> "#" Then  'commento
    				b = b & a & vbCr
    			End If
    		End If
    	Loop
    	Close #ff
    	
    	If Len(b) = 0 Then
    		Exit Sub
    	End If
    	
    	b = Left$(b, Len(b) - 1)			'togli ultimo vbCr
    	vntSplit = Split(b, vbCr)		   'Separa le righe
    	
    	For Each v In vntSplit			  'per ogni riga
    		v = Replace(v, vbTab, " ")	  'converti tabulazioni
    		v = Replace(v, "  ", " ")	   'converti doppi spazi
    		var = Split(v, " ")			 'ora hai var(0) = nome, var(1) = valore
    		Select Case UCase$(var(0))
    			Case "ABC": Text1.Text = var(1)
    		End Select
    	Next
    	
    End Sub

Discussioni Simili

  1. (IT) Problemi software
    Di Admin nel forum Comunity
    Risposte: 2
    Ultimo Messaggio: 15/09/2004, 17:02

Segnalibri

Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •