May 142022
 

Este proyecto lo había comenzado un par de años atrás luego lo abandoné, así que me decidí a retomarlo, si tendría que comenzarlo de cero hoy cambiaria muchas cosas ya que no son las más óptimas, pero esto no impide que el calendario funcione bien.

Ahora bien el control se trata de un calendario al cual podemos añadir eventos, esto puede servir para muchas cosas como ser mostrar vacaciones de personal, eventos de cobro, turnos, actividades de tiempo o mostrar de manera gráfica intervalos de fecha.

El control tiene soporte para hacer drag & drop de los eventos, tal como poder modificar con el mouse su rango de fecha, si presionamos la tecla Ctrl y hacemos drag & drop duplica este evento.

Luego la parte de entrada de datos queda a cargo del programador, en los ejemplos agregué unos formularios de muestra, lo que no hice fue crear una series de eventos, pero es posible si se tiene un poco de paciencia, cualquier duda sobre esto último puedo dar una guía de cómo hacerlo.

Dentro de los ejemplos en la carpeta «Advance» encontrarán un ejemplo enlazando el calendario a una base de datos de SQLite, deberán agregar a la referencia a la dll J3cnn.dll

Los eventos del calendario no se manejan por índice sino por keys esto porque internamente éstos son ordenados por fecha y de esta forma se pierde el índice (esto no gustó mucho cómo lo encaré de un principio).

El control no tiene ninguna dependencia, inclusive los iconos son pintados con líneas.

La rueda del scrollbar funciona correctamente cuanto está compilado, esto lo hice así ya que no utilicé Safe subclass, para evitarme dolores de cabeza al programar lo deje así, compilado funciona correctamente lo mismo para el evento MouseLeave. Si a alguien le es necesario que funcione en el ide puede quitar el «If App.LogMode Then».

Para ir cerrando sé que hay muchas cosas que quedaron pendientes, me gustaría que comenten si habría que implementar algo o corregir, también si ven algún error; así de esa manera me es más fácil. En los primeros días de subida seguramente lo esté actualizando frecuentemente a medida que me informen o encuentren detalles.

ucCalendar_Month.png
ucCalendar_Week.png
ucCalendar_Day.png
ucCalendar_Year.png

A continuación un detalle rápido de sus funciones y propiedades:

AddEvents: Función principal para agregar eventos al calendario, parámetros requerido; sujeto (titulo descriptivo), fecha y hora de inicio, fecha y hora de finalización y color del evento, el resto de los parámetros son opcionales, valor de retorno una key del evento.
CenterCalenarInNow: Mueve el scroll a la hora actual.
Clear: Elimina todo los eventos.
DateValue: Asigna o retorna la fecha actual del calendario.
DayHaveEvents: Retorna True/False si hay eventos en un día especifico.
DropDownColor: Cuando hay muchos eventos en un día y en el modo de vista Mes hay más de los que se pueden mostrar, se muestra una barra desplegable la cual podemos cambiar el color con esta propiedad.
EventsCount: Cantidad de eventos agregados.
EventsRoundCorner: Propiedad booleana para mostrar o no esquinas redondeadas en eventos y botones.
FirstDayOfWeek: Aquí podemos asignar que día queremos que se muestre como primer día de la semana, por defecto usa el del sistema.
GetAllEvents: Obtiene una colección de las keys de los eventos agregados.
GetEventData: Obtiene los datos de un evento, su primer parámetro es la key del evento la cual podemos obtenerla con GetAllEvents o por algún evento, el resto de los parámetros son valores de retorno.
GetEventsFromDay: Retorna una colección de keys de los eventos de un día en especifico,
GetSelectionRangeDate: Función para obtener el rango de fechas seleccionada.
HeaderColor: Color de la cabecera y parte de la temática.
HiddeEvent: Oculta el evento, útil para filtrar.
LinesColor: Color de las líneas.
Redraw: Habilita o deshabilita el repintando del calendario, esto sirve para acelerar la carga de eventos.
RemoveEvent: Elimina un evento.
Refresh: Refresca el repintado calendario.
SelectedEvent: Retorna el evento seleccionado.
SelectionColor: Color de la selección.
SetStrLanguage: Aqui podemos pasar la traducción de las palabras utilizadas.
ShowToolTipEvents: Si se quiere mostrar o no la ventana tooltip, esta se puede remplazar por otra personalizada y con informacion más detallada. Véase los eventos EventMouseEnter y EventMouseLeave.
Update: Es más completo que refresh, este vuelve a reordenar por fecha y alfabéticamente los evento, recalcula la posición y por último repinta todo.
UpdateEventData: Función para actualizar los datos de un evento. Debe pasarse la key del evento que queremos modificar.
UserCanChangeDate: Habilita o deshabilita para que el usuario pueda cambiar la pagina actual del calendario.
UserCanChangeEvents: Habilita o deshabilita si el usuario puede cambiar los eventos (mediante estiramiento o arrastre).
UserCanChangeViewMode: Oculta todos los botones en la parte superior de la parte derecha. De esta forma el usuario no puede cambiar el modo de vista o bien el programador toma el control de que vista quiere mostrar.
UserCanScrollMonth: En el modo de vista mes, se puede scrollear infinitamente si necesidad de cambiar de página, esto sólo si se habilita esta opcion.
ViewMode: Cambia por código en el modo de vista (Dia, Semana, Mes, Año)

