[Aporte] LabelPlus (user control)

Iniciado por LeandroA, 22 Febrero 2020, 17:09 PM

0 Miembros y 2 Visitantes están viendo este tema.

LeandroA

Buenas hace rato que no ando por aqui, asi que les traigo un spam digo un aporte, se trata de un control de usuario de una etiqueta (Label) con las opciones necesaria para hacer casi todo lo que esta visualmente de moda al dia de la fecha. voy a dejar el link del post en mi blog donde amplió un poco mas todo y algunas capturas







visitar sitio y descargar

Saludos.

Serapis

Te falta determinar las versiones S.O.

En un XP, por ejemplo falla, porque la versión de GDIPlus.dll no es la esperada y no contiene (por ejemplo) las funciones: GdipCreateEffect ni la relacionada, GdipSetEffectParameters, así como tampoco GdipDrawImageFX, etc...

LeandroA

Si es cierto aun me falta dar mas información, pero en xp la unica propiedad no soportada es BackAcrylicBlur el resto es compatible con XP,
PD: todavía usan XP? :huh:

Serapis

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.  ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-)

LeandroA

Hola, bueno muchos puntos para responder y soy de pocas palabras, por eso aun no hice el archivo de guia del control, tampoco comento el codigo (se que esta mal) pero no lo hago porque al ser tantas lineas de codigo me terminan confundiendo a mi.
Pongo todo el codigo en un solo control porque me gusta la idea de solo cargar un archivo, no me gustan los mega proyectos que ocupan muchos modulos, ahora si tendria que compilar a ocx pues si seguramente utilizaria algun que otro modulo para optimizar. (De todas formas concuerdo que es mejor poner las cosas por separado)
El nombre LabelPlus es porque esta basado en un proyecto que se llamaba Firenzelabel.
No se puede usar este control como contenedor porque es windowless, pero en la.ultima version corregi un detalle y ahora se puede utilizar dentro de otro usercontrol de tipo windowless con lo cual se puede usar de contenedor y asi cumple la funcion que mencionabas.
Estoy totalmente de acuerdo que es mejor utizar metodos graficos para hacer listas y esas cosas yo generalmente lo hago asi mediante Api  pero bien la idea es poner ejemplos con dicho control, este control surge con un grupo de programadores de vb6 que estamos en un grupo de whatsapp ( si te interesa mandas un MP) la idea principal es simular los controles de Bootstrap pero si realmente tendria que hacer algo tal cual, ya habria que implentar un motor mas rapido que GDI y usar aceleracion grafica.
En fin lo definiria como control completito para satifacer interfaces modernas, basicame se puede hacer todo el ui con este control, con la limitacion a controles que permita utilizar vb6 y mas uso de la memoria.

Serapis

No me refería a comentar el código, si no simplemente a documentar las propiedades y funciones públicas, para que te aparezca la info respectiva cuando pulses dicha propiedad o uses el examinador de objetos (F2).

Gracias por el ofrecimiento, pero al menos de momento tengo muy poco tiempo libre, tengo tantas cosas por hacer que tiempo es lo que falta. A días me da para sacar media hora y comentar, aconsejar o resolver dudas aquí en el foro y poco más...

Me encanta VB6, tanto como lo odio ( :silbar: ), tiene muchas cualidades que hacen de él un lenguaje único y polivalente, pero por otro lado, tiene demasiadas limitaciones y cada vez que chocas con ellas, te fastidia que MS lo dejara aparcado y como jamás vino la tan esperada versión 7.0. Hubo un tiempo (hace algunos años 3-5 no recuerdo ahora mismo), que parecía que Mocosoft iba a hacer algo con vb6, a raíz de las quejas en todo el mundo,  pero finalmente desistieron. Aunque NET tiene sus ventajas, también tiene sus desventajas, la mayor es el laberinto de complejidad que lo rodea y que no para de aumentar. No termina de converme en el terreno personal, en el profesional no necesita convencerte, es lo que reclame la empresa para la que hagas el trabajo...

Por mi parte viendo que jamás saldría ya un 'VB7' (clásico), lo que decidí es hacer mi propio lenguaje, levantando todas las limitaciones con las que me he topado con VB6, más muchas de las sugerencias que en su tiempo entregué a MS, para las versiones de NET, algunas aceptadas y otas no. ...aunque lo llevo a ratos, tengo como el 60-70% de la especificación, pero todavía hay algunas cosas inconcretas y por definir y pulir, aún asi el escáner léxico está listo aunque no cerrado por si la especificación exigiera algo nuevo no contemplado aún, cuando finalice la especificación avanzaré al escáner sintactico y semántico... A veces avanzo también con el IDE, pués va al margen (de momento) del lenguaje, va sin prisas así que creo que tardaré a ratos aún 2-4 años (salvo que me entren las prisas). Aunque no estoy todos los días con ello, solo a ratos.... La idea es que dadas las limitaciones de vb6, cuando complete el compilador, el primer programa a realizar con él, será precisamente el compilador con su propio lenguaje... En fin, prefiero emplear parte de mi tiempo en hacer un lenguaje que tenga todo aquello que creo que es necesario y en su forma simple y eficiente.

...y  hablando de "la idea principal es simular los controles de Bootstrap", creo recordar que hace algunos años ya (como 10-12 o así) encontré un proyecto bastante completito similar a dicha idea, lo acabo de localizar por si os interesa, se llama vkUserControls, creo recordar que estaba en Sourceforge ....veo si sigue existiendo la página del proyecto y te lo comparto:
https://sourceforge.net/projects/vkusercontrols/

BlackZeroX

Venga... sigues creando controles geniales.

P.D.> Aun no me muero.

Saludos.
The Dark Shadow is my passion.

xxdoc

to
BlackZeroX (Astaroth)

Nice to meet you. It's just a pity that a lot of your code can't be downloaded

79137913

HOLA!!!

Que bomba de control! Me encanta @LeandroA! Siempre con material de calidad, yo ya me he pasado a VB.Net y en su mayoria a ASP.Net VB pero un aporte como este no es para dejarlo pasar.

Saludos.

P.D.: Como dice BlackZeroX, tambien estoy vivo.

P.D.2: ¿Cuando hacemos un reto para rememorar viejos tiempos?

GRACIAS POR LEER!!!
"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

79137913                          *Shadow Scouts Team*

LeandroA

que bueno ver tanta gente viva  :D :D cuanto hace que no los veia @79137913 y @BlackZeroX  yo me había alejado un tiempo también pero retome, y sigo firme con vb6, supongo que porque no se hacer lo que quiero en otro lenguaje.