Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

¿Alguien sabe como hacer SubClassing en VB?

Estas en el tema de ¿Alguien sabe como hacer SubClassing en VB? en el foro de Visual Basic clásico en Foros del Web. La pregunta del millón, ¿de que forma se puede hacer SubClassing en Visual Basic?, ya que es algo indispensable para cambiar la apariencia visual de ...
  #1 (permalink)  
Antiguo 20/09/2005, 19:05
Avatar de Jad-Neo  
Fecha de Ingreso: octubre-2004
Mensajes: 344
Antigüedad: 19 años, 6 meses
Puntos: 0
¿Alguien sabe como hacer SubClassing en VB?

La pregunta del millón, ¿de que forma se puede hacer SubClassing en Visual Basic?, ya que es algo indispensable para cambiar la apariencia visual de algunos programas, obtener ciertos mensajes, etc. Por favor espero puedan ayudarme ya que tengo un buen buscando por Internet y no hayo nada
__________________
Nunca seas sabio en tu propia opinión.
  #2 (permalink)  
Antiguo 21/09/2005, 07:31
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Pregunta

Cita:
Iniciado por Jad-Neo
La pregunta del millón, ¿de que forma se puede hacer SubClassing en Visual Basic?, ya que es algo indispensable para cambiar la apariencia visual de algunos programas, obtener ciertos mensajes, etc. Por favor espero puedan ayudarme ya que tengo un buen buscando por Internet y no hayo nada
Para empezar podrías hacernos una reseña de los que es SubClassing, para nosotros ignorantes.... jeje
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #3 (permalink)  
Antiguo 25/09/2005, 18:38
Avatar de Jad-Neo  
Fecha de Ingreso: octubre-2004
Mensajes: 344
Antigüedad: 19 años, 6 meses
Puntos: 0
************************************************** ********
Subclassing

Antes de poder entender lo que es el subclassing hay que saber ciertas cosas sobre las ventanas.

Toda ventana (form en VB) del Windows pertenece a una clase, de la cual hereda las propiedades que la diferencian de las otras (los más puristas dirían, con razón, que cualquier cosa que sale por la pantalla es una ventana, pero será mejor no entrar en detalles, o nos perderemos). Una de estas propiedades o características heredadas es un puntero a una función de gestión de mensajes. Esta función recibe el código del mensaje y unos parámetros asociados al mensaje y se encarga de, en respuesta a esos mensajes, ejecutar ciertas acciones.

Con Visual Basic nosotros podemos programar ciertos eventos básicos, como puede ser el form_click, form_load, etc. Pero hay muchos eventos, muchísimos, que el Visual Basic no detecta, y que a veces puede ser útil detectarlos para realizar cierta tarea. Por ejemplo, cuando pasamos con el mouse sobre un elemento de un menú sin seleccionarlo se genera un mensaje WM_MENUSELECT. La función de la ventana recibe el mensaje, y el identificador de la opción de menú seleccionada, pero por defecto no tiene nada que ejecutar cuando esto sucede. Y como intuireis, no hay un evento llamado form1_wm_menuselect que nos lo detecte y permita programarlo.

La técnica de subclassing se basa en crear una función de gestión de estos mensajes y anteponerla a la función por defecto de la ventana.

Fuente: http://www.elguille.info/colabora/vb/bordes_jgb.htm
************************************************** ********

Como crear un almacenador de mensajes. Cosa que el SmartMenuXP.dll puede hacer. Comprobado, pero es mejor tenerlo como una clase *.cls para no tener que cargar con la DLL.
__________________
Nunca seas sabio en tu propia opinión.
  #4 (permalink)  
Antiguo 25/09/2005, 22:55
Avatar de Beakdan  
Fecha de Ingreso: diciembre-2001
Ubicación: Monterrey, Nuevo León
Mensajes: 433
Antigüedad: 22 años, 4 meses
Puntos: 7
Cita:
Para empezar podrías hacernos una reseña de los que es SubClassing, para nosotros ignorantes.... jeje
David el Grande: En los mismos ejemplos que antes había mencionado (para MOUSEWHEEL), utilizo un módulo de clase para hacer subclassing. Y, a diferencia de los métodos para subclassing que había usado antes (dll's o cls's), este módulo de clase es completamente inmune al botón stop del IDE. Si has hecho experimentos antes sobre Subclassing, sabrás que esto es una cualidad fantástica.
El código para Subclassing es de Paul Caton, y emplea una técnica conocida como Assembler Code Thunk, que consiste en meter ensamblador en el código VB, en este caso para programar un nuevo procedimiento de ventana que reemplace al procedimiento utilizado por defecto. Sobre ensamblador y VB en conjunto, ya he puesto algún código en este foro.

http://www.forosdelweb.com/f14/scroll-form-253337/
http://www.forosdelweb.com/f14/habilitar-boton-del-medio-del-mause-mshflexgrid-247531/

Última edición por Beakdan; 02/10/2005 a las 15:52
  #5 (permalink)  
Antiguo 02/10/2005, 15:24
Avatar de Jad-Neo  
Fecha de Ingreso: octubre-2004
Mensajes: 344
Antigüedad: 19 años, 6 meses
Puntos: 0
Disculpa pero los links estan muertos. Pero de todas formas gracias, en vbsmart.com, el creador de SmartMenuXP pone a disposición un librería (DLL ActiveX) para poder hacer algo similar. Gracias de todas maneras.
__________________
Nunca seas sabio en tu propia opinión.
  #6 (permalink)  
Antiguo 03/10/2005, 11:32
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Exclamación

Cita:
Iniciado por Jad-Neo
Disculpa pero los links estan muertos. Pero de todas formas gracias, en vbsmart.com, el creador de SmartMenuXP pone a disposición un librería (DLL ActiveX) para poder hacer algo similar. Gracias de todas maneras.
Funcionan....
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #7 (permalink)  
Antiguo 07/10/2005, 17:41
Avatar de Jad-Neo  
Fecha de Ingreso: octubre-2004
Mensajes: 344
Antigüedad: 19 años, 6 meses
Puntos: 0
Gracias, ya me funcionan los links. Raro, ¿no?
__________________
Nunca seas sabio en tu propia opinión.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:01.