Newsgroup: it.comp.lang.visual-basic
Titolo: Non ci riesco.

 Nel ringraziarvi porgo i miei piu' cordiali saluti al NG.
Forse cosi`? Fammi sapere se funziona.
Option Explicit
Private Sub Form_Load( _
)
  Text1.Text = ""
End Sub
Private Sub Text1_KeyPress( _
  ByRef KeyAscii As Integer _
)
  Const c_strText As String _
    = "??????????" & vbCrLf & "??????????" & vbCrLf _
    & "??????????" & vbCrLf & "??????????" & vbCrLf _
    & "??????????" & vbCrLf & "??????????" & vbCrLf _
    & "??????????" & vbCrLf & "??????????" & vbCrLf _
    & "??????????" & vbCrLf & "??????????" & vbCrLf _
    & "??????????" & vbCrLf & "??????????" & vbCrLf _
    & "??????????" & vbCrLf & "??????????" & vbCrLf _
    & "??????????" & vbCrLf & "??????????" & vbCrLf _
    & "??????????" & vbCrLf & "??????????" & vbCrLf _
    & "??????????" & vbCrLf & "??????????"
  With Text1
    If Not (.Text & Chr$(KeyAscii) _
      Like Left$(c_strText, Len(.Text) + 1)) _
    Then _
      KeyAscii = 0
  End With
End Sub
--
Ciao.
Maurizio
--------
?SPQR(C)
 X
--------

Diabolico :)
ciao, hal

Chiedo scusa se insisto ma per me è un grosso problema.
Sto' impazzendo con una textbox.
Vorrei formattarla in modo che non ci si possa digitare
dentro non piu' 10 caratteri per 20 righe.
Nel ringraziarvi porgo i miei piu' cordiali saluti al NG.
Roberto.

 ha scritto nel messaggio
news:98u837$3kgru$1...@ID-52090.news.dfncis.de...


 Si puo' fare qualcosa per miglioralo?
Speravo ci pensassi tu. ;-)))
In effetti la "cosa" era piu` che altro una ipotesi di lavoro...
Sempre lasciando da parte le funzioni dell'API, potresti esplorare
quest'altra strada.
Option Explicit
Private Sub Form_Load( _
)
  Text1.Text = ""
End Sub
Private Sub Text1_KeyPress( _
  ByRef KeyAscii As Integer _
)
  Dim intIndex As Integer
  Dim strText() As String
  strText = Split(Text1.Text, vbCrLf)
  If UBound(strText) >= 20 Then
    KeyAscii = 0
  Else
    For intIndex = LBound(strText) To UBound(strText)
      If Len(strText(intIndex)) >= 10 Then
        KeyAscii = 0
        Exit For
      End If
    Next
  End If


 Sempre lasciando da parte le funzioni dell'API, potresti esplorare
