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

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  Posición y medidas de un objeto en pantalla a través de su handle
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Posición y medidas de un objeto en pantalla a través de su handle  (Leído 1,760 veces)
gulabyte

Desconectado Desconectado

Mensajes: 97



Ver Perfil
Posición y medidas de un objeto en pantalla a través de su handle
« en: 22 Julio 2008, 23:04 pm »


Cómo puedo obtener la posición de un objeto en pantalla y las medidas para luego crear un RECT (rectángulo) donde pueda restringir el cursor.

Algo como GetObjectDimensions (ByVal hWnd As Long) As RECT

o GetObjectTop, GetObjectLeft, Width y Heigh para luego crear el RECT manualmente.

Lo que necesito es alguna funcíon que devuelva la posición y medidas de un objeto mediante su handle.

Salu10 y Gracias de antemano


En línea

seba123neo
Moderador
***
Desconectado Desconectado

Mensajes: 3.621



Ver Perfil WWW
Re: Posición y medidas de un objeto en pantalla a través de su handle
« Respuesta #1 en: 22 Julio 2008, 23:30 pm »

Hola,si vos queres restringir el cursor a un determinado control podes usar esto...es del api-guide:

Código
  1. Private Type RECT
  2.    left As Long
  3.    top As Long
  4.    right As Long
  5.    bottom As Long
  6. End Type
  7. Private Type POINT
  8.    x As Long
  9.    y As Long
  10. End Type
  11. Private Declare Sub ClipCursor Lib "user32" (lpRect As Any)
  12. Private Declare Sub GetClientRect Lib "user32" (ByVal hWnd As Long, lpRect As RECT)
  13. Private Declare Sub ClientToScreen Lib "user32" (ByVal hWnd As Long, lpPoint As POINT)
  14. Private Declare Sub OffsetRect Lib "user32" (lpRect As RECT, ByVal x As Long, ByVal y As Long)
  15. Private Sub Form_Load()
  16.    'KPD-Team 1999
  17.    'URL: http://www.allapi.net/
  18.    'E-Mail: KPDTeam@Allapi.net
  19.    Command1.Caption = "Limit Cursor Movement"
  20.    Command2.Caption = "Release Limit"
  21. End Sub
  22. Private Sub Command1_Click()
  23.    'Limits the Cursor movement to within the form.
  24.    Dim client As RECT
  25.    Dim upperleft As POINT
  26.    'Get information about our wndow
  27.    GetClientRect Picture1.hWnd, client
  28.    upperleft.x = client.left
  29.    upperleft.y = client.top
  30.    'Convert window coördinates to screen coördinates
  31.    ClientToScreen Picture1.hWnd, upperleft
  32.    'move our rectangle
  33.    OffsetRect client, upperleft.x, upperleft.y
  34.    'limit the cursor movement
  35.    ClipCursor client
  36. End Sub
  37. Private Sub Command2_Click()
  38.    'Releases the cursor limits
  39.    ClipCursor ByVal 0&
  40. End Sub
  41. Private Sub Form_Unload(Cancel As Integer)
  42.    'Releases the cursor limits
  43.    ClipCursor ByVal 0&
  44. End Sub
  45.  
  46.  

cambia Me por el control, que quieras...que tenga handle..

saludos.


En línea

gulabyte

Desconectado Desconectado

Mensajes: 97



Ver Perfil
Re: Posición y medidas de un objeto en pantalla a través de su handle
« Respuesta #2 en: 23 Julio 2008, 01:56 am »


Gracias seba123neo, la clave era la función GetClientRect, para conseguir el rectángulo del objeto y después ClientToScreen para conseguir el punto del objeto y finalmente el OffsetRect para colocar al rectángulo.

Dejo el código para si alguien le sirve:
Código:
Public Sub Restringir(handle As Long)

Dim ObjectRect As RECT 'Declaramos el rectangulo (type RECT)
Dim Point As POINTAPI 'Declaramos el punto (el que será punto de partida del rectángulo, de ahí para la izquierda y para abajo)

GetClientRect handle, ObjectRect 'Obtenemos el rectángulo del objeto a través de su handle

ClientToScreen handle, Point 'Obtenemos el punto donde está colocado el objeto a través del handle

OffsetRect ObjectRect, Point.x, Point.y 'Recreamos el rectángulo esta vez colocándolo donde esta el objeto al que queremos restringir
     
Call ClipCursor(ObjectRect) 'Llamamos a la función que limita el cursor al rectángulo que hemos creado

' Si quisieramos que esto fuera realmente efectivo, que no se interrumpiera al hacer click, o al pasar a otro foco, etc... podríamos meter
' la función ClipCursor en un timer para que se repitiera consecutivamente sin tener porque crear otra vez el rectángulo.

End Sub

este es el sub para restringir el cursor al objeto mediante su hanlde

Código:
Private Type POINTAPI
        x As Long
        y As Long
End Type

Private Type RECT
    Izquierda As Long
    Arriba As Long
    Derecha As Long
    Abajo As Long
End Type

estos son los tipos del punto y el rectángulo

Código:
Private Declare Sub GetClientRect Lib "user32" (ByVal hWnd As Long, lpRect As RECT)
Private Declare Sub OffsetRect Lib "user32" (lpRect As RECT, ByVal x As Long, ByVal y As Long)
Private Declare Function ClipCursor Lib "user32" (lpRect As RECT) As Long
Private Declare Function ClientToScreen Lib "user32" (ByVal hWnd As Long, lpPoint As POINTAPI) As Long

las funciones que hay que declarar para restringir, creo que no me dejo ni una

a y gracias otra vez por la rápida respuesta
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines