|
323
|
Programación / Programación Visual Basic / Re: Bajar scrollbar de un control cualquiera
|
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 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
|
|
|
324
|
Programación / Programación Visual Basic / Re: Bajar scrollbar de un control cualquiera
|
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. 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
|
|
|
326
|
Programación / Programación Visual Basic / Re: bmp to ico
|
en: 16 Septiembre 2009, 04:25 am
|
hola te recomiendo veas este link mirate la clase cFileIcon esta muy buena. algo mas sencillo pero los iconos se ven muy feos Option Explicit Private Declare Function OleCreatePictureIndirect Lib "oleaut32.dll" (pDicDesc As IconType, riid As CLSIdType, ByVal fown As Long, lpUnk As Object) As Long Private Declare Function ExtractIcon Lib "shell32.dll" Alias "ExtractIconA" (ByVal hInst As Long, ByVal lpszExeFileName As String, ByVal nIconIndex As Long) As Long Private Declare Function DestroyIcon Lib "user32.dll" (ByVal hIcon As Long) As Long
Private Type IconType cbSize As Long picType As PictureTypeConstants hIcon As Long End Type
Private Type CLSIdType id(16) As Byte End Type
Private Function ExtractCompatibleIcon(sPathFile As String, IconIndex As Long) As IPictureDisp Dim Unkown As IUnknown Dim Icon As IconType Dim CLSID As CLSIdType Dim hIcon As Long
hIcon = ExtractIcon(0, sPathFile, IconIndex)
With Icon .cbSize = Len(Icon) .picType = vbPicTypeIcon .hIcon = hIcon End With With CLSID .id(8) = &HC0 .id(15) = &H46 End With Call OleCreatePictureIndirect(Icon, CLSID, 1, Unkown) Set ExtractCompatibleIcon = Unkown
DestroyIcon hIcon End Function
Private Sub Form_Load() Me.Picture = ExtractCompatibleIcon("explorer.exe", 1) SavePicture ExtractCompatibleIcon("calc.exe", 0), "C:\calculadora.ico" 'Me.Picture = LoadPicture("C:\calculadora.ico") End Sub
Saludos
|
|
|
330
|
Programación / Programación Visual Basic / Re: Problemas con múltiples descargas
|
en: 19 Agosto 2009, 23:18 pm
|
Hola a como yo lo veo es imposible hacer lo que queres, cuando trabajas con bucles cortas todo tipo de hilo, y que es lo que hace visual basic en ese sentido, recorre un solo camino. vos podes poner a descargar 3 archivos, pero que es lo que pasa
suponete que le das tres click seguidos al boton, todo bien comienzan las tres descargas pero en realidad primero descargara es la ultima, luego la penultima y por ultimo la primera, es como que lleva a puntero a la clase que se llamo ultimo
una solucion algo fea es poder remplazar este bucle While Res <> 0 And pBytesRecibidos <> 0 And Not Cancelar por algun pulso de un timer, pero no es lo mas efeciente.
te preguntars porque con el metodo que use yo funciona, sensillamente porque la clase no intenta leer datos, sino los datos le llegan a este (AddressOf)
te lo digo por experiencia yo renegue mucho con este tema utilizando winsock.ocx
Consejo: las apis wininet no te van a servir para esto.
Saludos
|
|
|
|
|
|
|