Vaya, ya es casualidad que justo fuera abrir el que usaba funciones no disponiobles en mi versión (hay otro proyecto más también).
Es un trabajo muy elaborado incluso con los ejemplos, así que "chapeau".
Confunde en principio lo de 'label..' pués esperaba un control label y bueno labelplus, se queda corto, quizás fuera más adecuado 'MultiControlPlus', porque no es un simple label, admite imágenes y muchas cosas más que lo llevan a comportarse como distintos tipos de controles, adecuadamente configurado...
Algunas críticas (constructivas):
- El eterno debate entre múltiples controles sencillos y un solo megacontrol que haga todo, aparece aquí. El control es tan amplio, que su problema básico proviene de aquí, será difícil dominarlo para adaptarlo a cada necesidad, en ese sentido es cuando múltples controles sencillos suponen una mejor oferta, cada cual dispone solo de las propiedades y rutinas que son precisas para su labor.
Forzar al control a comportarse como determinado otro, supone modificar muchas propiedades, para configurarlo adecuadamente, lo que exige eso... un dominio completo del mismo...
Por otro lado, no se adjunta info con cada propiedad/función que al menos te aclare su funcionalidad cuando el nombre resulta insuficiente.
- Otra pega que le veo, es que tiene, mejor dicho se compone todo su tratamiento gráfico de llamadas a API. Esto supone dos cosas:
---- La primera puede no tener sentido en ciertas circunstancias pero conviene anotarla igualmente: Si un proyecto tiene chorrocientas llamadas a API, ¿no sería mejor escribirlo en C en vez de en VB?.
--- La segunda es la reutilización, al estar toda la funcionalidad embutida en el propio control, él mismo es grande, y toda su funcionalidad no resulta reutilizable, yo hubiera movido todas esas rutinas gráficas a alguna clase.
Propongo dos opciones... una clase BackBuffer o una clase Draw (la diferencia entre ambas es que Draw sería un compendio de rutinas gráficas, y BackBuffer se asociaría al Handle del control que crea su instancia, con esas pequeñas diferencias, suponen solo parámetros a las funciones de idéntico nombre pués mientras que en la clase 'BackBuffer', al crear la instancia convendrá pasarle el hWnd y medidas del control para crear la 'superficie'. En tanto que en la clase 'Draw', dichos valores deben ser pasados como parámetro a cada función que los precise...
El caso es que con una de las dos clases el mismo proyecto podría albergar varios controles, pués todo eso código que lo engrosa sería común para todos los controles. Es más incluso aunque uno piense para sí: "como es un único control, ningún otro piodrá aprovechar que haya código movido a una clase"... lo cierto es que todavía en ese caso, sería mucho más fácil a futuro atender al mantenimiento o búsqueda de errores en el control, separando la funcionalidad que se espera del control de las rutinas que le otorgan la apariencia gráfica.
- Otro asunto que he visto, es que por ejemplo, a veces una 'vista se compone de varios controles 'LabelPlus', si mueves el 'grande' los otros se quedan en su sitio, es decir están superpuestos para dar esa apariencia. Lo que aclaro es que sería útil disponer del mismo control en su versión ParentControl = TRUE, es decir que haya dos versiones, la que tienes y otra que actúe como contenedor... eso facilita que cuando sea preciso ese tipo de superposiciones, simplemente estarían dentro del control 'LabelplusCtn' que actúa como contenedor, por lo que su traslado (move), 'enbled', 'visible', etc... se aplica a todo su contenido... por supuesto en ese caso, ese cntrol contenedor, no precisaría cierta funcionalidad, aunque incluso en un caso como un scroll, el control haría las veces de la línea, y el botón desplazable y el 'labelPlus vs 'tooltip', podrian meterse dentroy así actuar en conjunto los 3... Pero en fin, es solo una idea.
- Y básicamente eso es todo, un asunto menor (pués es un proyecto de ejemplo), es que, por ejemplo veo un calendario en un form, montado a base de controles LabelPlus y otros controles, el caso es que cuento la friolera de 70 controles 'LabelPlus', sin contrar otros controles... es un claro ejemplo de como un control dedicado a la funcionalidad buscada, es preferible (al menos para mí), a un megacontrol del que luego precisas muchas intancias y cada cual con las propiedades específicas para lograr el objetivo deseado... yo (por ejemplo) tengo por ahí un control calendario, que es un solo control. Todo lo más que tiene es un shape (y un timer, pués ofrece la posibilidad de mostrar la hora en tiempo real y el timer se usa para dicho caso)... todos los supuestos botones y labels, son métodos gráficos (y ninguna llamada a APIs (si recuerdo bien))...
(por cierto, en ese mismo proyecto (el del calendario), en Win XP, el calandario emerge y se oculta rápidamente, no se ve. Lo he solucionado poniendo la propiedad del form Autroredraw a TRUE y desactivando el timer en tiempo de diseño, uno solo de los cambios no surte efecto. Ignoro si en otros sistemas sucede así, o si esos ligeros cambios para dichos sistemas impedirían verse adecuadamente, si no es el caso, convendría aplicarlos, pués así también queda 'listo' para XP (sé que habrá quien no separa como solucionarlo, y por ello preguntar aquí o allá).
A pesar de todo, como digo hay mucha elaboración detrás de este control y está muy bien afinado.