Eventos:

DateBackColor: Al dispararse este evento podemos elegir según la fecha u hora el color de fondo de la celda, así como también su HatchStyle.
DateChange: Cuando el usuario cambia de página el calendario se dispara este evento.
DragNewEvent: Cuando el usuario tiene la presionada la tecla Control y hace drag & drop el evento se duplica, o sea un nuevo evento es agregado por el usuario, con este evento somos informados y así podremos guardar en la base de datos o como se lo esté manejando.
DropDownViewMore: Evento cuando se presiona el botón de ver más, este botón se encuentra en la vista «Meses», aparece cuando hay muchos eventos en un día y no entran en la celda, al presionar este cambiará a modo de vista = «Día», esto podemos cancelarlo y mostrar una ventana personalizada con los eventos del día, los eventos del día los podemos recuperar con GetEventsFromDay.
EventChangeDate: Este evento se dispara cuando el usuario hace drag & drop o cambia el tamaño del evento con el mouse. es útil para almacenar en la base de datos las nuevas fechas.
EventMouseEnter: Cuando el mouse entra sobre un evento.
EventMouseLeave: Cuando el mouse sale por encima del evento.
EventClick: Click en un evento.
PreDateChange: Antes de que el usuario pagine hacia otra fecha, aquí podemos cancelarlo.
PreEventChangeDate: Antes que el usuario cambie los datos de un evento con del drag & drop o el mouse, este evento es muy útil para impedir arrastrar eventos en ciertas fechas u horas en los que no queremos que se agregue un evento.


Actualización 16/05/2022:

  • En el ejemplo con SQLite se corrigió los tipos de campos de la base de datos
  • se almacenaron las variables booleanas como 1 y 0 para no tener conflictos en idiomas no español.
  • En los campos fechas se convirtió a formato Unix para que el ejemplo corra bien con cualquier configuración regional.

Actualización 13/05/2024:

  • Se añadió la propiedad StartCalendar para indicar el horario de comienzo del calendarito.
  • Se añadió la propiedad EndCalendar para indicar el horario de finalización del calendarito.
  • Se añadió la propiedad CalendarInterval para indicar las divisiones del calendario, por ejemplo cada 10, 15, 20 o 30 minutos, en este punto utilizar intervalos que la suma den 60 minutos

Un usuario @SearchingDataOnly de vbForum sugirió esta versión de RC6 para SQLite si alguien le interesa puede descargarlo aquí (primer post)

Abr 182022
 

Para esta ocasión un control de texto personalizable con varias opciones y diseño, también un multifunción ya que tiene distintos tipos de entrada, intenta sobre todo un aspecto al que solemos ver en html5/Bootstrap etc.

ucText1.png

El tipo de entrada lo podemos seleccionar mediante su propiedad «InputType»

[IT_Text] = 0 '// Texto normal
[IT_Numeric] = 1 '// Solo Números
[IT_Date] = 2 '// Solo Fecha
[IT_Time] = 3 '// Solo Hora
[IT_PasswordChar] = 4 '// Entrada de tipo Contraseña
[IT_MultiLine] = 5 '// Entrada de tipo Multilínea
[IT_Desimal] = 6 '// Numero decimales
[IT_LettersOnly] = 7 '// Solo letras
[IT_DropDown] = 8 '//Para que el control sea de lectura y al presionarlo llame el evento "DropDown" y pueda desplegar una lista (simulación de un ComboBox DropList style)

Luego tenemos la propiedad «RightButtonStyle» que es para elegir como queremos que se visualice la parte derecha del control, con las siguientes opciones

