Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: LeandroA en 22 Febrero 2020, 17:09 pm



Título: [Aporte] LabelPlus (user control)
Publicado por: LeandroA en 22 Febrero 2020, 17:09 pm
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

(http://www.vbforums.com/attachment.php?attachmentid=174557&d=1581700043)
(http://www.vbforums.com/attachment.php?attachmentid=174559&d=1581700175)
(http://www.vbforums.com/attachment.php?attachmentid=174561&d=1581700196)
(http://www.vbforums.com/attachment.php?attachmentid=174563&d=1581700216)
(http://www.vbforums.com/attachment.php?attachmentid=174565&d=1581700246)

visitar sitio y descargar (http://leandroascierto.com/blog/836-2/)

Saludos.


Título: Re: [Aporte] LabelPlus (user control)
Publicado por: Serapis en 23 Febrero 2020, 19:34 pm
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...


Título: Re: [Aporte] LabelPlus (user control)
Publicado por: LeandroA en 23 Febrero 2020, 20:26 pm
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:


Título: Re: [Aporte] LabelPlus (user control)
Publicado por: Serapis en 27 Febrero 2020, 01:57 am
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.  ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-)


Título: Re: [Aporte] LabelPlus (user control)
Publicado por: LeandroA en 28 Febrero 2020, 04:45 am
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.


Título: Re: [Aporte] LabelPlus (user control)
Publicado por: Serapis en 10 Marzo 2020, 02:03 am
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/


Título: Re: [Aporte] LabelPlus (user control)
Publicado por: BlackZeroX en 8 Mayo 2020, 05:15 am
Venga... sigues creando controles geniales.

P.D.> Aun no me muero.

Saludos.


Título: Re: [Aporte] LabelPlus (user control)
Publicado por: xxdoc en 15 Mayo 2020, 17:22 pm
to
BlackZeroX (Astaroth)

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


Título: Re: [Aporte] LabelPlus (user control)
Publicado por: 79137913 en 18 Mayo 2020, 13:22 pm
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!!!


Título: Re: [Aporte] LabelPlus (user control)
Publicado por: LeandroA en 30 Mayo 2020, 01:45 am
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.


Título: Re: [Aporte] LabelPlus (user control)
Publicado por: RiasChan en 7 Junio 2020, 11:16 am
para para, vos me estas diciendo que esto es para darle la interfaz comercial estandar de 2020 a cosas creadas con este lenguaje del 1998 ??????????????? O sea significa que puedo hacer mis programitas tipo windor 95 q todos me critican, con esta intefaz?????????


Título: Re: [Aporte] LabelPlus (user control)
Publicado por: LeandroA en 10 Junio 2020, 00:35 am
no veo porque no?, en cuanto a interfaz con vb6 podes hacer lo mismo que con otro lenguaje de escritorio, es cuestion de no usar controles del año 98, con sus biselados toscos, tenes muchas opciones una de ellas es implementar los temas de windows, o hacer los controles personalizados para que se adapten al estilo 2020 o el año que corra, si hiciste un programa en el 98 y no lo tocaste mas seguramente se vera feo, pero quienes se van modernizando consiguen la misma interfaz que las de windows.


Título: Re: [Aporte] LabelPlus (user control)
Publicado por: BlackZeroX en 16 Diciembre 2020, 02:58 am
para para, vos me estas diciendo que esto es para darle la interfaz comercial estandar de 2020 a cosas creadas con este lenguaje del 1998 ??????????????? O sea significa que puedo hacer mis programitas tipo windor 95 q todos me critican, con esta intefaz?????????

El resto de los lenguajes hacen lo mismo, solo que ya lo hizo alguien mas. Lo que hace LeandroA es una joya pues sabes perfectamente como funcionan las cosas internamente.

Dulces Lunas.