Se trata de un módulo clase para aplicar un corrector ortográfico a un TextBox o RichTextBox, esto lo hace mediante la interfaz SpellCheckerFactorys, ésta está disponible a partir de Windows 8 y posteriores.
Si bien con algunos controles como el InkEdit y los RichTextbox (Richedit50W), con sólo un par de líneas de códigos estos ya pueden aplicar el corrector ortográfico, pero en el caso de los TextBox (Edit) hay que hacer todo un trabajo como el que se realizó en el módulo clase para que funcione de la misma forma. Vale aclarar que en el caso de los RichTextBox cuando tiene formato, puede que el comportamiento no sea el deseado, ya que las líneas rojas de error pueden desfasarse un poco si la fuente cambia.
Como pueden ver en la imagen, en el menú contextual aplica las opciones de corrección y otras funcionalidades como: omitir, eliminar palabras, añadir al diccionario y auto corrección, este último es para cambiar la palabra automáticamente por otra a media que es detectada.
No requiere ninguna dependencia, sólo Windows 8 y posteriores.
Otro control de usuario, con el que me pasó lo mismo que el anterior, un encargue de trabajo que no se concluyó por lo tanto no puedo compartir el código y tengo que venderlo. Se trata de un control Slider muy personalizable, inclusive se puede poner una imagen como perilla y simular un fader o crossfader los muy utilizados en software de audio. Dentro del ejemplo utilicé un LabelPlus para simular un tooltips con el actual valor del control, un detalle que queda muy lindo.
El control con su código de fuente lo estaré vendiendo a u$s 20 (Dólares) puedes utilizar el botón de PayPal para comprarlo, enviarme un correo a leandroascierto [@] hotmail.com o mediante el formulario de contacto para acordar el pago, de esa forma estaré enviando el código de fuente del Usercontrol, dejo un demo (.exe) para quienes quieran ver más detalles.
Este Usercontrol era parte de un trabajo que me habían solicitado y no se pudo concretar, así que quizás a ti pueda serte de utilidad, sólo que esta vez no pondré el código de fuente gratis, lo estaré vendiendo a u$S 15 (dólares), quienes estén interesados pueden enviarme un correo a leandroascierto [@] hotmail.com o mediante el formulario de contacto para acordar el pago, de esa forma estaré enviando el código de fuente del Usercontrol, dejo un demo (.exe) para quienes quieran ver más detalles.
Su funcionamiento es muy similar al de un CheckBox y jugando con sus propiedades se puede lograr casi cualquier aspecto tal como se aprecia en la imagen, también se pueden utilizar algunos iconos de fuente, en este caso en el ejemplo usé algunos iconos de la fuente «Segoe MDL2 Assets» disponible en Windows10.
En esta ocasión hay tres formas de crear un Knob o control de perilla, los muy conocidos en el ambiente de audio; digo tres formas porque el primer control de usuario lo dibuja todo mediante métodos gráficos con el apoyo de la clase ClsNeumorphism. El segundo utiliza tiras de imágenes las cuales contienen fotogramas rotados porcentualmente, quienes diseñan estas imágenes toman en cuenta el movimiento de la sombra, haciendo una simulación en 3D de la perilla en su rotación. Por último se encuentra otro ejemplo empleando el usercontrol Labelplus donde ponemos una imagen de una perilla que hallamos descargado de internet o diseñado nosotros, y otro Labelplus por encima de este con la imagen de la flecha la cual se rotará según el ángulo que le asignemos al Labelplus.
También encontraran la clase clsSubClass la cual puede ser opcional, esta se utilizó para subclasificar el formulario y asi interceptar la rueda del mouse para rotar dichos controles, de todas formas lo más común es operarlos mediante el mouse con el botón izquierdo presionado subiendo o bajando el cursor.
ucKnob con métodos gráficos (Recomendado)
.
.
.
ucKnobStrip y Labelplus
(las imágenes que subí en los ejemplos son de alta calidad y tamaño, queda en ustedes editar estas imágenes con la calidad/tamaño mas adecuado lograr el equilibrio entre diseño/memoria/procesador.) Las tiras de imágenes fuero extraídas de JSAudioKnobs
se realizaron algunos pequeños cambios en los controles LabelPlus y Chart controls con el fin de poder imprimirlos mediante la función Imagen()
También se removió el Safe GDI+ el cual ya no es necesario si no se utiliza el IDE de VB6 bajo windows XP, pero si seguirá siendo compatible en tiempo de ejecución con este y posteriores sistema operativo.
Esta es una aplicación sencilla para añadir un video como fondo de pantalla. Esta aplicación la había hecho hace muchos años atrás pero había dejado de funcionar ya que había cambiado la forma en que se renderizaban los videos, pero el colega J. Elihu encontró una aplicación open source donde hace un truco para poner una ventana como fondo de escritorio, ósea por detrás de los iconos del escritorio, esto significa que si es una ventana en ésta se pueden poner muchas cosas, como por ejemplo una página web, o cualquier cosa que queramos mostrar, claro que no podrá recibir eventos del mouse ya que está detrás del listview. Son muy pocas líneas para lograr este truco, el resto es un conjunto de módulos para reproducir un video realizado por Frank Schüler que utiliza MediaEngine ClassFactory.
En cuanto al proyecto está sencillo, faltaría añadir opciones como iniciarse con Windows, crear una lista de videos y otras. Por el momento pone un icono en la barra junto a la hora, donde mediante un menú desplegable podremos seleccionar el video a reproducir, también abre con líneas de comando. Sólo la he probando en Windows 10.
La descarga es un poco pesada porque incluí dos videos de demostración, pueden descargar más aquí
Un nuevo UserControl u ocx (para quienes quieran compilarlo), tal como su nombre lo indica es una Grilla. Si bien ya hay algunas dando vuelta y muy buenas por cierto, en este caso intenté buscarle un lado más moderno, nunca había utilzado este control así que me fui basando en las diferentes opciones que hay por la web, tanto las de vb6 (LynxGrid, IGrid, VBFlexGrid) como las de uso web por ejemplo ComponentOne y DevExpress. Este control me llevó mucho tiempo ya que son muchas líneas de código, como siempre no he realizado ningún archivo de ayuda, pero dentro de los ejemplos encontrarán algunos ejemplos muy funcionales en tiempo real. Al ser un control con muchas opciones seguramente se me habrán escapado muchas cosas, las cuales podré ir agregando o corrigiendo si me lo hacen saber, algo que no pude hacer en esta grilla fue implementar la funcionalidad MergedCell (celdas combinadas), pero el resto creo está casi todo.
Un problema que encontré tarde fue que por cuestiones estéticas utilicé otro use sercontrol «ucScrollBar» tal como ya lo había hecho en el ucList, pero no había notado que si se cambia el nombre del proyecto el ucScrollBar pierde la referencia y se convierte en un PictureBox, para que esto no pase es necesario abrir el ucGridPlus con el notepad y cambiar «Proyecto1» por el nombre del proyecto en que lo vayan a emplear, de momento no encontré una mejor solución.
El control puede cargar imágenes de muchas formas y formatos tanto ColImgListAddImage y HeaderImgListAddImage pueden cargar la imagen desde array de bits, archivo, url, url base64, hbitmap, hIcon y stream; las imágenes pueden tratarse como vectores donde podemos asignarle el color según el forecolor de la celda o podemos poner imágenes comunes, también cuenta con dar una propiedad «radio» para dar forma circular o con puntas redondeadas.
En el primer ejemplo encontrarán algunos gráficos, Progresos y ranking que se muestran en cada fila, en esos ejemplos utilicé un módulo externo para usar un CustomDraw, esto con el conocimiento adecuando se pueden hacer infinitas cosas. No es parte de la grilla en si, de este modo es más fácil para hacer cosas a necesidad de cada uno.
En el caso de los controles, es lo mismo, no son parte de la grilla, el ucGridPlus es un contendor, donde podemos poner Combobox, Datepiker entre otros y con algunas propiedades de este podemos ubicar dichos controles sobre la celda simulando que forman parte de ella.
La grilla cuenta con la posibilidad de agregar eventos a las imágenes y texto de la celda, de esta forma se pueden lograr algunos lindos efectos como verán en los ejemplos.
Es necesario tener instalada la fuente «Segoe MDL2 Assets» en windows 10 ya está por defecto, esta se utilizo para algunos iconos.
Para la vercion compilada (OCX) utilice el control de usuario UniTextBox para que acepte caracteres unicodes en modo de edición.
Para cerrar quiero aclarar que esto por momento es algo así como una beta y hasta que no se use y se encuentren errores no los podré detectar, sé que muchas cosas me quedaron en el tintero pero por ahora se me agotó la energía.
A continuación una tabla de propiedades, Rutinas y funciones del ucGridPlus
A continuación una tabla de sus propiedades.
AllowColumnDrag
ColImagesEvents
GetHotCell
RowAlign
AllowColumnSort
ColImgAlign
GetSelectionRange
RowBackColor
AllowEdit
ColImgListAddImage
GetTopRow
RowChecked
AutoHeightAllRows
ColImgListClear
GetVisibleRows
RowDelete
AutoHeightRow
ColImgListHeight
GetWindowsDPI
RowFont
AutoWidthAllColumns
ColImgListRemoveImage
GradientStyle
RowForeColor
AutoWidthColumn
ColImgListWidth
GroupByColumn
RowHeight
BackColor
ColImgMonocrome
GroupColapse
RowHidden
BackColorAlt
ColInitImgList
GroupExpand
RowIdent
BorderColor
ColLabelsEvents
HeaderBackColor
RowIsFullRow
BorderRadius
ColLeft
HeaderFont
RowIsGroup
BorderVisible
ColMinWidth
HeaderHeight
RowMoveTo
CellAlign
ColMoveTo
HeaderImageAlign
RowRef
CellBackColor
ColRef
HeaderImgListAddImage
RowsBackColor
CellEditionLocked
ColsCount
HeaderImgListClear
RowsBackColorAlt
CellFont
ColSort
HeaderImgListCount
RowsCount
CellForeColor
ColSortOrder
HeaderImgListHeight
RowSelectorBkColor
CellImageIndex
ColTag
HeaderImgListRemoveImage
RowSelectorWidth
CellStartEdit
ColTextHidde
HeaderImgListWidth
RowTag
CellTag
ColumnsAutoFit
HeaderInitImgList
RowWordBreak
CellValue
ColumnText
HeaderLinesHorizontalWidth
ScrollBarStyle
CellWordBreak
ColUserResizeLocked
HeaderLinesVerticalWidth
SelectionColor
CheckStyle
ColWidth
HeaderTextAlign
SelectionMode
ChrW2
ColWordBreak
HeaderTextWordBreak
SetCurCell
Clear
CurCol
InsertRow
SetMargin
ColFont
CurRow
LastRowIsFooter
SetSelectionRange
ColForeColor
EnsureCellVisible
LinesHorizontalColor
ShowHotRow
ColFormat
FillFromRS
LinesHorizontalWidth
ShowHotRow
ColHeaderForeColor
FixedColumns
LinesVerticalColor
Sort
ColHeaderImgIndex
FixedRows
LinesVerticalWidth
SwapCol
ColHidden
Font
ParentBackColor
SwapRow
ColImageListCount
GetCellRect
Redraw
UnGroup
Descargar UserControl y Ejemplos (Actualizado 08/11/2022)
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.
Actualizado: 05/08/2021 (corrección en algunas fallas de la sombra en ventanas padres)
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.
Actualizado: 05/08/2021 (corrección en algunas fallas de la sombra en ventanas padres)
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.
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.
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.
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.