[RS_None] = 0 '// Ninguna el control lizo
[RS_Resizable] = 1 '// opcion utilizada en texto multilínea para expandir su tamaño
[RS_Icon] = 2 '// muestra el icono asignado
[RS_SpinButton] = 3 '// en tipos de entrada numéricos/fecha/hora poder cambiar su valor mediantes botoncitos mas/menos
[RS_ClearText] = 4 '// Una cruz a la derecha para borrar el contenido del textbox
[RS_ShowPassword] = 5 '//un icono que al presionarlo muestra la contraseña en el tipo de entrada contraseña
[RS_DropDown] = 6 '// un icono flecha abajo que al presionarlo llama el evento "DropDown" para mostrar una lista.

ucText2.png

Una descripción rápida de sus propiedades:

BackColor: Color de fondo
BackColorOnFocus: Corlo de fondo cuando el control toma el foco
BordeColor: color del borde.
BordeColorOnFocus: color de borde cuando el control toma el foco.
BordeRadius: para ajustar las esquinas redondeadas.
BordeStyle: enumeración; sin borde, borde normal, solo una línea inferior.
BordeWidth: ancho del borde.
ButtonGradient: los botones de los laterales se mostrarán con un pequeño degradado de su color hacia el blanco.
Caption: agrega una etiqueta en la parte superior izquierda (aconsejo usar fuentes escalables).
CueBanner: agrega una descripción en gris cuando el control está vacío.
EditGradient: muestra un degradado en la parte editable o donde tipeamos.
HotBorder: cuando se pasa el control sobre el control, el borde se resalta mezclando el color de borde normal y el del foco.
ImgLeftFillColor: si ImageFillStyle es igual a FS_Solid muestra el color seleccionado.
ImgLeftFillStyle: si se quiere mostrar el color ImageLeftFillColor o dejar el mismo color del backcolor.
ImgLeftShowMouseEvents, si se quiere o no mostrar una animación de botón al pasar el mouse en la parte izquierda.
ImgLeftSize: Tamaños del cuadrado de la imagen seleccionada (la imagen se selecciona mediante click derecho – Propiedades).
ImgRightFillColor: (Lo mismo que ImgLeftFillColor pero a la derecha).
ImgRightFillStyle: (Lo mismo que ImgLeftFillStyle pero a la derecha).
ImgRightShowMouseEvents: (Lo mismo que ImgLeftShowMouseEvents pero a la derecha).
ImgRightSize: (Lo mismo que ImgLeftSize pero a la derecha).
InputType: tipo de entrada (las detalle mas arriba).
MaxValue: para establecer un valor máximo en los tipos de entrada Número/Fecha/Hora (no aplica en tipo decimal).
MinValue: para establecer un valor mínimo en lo los tipo de entrada Número/Fecha/Hora (no aplica en tipo decimal).
OnFocusBigBorder: un borde grueso que se muestra al tomar el foco (no quise usar el shadow clásico).
OnFocusSellAll: se auto selecciona el contenido al tomar foco el control.
OnKeyReturnTabulate: si se presiona Enter tabula hacia el próximo control.
ParentBackColor: es el color del fondo del contendedor, este se asigna automáticamente al agregar el control al formulario pero en caso que éste cambie hay que cambiarlo en el control, es para que en las esquinas redondeadas no se vea ese color.
RightButtonStyle: es la apariencia del botón derecho (las detallé más arriba).
ShortDateFormat: formato de fecha corto, si esta propiedad esta vacía, toma el formato del sistema (recomiendo DD/MM/YYYY).
TextConvert: convierte el texto en; Normal, Minúscula, Mayúscula



Para elegir las imágenes click derecho sobre el control y dentro del menú seleccionar «Propiedades», o bien dentro de la ventana de propiedades en la propiedad, «Personalizado», también dentro de esa página de propiedades se puede poner el texto multilínea y/o texto Unicode.


Funciones:

ShowBalloonTip: muestra un globo de texto sobre el control (requiere manifest).
HideBalloonTip: oculta del globo de texto.
ScrollToBottom: scrolea hacia la última línea de texto (en tipo de entrada multilínea).
SetMinSize: asigna un tamaño mínimo del control, puede ajustarse por el usuario cuando este es RightButtonStyle = RS_Resizable.
SetMaxSize: asigna un tamaño máximo del control, puede ajustarse por el usuario cuando este es RightButtonStyle = RS_Resizable.

Si bien el control lo testee varias veces es muy probable que tenga algunos bugs, sobre todo en la parte de formatos de fecha.

Vale aclarar que algunas funciones y propiedades fueron tomadas del control TextBox de Krool y modificadas a necesidad.

El ucText.ctl debe acompañarse con el mIOleInPlaceActivate.bas y PropertyPage1.pag (este ultimo solo si se quiere usar imágenes en modo de diseño), los demás son opcionales según su uso.

