Test Foro de elhacker.net SMF 2.1

Programación => .NET (C#, VB.NET, ASP) => Programación General => Programación Visual Basic => Mensaje iniciado por: <[(x)]> en 13 Abril 2009, 04:57 AM

Título: problema: obtener Rect de un item de ListView
Publicado por: <[(x)]> en 13 Abril 2009, 04:57 AM
holas

   Como dije lo q busco es obtener la la estructura rect de un item de un ListView x. Me puse a ver un cacho y logre sacar este code.

Código (vb) [Seleccionar]

Public Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
End Type

Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal Hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByRef lParam As Any) As Long
Public Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
Public Declare Function GetParent Lib "user32" (ByVal Hwnd As Long) As Long



Public Function tapRectItem(ByVal lnghWnd As Long, ByVal Index As Integer)

Dim lRet As Long
Dim tRec As RECT

lRet = SendMessage(lnghWnd, LVM_GETITEMRECT, Index, VarPtr(tRec))
   


With Form1.Picture1
 
  .Top = tRec.Top
  .Left = tRec.Left
  .Height = tRec.Bottom - tRec.Top
  .Width = tRec.Right - tRec.Left

  .Visible = True
  lRet = SetParent(.Hwnd, lnghWnd)
End With

End Function


El  problema es que no me carga la variable 'trec' con los valores.

Espero puedan ayudarme y desde ya gracias --<[(x)]>-..

Título: Re: problema: obtener Rect de un item de ListView
Publicado por: LeandroA en 13 Abril 2009, 06:21 AM
Hola a como no declares las varibles mucho no va a funcionar  ;)

y bueno si es que la declaraste el problema es como declaraste SendMessage

Option Explicit

Private Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
End Type


Private Const LVM_FIRST As Long = &H1000
Private Const LVM_GETITEMRECT As Long = (LVM_FIRST + 14)

Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
Private Declare Function GetParent Lib "user32" (ByVal Hwnd As Long) As Long
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


Public Function tapRectItem(ByVal lnghWnd As Long, ByVal Index As Integer)

Dim lRet As Long
Dim tRec As RECT

lRet = SendMessage(lnghWnd, LVM_GETITEMRECT, Index, tRec)

Debug.Print tRec.Right, tRec.Bottom

With Form1.Picture1

  .Top = tRec.Top
  .Left = tRec.Left
  .Height = tRec.Bottom - tRec.Top
  .Width = tRec.Right - tRec.Left

  .Visible = True
  lRet = SetParent(.Hwnd, lnghWnd)
End With

End Function


bueno a como veo esto te digo, el formulario tiene que estar Me.ScaleMode = vbPixels o bien llevar las cordenadas a escala.
igual hacer esto es una chanchada porque en cuanto agas un scroll sobre el listview el picture va a pasar por devajo de este.
y si pensas hacer esto para un listview externo a tu aplicacion no te va a funcionar.

Saludos
Título: Re: problema: obtener Rect de un item de ListView
Publicado por: BlackZeroX en 13 Abril 2009, 06:26 AM
mmm ya se me adelanto LeandroA...¡! bueno ya ni que.

para que veas si cambia el pinture de tamaño solo convierte en comentario esta linea:

Código (vb) [Seleccionar]
lRet = SetParent(.Hwnd, lnghWnd)

...¡!

Dulces Lunas.!¡
Título: Re: problema: obtener Rect de un item de ListView
Publicado por: <[(x)]> en 13 Abril 2009, 20:37 PM
mmm
 
gracias
y conocen alguna forma para hacer esto con un listview externo a mi aplicación??


Título: Re: problema: obtener Rect de un item de ListView
Publicado por: xkiz ™ en 13 Abril 2009, 20:49 PM
perdon si me mando cualquiera, pero proba con FindWindow...
Título: Re: problema: obtener Rect de un item de ListView
Publicado por: LeandroA en 14 Abril 2009, 20:56 PM
Hola para obtener el Rect de un item de un listview externo fijate este ejemplo (http://leandroascierto.awardspace.com/searchdescktop.php) mira dentro del modulo MdlListview tenes una funcion que te crea un array con el caption y el rect de cada item del listview, eso si, tenes que pasarle el hwnd del listview ya que este utiliza el del escritorio.

Saludos
Título: Re: problema: obtener Rect de un item de ListView
Publicado por: <[(x)]> en 15 Abril 2009, 01:14 AM


Muchisisismas Gracias LeandroA es exactamente lo q buscaba . ;-)