quest'altra strada.
[...]
Ho provato a far girare e mi sembra un strada migliore dell'altra. Ti
ripropongo il tutto con le necessarie integrazioni. Fammi sapere cosa non
funziona o cosa si puo` migliorare, grazie.
Option Explicit
Private Sub Form_Load( _
)
  Text1.Text = ""
End Sub
Private Sub Text1_KeyPress( _
  ByRef KeyAscii As Integer _
)
  On Error GoTo IfErr
  Const c_intMaxRows  As Integer = 4
  Const c_intMaxChars As Integer = 10
  Dim intLenText  As Integer
  Dim strText()   As String
  Dim intIndex    As Integer
  With Text1
    intLenText = Len(.Text)
    If intLenText Then
      Debug.Print "'----------"
      Debug.Print _
          Left$(.Text, .SelStart) _
        ; Chr$(KeyAscii) _
        ; Mid$(.Text, 1 + .SelStart + .SelLength)
      strText _
        = Split( _
              Left$(.Text, .SelStart) _
            & Chr$(KeyAscii) _
            & Mid$(.Text, .SelStart + .SelLength) _
            , vbCrLf)
    End If
  End With
  If intLenText Then
    If KeyAscii = 13 Then
      If (UBound(strText) + 1) >= c_intMaxRows _
      Then _
        KeyAscii = 0
    Else
      For intIndex = LBound(strText) To UBound(strText)
        If Len(strText(intIndex)) >= c_intMaxChars + 2 Then
          KeyAscii = 0
          Exit For
        End If
      Next
    End If
  End If
ExitSub:
  Text2.Text = Err.Number
  Exit Sub
IfErr:
  Resume ExitSub


 End Sub
..Signur!... Se va bene a te, va bene a tutti, no? Ma ..forse ..non ho
capito la
...domanda, mi spiace.
In pratica sto' usando un prg dhe apre un file di excel per via di un
istruzione data da me,
invece vorrei aprire qualsiasi file excel come normalmente accade con il
tasto "sfoglia"
ciao e ancora grazie
Roberto.
Dim ObjExcel As Excel.Application
Dim i As Long
Private Sub Command1_Click()
Set ObjExcel = New Excel.Application
ObjExcel.Visible = False
ObjExcel.SheetsInNewWorkbook = 1
ObjExcel.Workbooks.Open "C:\cartel1.XLS"
i = 1
Do
i = i + 1
DoEvents
ListView1.ListItems.Add 1, , ObjExcel.Cells(i, 2).Value
ListView1.ListItems(1).SubItems(1) = ObjExcel.Cells(i, 2).Value
ListView1.ListItems(1).SubItems(2) = ObjExcel.Cells(i, 3).Value
ListView1.ListItems(1).SubItems(3) = ObjExcel.Cells(i, 4).Value

 Riguardo alla domanda sull'apertura del file di excel:
A questo proposito continuiamo il discorso in quel thread, ok?


> Roberto:
Scusate se mi intrometto, ma non è sufficiente andare nell'evento KeyPress e
impostare KeyAscii = 0 se la lunghezza della riga = 10 e (KeyAscii = vbCr
AND riga corrente = 20)?
Tutto questo si può ottenere con 4 righe di codice e la
SendMessage(),
Const EM_LINEFROMCHAR = &HC9
Const EM_LINEINDEX = &HBB
Const EM_LINELENGTH = &HC1
Ciao

 Const EM_LINELENGTH = &HC1
E` la solita storia. E meno male che nel mio primo (o secondo?) post del
thread avevo scritto:
    "[...] Sempre lasciando da parte le funzioni dell'API [...]"
Certo che e` sufficiente fare come dici. Come e` anche vero che usare vb non
l'ha ordinato nessun dottore. Ma e` anche vero che non tutti sono allo
stesso stadio di preparazione o di conoscenza, ne' hanno alle spalle lo
stesso iter formativo. E un po' di allenamento col basic "puro" :-) non fa
male a nessuno, credo. Io poi cerco di adeguarmi, preferisco mettermi a
fianco dell'interlocutore e far la strada con lui piuttosto che spingere o
tirare. Se Roberto, leggendo la mia frase qui sopra, avesse drizzato le
orecchie e avesse detto, nonno'... parlami di API... avrei sfoderato le
zanne. O passato la palla.
:-)


male a nessuno, credo.
Personalmente il mio stile di programmazione è diventato nettamente più
lineare da quando uso le api.
Prima facevo su anch'io i pastoni che vi stavate scambiando.
Potrebbe essere un trampolino di lancio: non è niente di complesso e tanto
prima o poi tutti devono passare attraverso l'alveare.
Ciao

 > Maurizio Borrelli:

Anche se chiamare pastone del codice che fa dignitosamente quel che deve
fare mi sembra ingiusto, tutto sommato posso anche essere d'accordo. Resta
il fatto che, API o non API, escogitare un algoritmo, ragionare su un
problema, far funzionare del codice con gli strumenti che si hanno a
disposizione, sono i gradini da salire per potersi trovare su quel
trampolino.
A proposito, le costanti da usare nel caso in esame sono:
Const EM_GETLINECOUNT = &HBA
Const EM_LINELENGTH = &HC1
