admin

Jul 072021
 

UserControl multi función el cual cumple con las funcionalidades de los controles ListBox, ComboBox, Lista Desplegable, Menú y Autocomplete de un TextBox. La novedad es que adiciona varios extras y cambios estéticos, como ser bordes redondeados, sombras, ítems personalizados, soporte para imágenes Png y estándares, a las imágenes se le puede aplicar esquinas redondeadas y cambios de colores para el caso de imágenes vectoriales (PNG), grupos de ítems, barras separadora, filtro y subtexto.

Para el caso del estilo ListBox los cambios de propiedades y adición de ítem no refrescan automáticamente, es necesario llamar a Update; esto es con la intención ganar la velocidad (aunque me quedó la duda si fue lo correcto haberlo hecho así)

Quizás hay muchas cosas que me gustaría aclarar pero por el momento sólo voy a dejar unos cuantos ejemplos donde podrán aprender a emplearlo fácilmente.

ucListPlus1.png ucListPlus2.png ucListPlus3.png ucListPlus4.png ucListPlus5.png
Jun 212021
 

Como su nombre en inglés lo indica clase para sombras, un módulo que nos servirá para implementar sombras a nuestro formulario y controles, esta clase fue realizada con fines para otro control que compartiré más adelante, pero decidí publicarlos por separado para que sea más fácil de entender el uso de cada uno. Como verán en la imagen, además de la sombra da una forma redondeada a los controles y formularios, esto coincide justamente con la nueva interfaz de Windows 11, pero en realidad la idea es copiar a los diseños que vemos en HTML y CSS con Bootstrap, si bien a primera vista parece lo que se hizo con el LabelPlus, esto es algo diferente y mucho más rápido para este propósito.

Técnicamente su funcionamiento se divide en dos: para ventanas hijas y ventanas padres. En el caso de las ventanas hijas crea otra ventana que copia el color de fondo de la ventana contenedora, dibuja la sombra, borde y la misma se sitúa debajo del control que queremos aplicar dicho estilo. Si tuviéramos un fondo degradado o con una imagen el efecto quedaría mal ya que esta ventana no es transparente, sólo simula serlo (si bien es posible hacerla transparente, es más costoso en memoria, por lo cual decidí dejarlo así). En el caso de las ventas padres también se crea una ventana con el estilo WS_EX_LAYERED y contiene un DIB con la imagen de la sombra, bordes y se sitúa por detrás de la ventana en cuestión. En este último caso la ventana tiene transparencia.

La función principal que inicia todo es «ShowBorders», su primer parámetro es el hwnd de la ventana a aplicar los bordes y sombras, el segundo parámetro boolean es si esta ventana es hija (control) o Padre(Formulario) .

Traté de subclasificar lo menos posible, sólo WM_PAINT en ventanas hijas y WM_MOVE en ventanas padres por lo que si se ocultara el control queda en mano del programador llamar a la función «HideBorders» para ocultar la sombra, lo mismo cuando se cambie el tamaño del control u otras, es necesario llamar a «Refresh». Mirando los ejemplos se podrá entender mejor su funcionamiento, por el momento funcionará así, más adelante de ser necesario haré algunos cambios.

ClsShadow1.png ClsShadow2.png
May 262021
 

Dos juegos realizados en Excel. El primero es juego que lo vi realizado con tablitas de madera y me dio ganas de hacerlo en Excel, la verdad si bien me dio trabajo programarlo es más difícil lograr el objetivo del juego, en YouTube hay un par de tutoriales pero eso seria como ir derecho a la trampa, así que les dejo este desafío para pasar el rato (yo no logré resolverlo)

El objetivo del juego es bajar la ficha naranja en la parte inferior tal como muestra el cuadro de solución, las piezas se mueven con el mouse.

TRABADO2.png

El segundo lo copie de un juego del móvil, no esta completo, tiene solo algunos niveles, pero fue mas que nada para sacarme las ganas de hacerlo.

