• Domingo 22 de Diciembre de 2024, 08:16

Autor Tema:  Componente Activex  (Leído 2195 veces)

ldvgsmca

  • Nuevo Miembro
  • *
  • Mensajes: 17
    • Ver Perfil
Componente Activex
« en: Lunes 29 de Enero de 2007, 20:23 »
0
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

luciano2

  • Miembro activo
  • **
  • Mensajes: 71
    • Ver Perfil
    • http://www.recursosvisualbasic.com.ar/
Re: Componente Activex
« Respuesta #1 en: Martes 30 de Enero de 2007, 01:22 »
0
Hola si querés enviarme el ocx, mandalo que lo pruebo a ver si le encuentro la falla


saludos


----------------
Recursos visual basic

ldvgsmca

  • Nuevo Miembro
  • *
  • Mensajes: 17
    • Ver Perfil
Re: Componente Activex
« Respuesta #2 en: Martes 30 de Enero de 2007, 16:19 »
0
Gracias Luciano2, te envio un ejemplo y el codigo fuente del componente.
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.

Epa

  • Miembro MUY activo
  • ***
  • Mensajes: 242
  • Nacionalidad: ar
    • Ver Perfil
Re: Componente Activex
« Respuesta #3 en: Miércoles 31 de Enero de 2007, 01:26 »
0
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
The sweet smell of a great sorrow lies over the land.


ldvgsmca

  • Nuevo Miembro
  • *
  • Mensajes: 17
    • Ver Perfil
Re: Componente Activex
« Respuesta #4 en: Jueves 1 de Febrero de 2007, 14:57 »
0
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

Epa

  • Miembro MUY activo
  • ***
  • Mensajes: 242
  • Nacionalidad: ar
    • Ver Perfil
Re: Componente Activex
« Respuesta #5 en: Sábado 3 de Febrero de 2007, 01:36 »
0
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
The sweet smell of a great sorrow lies over the land.