elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  Bajar scrollbar de un control cualquiera
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Bajar scrollbar de un control cualquiera  (Leído 7,306 veces)
WHK
Moderador Global
***
Desconectado Desconectado

Mensajes: 6.589


Sin conocimiento no hay espíritu


Ver Perfil WWW
Bajar scrollbar de un control cualquiera
« en: 22 Septiembre 2009, 04:58 am »

Hola, a veces he tenido un par de problemas con algunos controles de vb6, por ejemplo el webbrowser puedo hacerlo bajar de forma automática al ponerle contenido con
webbrowser.Document.body.scrollTop = webbrowser.Width

pero por ejemplo este es un cliente de chat para yahoo asi que el scroll cuando lleva demasiadas lineas queda a tope y despues hay que estar bajandolo manualmente.
También me pasa con los listview que por ejemplo a agregar una nueva fila me gustaría que bajara solo pero me encuentro con ejemplos de selecteditem y setfocus que al final si tengo el programa minimizaso se hará un desmadre o si quiero estar modificando otros textbos se me hará focus al listview y se seleccionará solo impidiendo poder visualizar las listas de mas arriba.

En fin... habrá alguna api o algo en el cual yo pueda darle un control en especifico y que me baje el scrollbar hasta al tope del final?

Si las rutinas de vb6 fueran de código libre uno podría modificar estas imperfecciones  :rolleyes:


En línea

WHK
Moderador Global
***
Desconectado Desconectado

Mensajes: 6.589


Sin conocimiento no hay espíritu


Ver Perfil WWW
Re: Bajar scrollbar de un control cualquiera
« Respuesta #1 en: 22 Septiembre 2009, 09:50 am »

bueno, lo del webbrowser lo solucioné eliminando las primeras lineas antes de llegar al tope, de esa forma nunca llega a causar el error pero el listview no se me ocurre como :P


En línea

LeandroA
Moderador
***
Desconectado Desconectado

Mensajes: 760


www.leandroascierto.com


Ver Perfil WWW
Re: Bajar scrollbar de un control cualquiera
« Respuesta #2 en: 22 Septiembre 2009, 20:47 pm »

Hola no se si el listview tenga alguna propiedad referida al scroll pero pones enviar un msg de la tecla end

ejemplo.
Código:
Option Explicit

Private Const WM_KEYDOWN As Long = &H100

Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByRef lParam As Any) As Long

Private Sub Command1_Click()
    ListView1.ListItems.Add , , Now
    SendMessage ListView1.hwnd, WM_KEYDOWN, vbKeyEnd, 0&
End Sub

Saludos
En línea

WHK
Moderador Global
***
Desconectado Desconectado

Mensajes: 6.589


Sin conocimiento no hay espíritu


Ver Perfil WWW
Re: Bajar scrollbar de un control cualquiera
« Respuesta #3 en: 22 Septiembre 2009, 21:28 pm »

Genial! funciona de lujo!, muchas gracias!

ahora, un pequeño detalle,.. como puedo saber si el scrollbar está a tope hasta el final?, de esa forma me gustaría que cuando estubiera a tope entonces que siga bajando pero en caso contrario que no baje, así si yo estoy viendo unos datos de la parte de arriba de la lista que no me baje el scroll automaticamente hasta que lo vuelva a poner hasta abajo, entonces que ahi si siga.

Eso puedo hacerlo pero no sabría como detectar en que posición está ese bendito scrollbar  :P

De todas formas si no se puede no importa, igual ya es un gran avance  :xD
En línea

LeandroA
Moderador
***
Desconectado Desconectado

Mensajes: 760


www.leandroascierto.com


Ver Perfil WWW
Re: Bajar scrollbar de un control cualquiera
« Respuesta #4 en: 23 Septiembre 2009, 00:17 am »

Con el api GetScrollInfo puedes saber esa informacion.

fijate puse un timer para ir agregando algunos items una ves que aparezca el scroll fijate que al subirlo se corta y si lo pones al final continua manteniendolo en ese lugar


Código:
Option Explicit
Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByRef lParam As Any) As Long
Private Declare Function GetScrollInfo Lib "user32.dll" (ByVal hWnd As Long, ByVal n As Long, ByRef lpScrollInfo As SCROLLINFO) As Long

Private Type SCROLLINFO
    cbSize As Long
    fMask As Long
    nMin As Long
    nMax As Long
    nPage As Long
    nPos As Long
    nTrackPos As Long
End Type

Private Const WM_KEYDOWN As Long = &H100
Private Const SBS_VERT = 1

Private Const SIF_PAGE As Long = &H2
Private Const SIF_POS As Long = &H4
Private Const SIF_RANGE As Long = &H1


Private Sub Form_Load()
    Timer1.Interval = 500
End Sub

Private Sub Timer1_Timer()
    Dim SIF As SCROLLINFO
   
    SIF.cbSize = Len(SIF)
    SIF.fMask = SIF_RANGE Or SIF_PAGE Or SIF_POS
   
    GetScrollInfo ListView1.hWnd, SBS_VERT, SIF
   
   
    ListView1.ListItems.Add , , Now
   
    If (SIF.nPos + SIF.nPage > SIF.nMax) Then
        SendMessage ListView1.hWnd, WM_KEYDOWN, vbKeyEnd, 0&
    End If

End Sub

Saludos
En línea

WHK
Moderador Global
***
Desconectado Desconectado

Mensajes: 6.589


Sin conocimiento no hay espíritu


Ver Perfil WWW
Re: Bajar scrollbar de un control cualquiera
« Respuesta #5 en: 23 Septiembre 2009, 00:55 am »

genial! gracias, ya aprendí bastante.
En línea

seba123neo
Moderador
***
Desconectado Desconectado

Mensajes: 3.621



Ver Perfil WWW
Re: Bajar scrollbar de un control cualquiera
« Respuesta #6 en: 23 Septiembre 2009, 01:22 am »

Hola, para seleccionar la ultima fila en el listview con sus propiedades yo tengo esta funcion:

Código
  1. Private Sub SeleccionarUltimaFila(ByVal pListview As ListView)
  2.    pListview.ListItems(pListview.ListItems.Count).EnsureVisible
  3.    pListview.ListItems(pListview.ListItems.Count).Selected = True
  4.    pListview.SetFocus
  5. End Sub
  6.  

y la llamas:

Código
  1. Call SeleccionarUltimaFila(ListView1)

saludos.

En línea

WHK
Moderador Global
***
Desconectado Desconectado

Mensajes: 6.589


Sin conocimiento no hay espíritu


Ver Perfil WWW
Re: Bajar scrollbar de un control cualquiera
« Respuesta #7 en: 23 Septiembre 2009, 03:37 am »

no puedo hacerle focus al listview porque el software tendrá una ventana de opciones u si alguienn se pone a escribir ahi y le das focus al listview te sacará de foco el textbox e impedirá que puedas presionar botones o editar cosas ya que este listview almacena logs de accesos de servidores webs y se llenan de unas 5 o 10 filas por segundo, hacerle focus sería desastrozo pero la solución de leandro me funcionó ya que no necesito perder el foco de otro lado ni sarle selección para que baje el scrollbar de forma automática.

Además son 3 listviews diferentes y si uno se hace foco al otro se haría un desmadre xD.

Gracias de todas formas pero ya lo tengo listo.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Con adivinar un ID cualquiera puede tomar el control de este juguete sexual ....
Noticias
wolfbcn 0 2,112 Último mensaje 3 Febrero 2018, 01:53 am
por wolfbcn
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines