Borrar última línea de un textbox

Iniciado por extreme69, 11 Mayo 2012, 09:14 AM

0 Miembros y 3 Visitantes están viendo este tema.

extreme69

#10
¡Me encantan! son super nerds, aún ya teniendo la solución se ponen a discutir entre ustedes la mejor manera de hacerlo, adoro este foro y sus participantes  ;-)

Pero estoy a favor de un código simple, esto obviamente es parte de un código mas extenso (que a veces son muchisimas páginas de código) así que siempre es bueno mantener el código comentado, corto y simple.

Mi solución fue usar un listbox y:

'El último item del listbox
List1.ListIndex = List1.ListCount - 1

'Remueve el último item del listbox
List1.RemoveItem List1.ListIndex


Creo que más simple imposible, también agregué un if para cuando se acaban los items de la lista, sino tira error.

¡Gracias a todos! :)

PD: Lo usé para hacer un "mailer" para enviar newsletters, está basado en php y el software en VB ya que no puedo usar cronjob en un shared hosting con limite de 200 mails por hora, con esto le digo que mande 1 mail cada 30 segundos y son 120 mails por hora, y aún me queda margen para enviar mails manualmente sin caer en el limite, plus, no saturo el sitio con visitas simultaneas (es un hosting malisimo). Buena idea, ¿no? me ahorré un dedicado para un sitio que realmente no lo merece :P

seba123neo

para hacer todas estas cosas con el textbox, por ejemplo saber la cantidad de lineas, contar palabras, etc..podes usar la api SendMessage, que te ofrece un monton de funciones para poder trabajar con los textbox y manipularlos a tu antojo.

aca hay una implementacion de lo que seria borrar la linea que vos quieras con esta api.

aparte con apis es muhco mas rapido si tenes miles de lineas.

Código (vb) [Seleccionar]
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 Declare Function LockWindowUpdate Lib "user32" (ByVal hwndLock As Long) As Long

Private Const EM_SETSEL = &HB1
Private Const EM_GETLINECOUNT = &HBA
Private Const EM_LINEINDEX = &HBB

Private Sub BorrarLinea(ByVal pNumeroLinea As Long)
   Dim vComienzo As Long, vFin As Long, vCantLineas As Long
   
   With Text1
       vCantLineas = SendMessage(.hwnd, EM_GETLINECOUNT, 0, ByVal 0&)
       
       Select Case True
           Case pNumeroLinea > vCantLineas - 1
           Exit Sub
       Case pNumeroLinea = 0 And vCantLineas = 1
           vComienzo = 0
           vFin = Len(.Text)
       Case pNumeroLinea = vCantLineas - 1
           vComienzo = SendMessage(.hwnd, EM_LINEINDEX, pNumeroLinea, ByVal 0&) - 1
           vFin = Len(.Text) - vComienzo + 1
       Case Else
           vComienzo = SendMessage(.hwnd, EM_LINEINDEX, pNumeroLinea, ByVal 0&)
           vFin = SendMessage(.hwnd, EM_LINEINDEX, pNumeroLinea + 1, ByVal 0&) - vComienzo
       End Select
       
       .SetFocus
       Call SendMessage(.hwnd, EM_SETSEL, vComienzo, ByVal vFin)
       
       LockWindowUpdate .hwnd
       .SelStart = vComienzo
       .SelLength = vFin
       .SelText = vbNullString
       LockWindowUpdate False
   End With
End Sub

Private Sub Command1_Click()
   Call BorrarLinea(2) ' Borra la tercera linea del textbox
End Sub


saludos.

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

extreme69

#12
Cita de: seba123neo en 12 Mayo 2012, 19:59 PM
para hacer todas estas cosas con el textbox, por ejemplo saber la cantidad de lineas, contar palabras, etc..podes usar la api SendMessage, que te ofrece un monton de funciones para poder trabajar con los textbox y manipularlos a tu antojo.

aca hay una implementacion de lo que seria borrar la linea que vos quieras con esta api.

aparte con apis es muhco mas rapido si tenes miles de lineas.


Está muy lindo el código, por ahí venía intentando yo, pero sin éxito, de todas formas ya está resuelto de la manera más fácil posible. Gracias.