Foro de elhacker.net

Programación => Programación General => Mensaje iniciado por: poyson1 en 20 Mayo 2010, 22:44 pm



Título: Obtener Coordenadas X e Y Dentro de un Panel o Canvas (C#)
Publicado por: poyson1 en 20 Mayo 2010, 22:44 pm
Hola a todos, quisiera por favor que alguien me ayude con una respuesta que necesito, quiero obtener las coodenadas x e y de cualquier punto determinado al cual haga clic desde dentro de un panel o canvas contenido en un form, si me salgo del panel o canvas x e y seran cero (0).

Actualmente lo tengo hecho utilizando la Clase Point de System.Drawing y las coordenadas que he estado capturando  son las de cualquier parte de la pantalla completa del monitor y las que quiero es desde dentro de un panel o canvas de un form.

No se como especificarle a una instancia de Point que su espacio total sera el size del panel o canvas.

Agradecera cualquier ayuda.


Título: Re: Obtener Coordenadas X e Y Dentro de un Panel o Canvas (C#)
Publicado por: poyson1 en 21 Mayo 2010, 15:54 pm
Bueno parece que el tema no solo se me hace a mi dificil...
Aqui les pegare un codigo que he resuelto a ver si el mismo les da alguna idea y me pueden ayudar.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace PosicionCursor
{
    public partial class frmMain : Form
    {
        
        [DllImport("user32.dll")]
        // GetCursorPos()hace todo posible
        static extern bool GetCursorPos(ref Point lpPoint);
        // Variable que necesitaremos para contar los pixeles viajados
        static protected long totalPixels = 0;
        static protected int currX;
        static protected int currY;
        static protected int diffX;
        static protected int diffY;

        public frmMain()
        {
            InitializeComponent();
        }

        private void tmrDef_Tick(object sender, EventArgs e)
        {          
            //Nuevo punto el cual sera actualizado por la funcion con las coordenadas actuales
            Point defPnt = new Point();          
            //Llama la funcion y pasa el Punto, dfPnt
            GetCursorPos(ref defPnt);            
            // Ahora despues de llamar la funcion, defPnt conteniendo las coordenadas las cuales podemos leer
            lblCoordX.Text = "X = " + defPnt.X.ToString();
            lblCoordY.Text = "Y = " + defPnt.Y.ToString();
            // Si el cursor se mueve para donde sea
            if (diffX != defPnt.X | diffY != defPnt.Y)
            {
                // Calcula la distancia del movimiento (horizontal y verticalmente)
                diffX = (defPnt.X - currX);
                diffY = (defPnt.Y - currY);
                // La diferencia sera negativa si el cursor fue movido a la izquierda o arriba
                // y si eso sucede, hara el numero positivo
                if (diffX < 0)
                {
                    diffX *= -1;
                }
                if (diffY < 0)
                {
                    diffY *= -1;
                }
                // Agregar a los pixeles viajados un contador
                totalPixels += diffX + diffY;
                // y mostrar en el label los pixeles viajadas
                //lblTravel.Text = "Viajaste " + totalPixels + " pixeles";
            }
            // Necesitamos esto para ver la diferencia de pixeles entre dos movimientos de dos mouses
            currX = defPnt.X;
            currY = defPnt.Y;
        }

        private void btnReset_Click(object sender, EventArgs e)
        {
            totalPixels = 0;
        }
    }
}

Si pegan ese codigo el cual esta en un simple form con tres label, un timer y un button, si lo prueban se daran cuenta de que puedo capturar las coordenadas X e Y de cualquier parte de la pantalla donde se mueva el Mouse, y mi Incognita esta en tomar esas mismas coordenadas (X,Y) pero dentro de un Formulario o dentro de un panel o canvas o cualquier otro control, lo que quiero es especificarle a POINT que no sera la screen completa sino solo un control y si se sale de ahi sera 0,0.


Título: Re: Obtener Coordenadas X e Y Dentro de un Panel o Canvas (C#)
Publicado por: 43H4FH44H45H4CH49H56H45H en 22 Mayo 2010, 03:46 am
Puedes añadir que en el evento MouseMove de un picturebox por ejemplo inicie el timer y en el resto del formulario (evento MouseMove) que detenga dicho timer y coloque a 0 las coordenadas, asi solo mostrará los cambios de posicion cuando este sobre el picturebox.
Para el timer seria bueno colocar un intervalo de 100 aproximandamente.

Escribiste muchas lineas de code para algo tan simple...