[Resuelto] Como Crear un programa que "identifique cada linea de un textbox"???

Iniciado por agus0, 19 Diciembre 2009, 00:30 AM

0 Miembros y 1 Visitante están viendo este tema.

agus0

Hola, como andan?

Bueno...
Mi duda es la siguiente

Como podria hacer un programa que, por ejemplo yo tuviera un textbox multilinea que diga:

Citar
hola
como
andas
agus0
foro.elhacker.net

y un Boton que al apretarlo,

salga un textbox que diga, "hola", despues uno que diga "como" a continuacion de este "andas" y despues "agus0" y asi sucesivamente.

Espero que me allan entendido, Gracias;


;D  Felices fiestas y Prospero año nuevo ;D

Hasseds




Private Sub Command1_Click()
  Dim s() As String: s = Split(Text1, vbNewLine)
  Dim x As Integer: For x = 0 To UBound(s) - 1: MsgBox s(x): Next x
End Sub


Sergio Desanti

agus0

No se me ocurrio ;D ;D ;D

pero una duda

por q el bucle se come la ultima palabra???


por el -1


BlackZeroX


Código (vb) [Seleccionar]

' API de Windows SendMessage   
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''   
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long   
Const EM_GETLINECOUNT = &HBA   
Const EM_LINEFROMCHAR = &HC9   
Const EM_LINELENGTH = &HC1   
Const EM_LINEINDEX = &HBB


Con esto lo puedes hacer

Aquí un ejemplo http://www.recursosvisualbasic.com.ar/htm/trucos-codigofuente-visual-basic/40.htm

P.D.: Te andaba haciendo una funcion mejor que la del link pero al correrla se me crasheo y no tenia nada guardado asi que estodo lo que te pouedo dejar.

Dulces Lunas!¡
The Dark Shadow is my passion.

BlackZeroX

#5
En un Modulo de Clase

clsTexboX.cls

Código (vb) [Seleccionar]


'
'   /////////////////////////////////////////////////////////////
'   // Web:     http://InfrAngeluX.Sytes.Net/                  //
'   //                                                         //
'   //    |-> Pueden Distribuir Este Codigo siempre y cuando   //
'   // no se eliminen los creditos originales de este codigo   //
'   // No importando que sea modificado/editado o engrandesido //
'   // o achicado, si es en base a este codigo es requerido    //
'   // el agradacimiento al autor.                             //
'   /////////////////////////////////////////////////////////////

Option Explicit

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Const EM_GETLINE = &HC4
Private Const EM_GETLINECOUNT = &HBA
Private Const EM_LINEFROMCHAR = &HC9
Private Const EM_LINEINDEX = &HBB
Private Const EM_LINELENGTH = &HC1

Private vhwnd                                    As Long

Public Property Get Textbox_hwnd() As Long: Textbox_hwnd = vhwnd: End Property
Public Property Let Textbox_hwnd(vData As Long): vhwnd = vData: End Property

Public Function LineCount() As Long
   LineCount = SendMessage(vhwnd, EM_GETLINECOUNT, 0&, 0&)
End Function
Public Function LineLen(CharPos As Long)
   LineLen = SendMessage(vhwnd, EM_LINELENGTH, CharPos, 0&)
End Function
Public Function GetLineFromChar(CharPos As Long) As Long
   GetLineFromChar = SendMessage(vhwnd, EM_LINEFROMCHAR, CharPos, 0&)
End Function
Public Function GetCharFromLine(LineIndex As Long)
   If LineIndex < LineCount Then GetCharFromLine = SendMessage(vhwnd, EM_LINEINDEX, LineIndex, 0&)
End Function
Public Function GetLineStr(LineIndex As Long) As String
Dim StrArray()                          As Byte
Dim lngLineLen                          As Long
   If Not LineIndex >= LineCount Then
       lngLineLen = LineLen(GetCharFromLine(LineIndex))
       If Not lngLineLen < 1 Then
           ReDim StrArray(lngLineLen + 1)
           StrArray(0) = lngLineLen And 255
           StrArray(1) = lngLineLen \ 256
           SendMessage vhwnd, EM_GETLINE, LineIndex, StrArray(0)
           GetLineStr = Left$(StrConv(StrArray, vbUnicode), lngLineLen)
       End If
   End If
End Function



En un Formulario...

Código (vb) [Seleccionar]


Private Sub Form_Load()
Dim ct                                          As clsTexboX
Dim i                                           As Long
Set ct = New clsTexboX
   With Text1
       .Text = "Clase By HTTP://InfrAngeluX.Sytes.Net/" & vbCrLf & _
               "Miguel" & vbCrLf & _
               "Angel" & vbCrLf & _
               "Ortega" & vbCrLf & _
               "Avila" & vbCrLf & _
               "Alias" & vbCrLf & _
               "BlackZeroX"
   End With
   With ct
       .Textbox_hwnd = Text1.hwnd
       For i = 0 To .LineCount - 1
           MsgBox .GetLineStr(i)
       Next i
   End With
End Sub



Dulces Lunas!¡
The Dark Shadow is my passion.

Hasseds

Cita de: Hasseds en 19 Diciembre 2009, 01:07 AM



Private Sub Command1_Click()
  Dim s() As String: s = Split(Text1, vbNewLine)
  Dim x As Integer: For x = 0 To UBound(s) - 1: MsgBox s(x): Next x
End Sub





Un split y un for son suficientes.
Sergio Desanti

seba123neo

si, la verdad depende lo que uno quiere hacer, pero creo que para lo que quiere le alcanza el split y el for, lo de la api es para algo mas avanzado como un editor de texto o algo parecido, si tenes miles de lineas la api es mucho mas rapida.
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

agus0

A mi con la respuesta de Hasseds me alcanso, G R A C I A S .

Aunque voy a tener en cuenta lo de la API, Gracias ░▒▓BlackZeroҖ▓▒░