En este el objetivo es armar el bloque superior con las partes inferiores, un rompecabezas por así decirlo.

Triangle.png
May 082021
 

Otro proyecto del baúl de los recuerdos, con muchas actualizaciones. Se trata de un módulo para obtener las contraseñas guardadas por los navegadores web, si bien hay un rejunte de código de diferentes autores el que más puedo citar es «Cobein» quien fue el creador de la base de este módulo. Ahora bien esto fue mucho tiempo atrás y muchos métodos de encriptación han cambiado desde entonces, por lo que hubo que actualizar gran parte para que siga funcionando. Tiene soporte para los 5 navegadores mas utilizados en el mercado:

  • Google Crome
  • Microsoft Edge
  • Firefox
  • Opera
  • Internet Explorer

Además también puede obtener el historial de navegación, ahora si preguntan que utilidad tiene esto, pues puede ser útil para exportar contraseñas a un pendrive, para alguna auditoria de navegación mediante su historial (naa mentira es para hacking), yo lo tomo como un juego a encontrar el como descifrar el acertijo.

En cuanto a lo técnico, utiliza sqlite3.dll. Todos menos Internet Explorer almacenan sus contraseñas en esas bases de datos, Firefox con el paso de los tiempos migró a JSON, un dato curioso que al menos a mi me sorprendió tanto Chrome, Ms Edge y Opera utilizan Blink por lo que me vale decir son los tres iguales, todos almacenan sus contraseñas de la misma forma y con la misma encriptación, misma estructura, mismo historial, sólo cambian las ubicaciones y nombres de las BD pero es la misma metodología.

La mayor bronca que me quedó es que no pude encontrar la forma posta de descifrar cómo lo hace Firefox realmente, el método que se utilizó en este caso es haciendo una llamada a una dll del mismo FF pero el problema es que en sistemas de x64 bits no funciona debido a que nuestro querido VB6 es de x32, pero bien hay mucha información de cómo descifrar mediante los métodos de encriptación que utiliza, sólo que ya no me da el cuero para tanto, si les interesa aquí está toda la información.

Para Internet Explorer puse un módulo aparte y el módulo del historial ni lo incluí en el proyecto ya que hoy en día el historial se borra ni bien se cierran IE y bien como ya es de conocimiento público este ha pasado a mejor vida.

Agradecimiento especial a wqweto

Password Revealer1.png Password Revealer2.png
Abr 242021
 

En este caso se trata de una aplicación que hace tiempo venía trabajando y quedó en el baúl de los proyectos olvidados. Es un descargador de videos de varias plataformas como:

  • YouTube
  • Facebook
  • Instagram
  • Dailymotion
  • Vimeo
  • Tiktok (por el momento no funciona)

Además de descargar el video, también podemos convertirlo a audio (.MP3) donde según el titulo del video, si este es una canción busca automáticamente las etiquetas Titulo, Autor, etc etc y las inserta dentro del mp3 como así también su imagen de portada, sólo que ésta es la que vemos en la previa del video.

En el caso de los videos también se pueden descargar o insertar dentro del video los subtítulos, si es que los tiene. La aplicación está pensada especialmente para descargar «listas de reproducción» de YouTube, donde podemos descargar muchos videos simultáneos.

Su funcionamiento es sencillo, sólo tienen que copiar el link del video, puede ser la url que está en la barra de navegación o en alguna parte del menú según la plataforma puede decir «copiar link», «compartir» etc etc. y luego lo pegan en la aplicación.

