
| ||||
![]() Cita: Para empezar podrías hacernos una reseña de los que es SubClassing, para nosotros ignorantes.... jeje
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 ![]()
__________________ Por favor, antes de preguntar, revisa la Guía para realizar preguntas. |
| ||||
************************************************** ******** 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. |
| ||||
Cita: 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.Para empezar podrías hacernos una reseña de los que es SubClassing, para nosotros ignorantes.... jeje 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 |
| ||||
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. |
| ||||
![]() Cita: Funcionan....
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.
__________________ Por favor, antes de preguntar, revisa la Guía para realizar preguntas. |