Cualquier error reportarlo aquí en los comentarios.

Abr 092022
 

Esta es una aplicación que me había pedido un compañero quien gusta subir contendió a YouTube y hace uso de algunas herramientas para sumar visitas a su canal, estas herramientas utilizan Proxy para trabajar. Algunos proxy son pagos y otros free que se pueden encontrar en la web en grandes listas, solo que estos los muestran como activos, ya que lo testean mediante un ping, lo que sucede es que cuando se hace un httprequest la mayoría de éstos no funcionan y aquí es donde entra esta aplicación que se encarga de testear todos los proxy haciendo una petición http a algún sitio de internet. Ese resultado puede filtrarse y guardarse como una lista un poco más segura, y digo «un poco» ya que no es 100% confiable que estos proxy funcionen, y esto se debe a que son saturados. Así que supongo que si se quiere ir más seguro es mejor comprar los de pagos.

En cuanto a lo técnico, hay dos proyectos (dos ejecutables), uno es el principal para la interface y el otros es de tipo consola que se encarga de hacer la petición http, esto lo trabajé así para simular hilos. Dentro de la carpeta encontrarán un archivo llamado proxy.txt para probar, o pueden descargar mas de este sitio.

ProxyTester.png
Abr 062022
 

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.

spellcheck.png
Feb 022022
 

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.

ucSlider.png
 Posted by at 11:20
Ene 262022
 

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.

ucSwitch.png
 Posted by at 22:25
Dic 282021
 

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)

Knob1.png

.

.


.

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

Knob2.png Knob3.png
Dic 162021
 

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í

Sep 282021
 

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.

Aquí puedes ver la Documentación del control

ucGridPlus0.png ucGridPlus2.png ucGridPlus3.png ucGridPlus5.png ucGridPlus6.png ucGridPlus9.png ucGridPlus11.png ucGridPlus12.png

A continuación una tabla de sus propiedades.

AllowColumnDragColImagesEventsGetHotCellRowAlign
AllowColumnSortColImgAlignGetSelectionRangeRowBackColor
AllowEditColImgListAddImageGetTopRowRowChecked
AutoHeightAllRowsColImgListClearGetVisibleRowsRowDelete
AutoHeightRowColImgListHeightGetWindowsDPIRowFont
AutoWidthAllColumnsColImgListRemoveImageGradientStyleRowForeColor
AutoWidthColumnColImgListWidthGroupByColumnRowHeight
BackColorColImgMonocromeGroupColapseRowHidden
BackColorAltColInitImgListGroupExpandRowIdent
BorderColorColLabelsEventsHeaderBackColorRowIsFullRow
BorderRadiusColLeftHeaderFontRowIsGroup
BorderVisibleColMinWidthHeaderHeightRowMoveTo
CellAlignColMoveToHeaderImageAlignRowRef
CellBackColorColRefHeaderImgListAddImageRowsBackColor
CellEditionLockedColsCountHeaderImgListClearRowsBackColorAlt
CellFontColSortHeaderImgListCountRowsCount
CellForeColorColSortOrderHeaderImgListHeightRowSelectorBkColor
CellImageIndexColTagHeaderImgListRemoveImageRowSelectorWidth
CellStartEditColTextHiddeHeaderImgListWidthRowTag
CellTagColumnsAutoFitHeaderInitImgListRowWordBreak
CellValueColumnTextHeaderLinesHorizontalWidthScrollBarStyle
CellWordBreakColUserResizeLockedHeaderLinesVerticalWidthSelectionColor
CheckStyleColWidthHeaderTextAlignSelectionMode
ChrW2ColWordBreakHeaderTextWordBreakSetCurCell
ClearCurColInsertRowSetMargin
ColFontCurRowLastRowIsFooterSetSelectionRange
ColForeColorEnsureCellVisibleLinesHorizontalColorShowHotRow
ColFormatFillFromRSLinesHorizontalWidthShowHotRow
ColHeaderForeColorFixedColumnsLinesVerticalColorSort
ColHeaderImgIndexFixedRowsLinesVerticalWidthSwapCol
ColHiddenFontParentBackColorSwapRow
ColImageListCountGetCellRectRedrawUnGroup

VER DOCUMENTACION ONLINE

Gracias Yvan por el aporte

Descargar UserControl y Ejemplos (Actualizado 08/11/2022)

Descargar OCX (Actualizado 21/01/2022)


Historial de cambios

Continue reading »
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

Actualizado: 05/08/2021 (corrección en algunas fallas de la sombra en ventanas padres)

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

Actualizado: 05/08/2021 (corrección en algunas fallas de la sombra en ventanas padres)