En cuanto a la programación lo voy a dejar con muchas cosas pendientes, por el momento perdí interés en este proyecto, aclaro que es muy muy complicado de entender o depurar ya que al ser asíncrono es una telaraña que va y viene. Si bien traté de utilizar Apis documentadas y Apis indocumentadas, en algunos casos YouTube especialmente en lo que es música, codifica sus link de video y no logré decodificar este algoritmo, por lo que recurrí al uso del control webbrowser para que haga el trabajo y mediante JavaScript obtener este link decodificado. Ahora bien como el webbrowser tiene algunos cuelgues y no quería que interfiriera con el UI de la aplicación después de varios intentos lo mejor que conseguí es ponerlo en otro ejecutable «YTBrowser.exe» y manejarlo como una aplicación de consola para que no ralentice la app principal, además en el caso de Instagram es necesario loguearse para poder obtener los link así que se muestra el webbrowser con la página de login de Instagram. También se utilizó otra aplicación de consola «FFMPEG» para la conversión de mp4 a mp3 e inserción de subtítulos a los videos.

No sé cuánto pueda durar funcionando esta app sin actualizaciones ya que todas las plataformas cambian constantemente, como ser el caso de TikTok que mientras lo programaba ya había cambiado sus link y paso a codificarlos, pero esta vez de una forma mucho más compleja que por momento no supe cómo resolver.

Así que espero que la disfruten mientras dura.

VideoDownloader.png VideoDownloader2.png
Mar 222021
 

Este es el reproductor musical que había mencionando en el post anterior
donde se mostraba cómo implementar el diseño Neomorfismo (Neumorphism Design) en vb6, en este proyecto se aplicó un ejemplo funcional del mismo. El diseño en si esta copiado de esta imágen.

Para el motor de reproducción se utilizó bass.dll y uno de sus complementos bass_fx.dll muy recomendable echarle una mirada a toda esta suite de librerías que cuentan con ejemplos para vb6.

Si bien al principio iba a hacer algo sencillo después se me dió por hacer algo bien completo donde se implementaron algunas características como: leer desde una lista de reproducción, líneas de comando, arrastrar y soltar, editor de etiquetas, ecualizador, display animado, vista previa en la barra de tareas, manejo con teclado y bueno seguramente muchas muchas cosas me estarán faltando, lo cual algunas podré agregar más adelante si me las sugieren.

En cuanto a la lista de reproducción no recomiendo cargar más de 300 canciones ya que la forma en que armé el control de lista es muy limitado porque utiliza controles en vez de métodos gráficos, pero bien creo que con 300 canciones es un número respetable.

La aplicación es 100% portable con soporte a Unicode

neumoplayer1.png neumoplayer2.png neumoplayer3.png neumoplayer4.png
Descargar Proyecto
Descargar Binario + un Mp3 de mi banda «Viento Rojo»
Mar 182021
 

En este caso se trata por un lado de un Módulo clase y por otro un Usercontrol para crear una interfaz de usuario moderna llamada Neumorphism o Neomorfismo, la cual comenzó a ponerse de moda a partir del 2020, si bien está pensada para aplicaciones móviles o webs no veo motivo para no implementarlo en nuestro querido vb6, al menos en aplicaciones pequeñas para no sobrecargar mucho la memoria y ralentizar nuestra app. El motor de todo esta basado en GDI+.

Con el módulo clase hay un ejemplo donde podemos jugar con las propiedades de la clase y otro formularios con algunos ejemplos graficados.
Además este permite dibujar un Path de GDI+ con el cual se utilizó un módulo extra, donde se puede crear distintas formas (Shapes) y se les puede aplicar el estilo, aprovecho para agradecer a Eduardo por tomar parte de las rutinas de su ShapeEx.



Con el Usercontrol hay tres ejemplos aplicados. No voy a detallar todas las propiedades, es cuestión de meter mano y jugar un poco, son las mismas del módulo. Con los ejemplos esta acompañando el usercontrol «LabelPlus» que es para agregar texto e iconos a las formas, (no quise volver a programar todo esto por eso utilicé dos usercontrols).

Ya más adelante voy a subir un reproductor de música en el que estoy trabajando donde puede verse todo esto aplicado.

Por último quiero aclarar que todo esto funciona más rápido cuando está compilado..

Neumorphism1.png Neumorphism2.png Neumorphism3.png Neumorphism4.png Neumorphism5.png