SoloCodigo

Programación General => Visual Basic 6.0 e inferiores => VBA => Mensaje iniciado por: ldvgsmca en Lunes 29 de Enero de 2007, 20:23

Título: Componente Activex
Publicado por: ldvgsmca en Lunes 29 de Enero de 2007, 20:23
tengo un problema, es que he desarrollado el componete que simula un boton windows vista, el problema es que cuando paso el mouse sobre el objeto me dibuja el marco correctamente pero cuando el puntero del mouse sale del objeto a veces lo limpia y a veces no y cuando el puntero vuelve al objeto no me dibuja correctamente el marco del boton..... al que me puede ayudar por favor me dice y le paso el codigo completo con un ejemplo para que lo evalue y me pueda decir donde es que tengo la falla

Gracias
Título: Re: Componente Activex
Publicado por: luciano2 en Martes 30 de Enero de 2007, 01:22
Hola si querés enviarme el ocx, mandalo que lo pruebo a ver si le encuentro la falla


saludos


----------------
Recursos visual basic (http://www.recursosvisualbasic.com.ar)
Título: Re: Componente Activex
Publicado por: ldvgsmca en Martes 30 de Enero de 2007, 16:19
Gracias Luciano2, te envio un ejemplo y el codigo fuente del componente.
Título: Re: Componente Activex
Publicado por: Epa en Miércoles 31 de Enero de 2007, 01:26
Buenas.

El problema es que usas el evento MouseMove, el cual se produce unicamente cuando el mouse esta encima del control. Tienes que tener en cuenta que al mover el mouse, las coordenadas del mismo no siempre varian de 1 en 1, por lo que si lo mueves muy rapido puede pegar saltos y "no pasar por encima de tu control" por eso tienes que estar verificando constantemente la posicion del mouse.
Puedes usar un timer, q se active al posiconarse el mouse sobre tu control y desactivarse una vez q halla corroborado q el mouse no se encuentra mas encima.

Saludos
Título: Re: Componente Activex
Publicado por: ldvgsmca en Jueves 1 de Febrero de 2007, 14:57
Cita de: "Epa"
Buenas.

El problema es que usas el evento MouseMove, el cual se produce unicamente cuando el mouse esta encima del control. Tienes que tener en cuenta que al mover el mouse, las coordenadas del mismo no siempre varian de 1 en 1, por lo que si lo mueves muy rapido puede pegar saltos y "no pasar por encima de tu control" por eso tienes que estar verificando constantemente la posicion del mouse.
Puedes usar un timer, q se active al posiconarse el mouse sobre tu control y desactivarse una vez q halla corroborado q el mouse no se encuentra mas encima.

Saludos
Saludos y gracias a la vez......

realmente no interpreto bien tu explicación, si podrias ser un poco mas explicita te lo agradeceria o simplemente si me pudieras decir que debo hacer para corregir mi problema, porque resulta que en mi sistema que estoy desarrollado tengo ese componecte en todos lo formularios y ya sabes que significa eso....



te lo agradezco de antemano
Título: Re: Componente Activex
Publicado por: Epa en Sábado 3 de Febrero de 2007, 01:36
Buenas.

Para darte cuenta de lo q digo, crea un proyecto con un formulario normal y ponle esto

Código: Text
  1.  
  2. Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
  3.   Print X & " - " & Y
  4. End Sub
  5.  
  6.  

Luego estira el formulario y ejecutalo.
Pasa el mouse de punta a #### rapido, ahi veras que solo aparecen algunas coordenadas del mouse. Dependiendo la velocidad q lo pases.

Ahora ponle un picturebox en el medio (no muy grande) y agrega

Código: Text
  1.  
  2. Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
  3.   Picture1.BackColor = RGB(255,0,0)
  4. End Sub
  5.  
  6.  

Ahora bien pasa el mouse rapido sobre el picturebox, veras que la mayoria de las veces no cambia de color.

Si solo piensas usar el control para tu aplicacion una solucion no demasiado apropiada, pero sencilla es agregarle una funcion publica al control, que lo desactive y esta la llamas desde el evento mousemove del formulario, aunque si tus controles estan al seca del borde puede traer problemas.

Otra mas complicada aunque mas adecuada y que te mencione anteriormente es poner un timer que valla chequeando la posicion del mouse. Cuando se mueve el mouse se activa y empieza a controlar la posicion hasta que se encuentra fuera y ahi se desactiva.
Para esto puedes usar la api GetCursosPos. Nota que esta funcion devuelve los valores en pixeles, si lo multiplicas por 15 tendras el valor en twips, aunque mejor es multiplicarlo por   Screen.TwipsPerPixelX y   Screen.TwipsPerPixelY
A esos valores le restas el left y top del form y le sumas los del control. Puede que halla que sumas un poco mas por la barra de titulos y los bordes. Luego comparas los valores iniciales con esos si se encuentran entre el left y left +  width (= vertical)
estara adentro, sino estara afuera.


Bueno, Espero que se enteinda un poco mejor
Cualquier cosa escribe.

Saludos