


12/09/2021 (versión 1.7)
13/03/2021 (versión 1.6)
01/02/2021 (versión 1.5)
18/12/2020 (versión 1.4)
31/10/2020 (versión 1.3)
27/10/2020 (versión 1.2)
26/10/2020 (versión 1.1)
05/03/2020
11/02/2019
08/02/2019
07/07/2019
Cuando está utilizando ListBox, y generalmente al asignar objetos a los elementos de ListBox, desea mostrar/dibujar columnas en ListBox, utilizando el evento OnDrawItem.
Está bien, pero no tiene un control de encabezado para mostrar las columnas, y ninguno permite al usuario cambiar el tamaño, moverse y mostrar/ocultar columnas.
El TheaderControl (control predeterminado de Delphi) permite algunas de estas operaciones, pero debe escribir mucho código para cada cuadro de lista, cuidando las posiciones de repintado y calcular las posiciones de las columnas. Y, por supuesto, no tiene la función de columna Ocultar/mostrar.
Entonces, he estado trabajando en este componente y decidí compartirlo, porque es muy útil.
Además, el Dzlisttheader muestra una barra de desplazamiento cuando las columnas sobresalgan el área visible. ?
Admite Delphi Xe3..Delphi 11
Deja caer el Dzlisttheader en un formulario, luego suelte un cuadro de lista dentro del Dzlistheader.
Establezca el dzlisTheader.listbox = listBox.
Cree columnas deseadas en la propiedad dzlistheader.columns (debería ver las columnas en el tiempo de diseño).
Luego escriba OnDrawItem de Dzlisttheader (no OnDrawitem of ListBox; deje esto no asignado). Llame al método dzlistheader.dwcol para dibujar fácilmente cada columna.
Consulte la carpeta de ejemplo para conocer las funciones básicas.
Debe escribir OnDrawitem of Dzlisttheader (no ListBox), siguiendo esta idea:
procedure TForm1.DzListHeaderDrawItem (Control: TWinControl; Index: Integer; Rect: TRect;
State: TOwnerDrawState);
var P: TPerson;
begin
P := TPerson(ListBox.Items.Objects[Index]);
DzListHeader.DwCol( 0 , Rect, P.ID);
DzListHeader.DwCol( 1 , Rect, P. Name );
DzListHeader.DwCol( 2 , Rect, P.Gender);
end ;¡Simplemente así!
Este componente ofrece una segunda opción de uso, por lo que no necesita usar objetos y no necesita escribir código para dibujar elementos. En esta opción, debe agregar elementos con celdas de texto separadas por el carácter de TAB.
Supongamos que tiene la siguiente tabla:
| IDENTIFICACIÓN | Nombre | Teléfono |
|---|---|---|
| 1 | Jhón | 1111-2222 |
| 2 | Sarah | 3333-4444 |
| 3 | ALFREDO | 5555-6666 |
Por lo tanto, solo habilita la propiedad AutodrawTabBedText y agregue elementos a ListBox que tiene celdas separadas por el carácter de pestaña, así:
1[TAB]JHON[TAB]1111-2222
2[TAB]SARAH[TAB]3333-4444
3[TAB]ALFRED[TAB]5555-6666
Nota: [Tab] representa el carácter #9
Luego, solo configure las columnas deseadas. En este ejemplo habrá columnas: ID, nombre, teléfono. Sin ninguna línea de código, esto imprimirá todos los elementos en la lista y se alineará por los parámetros de columnas.
Si desea agregar elementos en tiempo de ejecución, puede usar la función Additem, especificando una matriz de cadenas que se convertirán en un texto separado con pestañas.
Es posible que deba usar OnDrawitem con texto con pestañas para personalizar las celdas Draw. En este caso, debe dejar el AutodrawTabbedText deshabilitado y escribir en el evento OnDrawitem, y luego usar GetItemArray para extraer una matriz del elemento actual, con celdas separadas para dibujar usando el método DWCOL.
Para abrir el cuadro de diálogo Personalizar, simplemente haga clic con el botón derecho en cualquier parte del encabezado o columnas. En el cuadro de diálogo Personalizar, puede reordenar columnas, mostrar/ocultar columnas y establecer el pedido predeterminado.
AllowMoving: Boolean = Enable/desactivar columnas reposicionamiento
AllowResize: Boolean = Enable/deshabilitar columnas en movimiento (si false, columna. Soleable no importa)
AutoDrawTabbedText: Boolean = Cuando se usa autodrawtabbedText, no necesita usar objetos o onDrawitem. Puede agregar elementos al cuadro de lista con Tab Delimiter para dividir columnas. En este caso, no necesita codificar para dibujar elementos. Hay dos métodos disponibles para usar con texto con pestañas: Additem (agregue la matriz de elementos, por lo que el componente se convierte automáticamente en el texto con pestañas); GetArrayText (devuelve una matriz del índice solicitado). Todavía puede dejar esta propiedad deshabilitada y trabajar con texto con pestañas, escribir el evento OnDrawitem y usar GetArrayText para leer el texto de las columnas separadas.
ColorNormalCol: TColor = color de fondo de columna
ColorHoverCol: TColor = columna de fondo de fondo cuando el mouse sobre la columna
ColorLineNormal: TColor = línea de fondo de línea (en ListBox) cuando no es una línea impar (o usaDD deshabilitado), y no se seleccionó la línea
ColorLineOdd: TColor = línea de fondo de línea cuando la línea impar y usaodd habilitado
ColorLineSel: TColor = línea de fondo de línea cuando se selecciona la línea
ColorShape: TColor = Color of Dash que indica la orientación de movimiento o cambio de tamaño
Columns: TDzListHeaderColumns = colección de columnas
HeaderHeight: Integer = Altura de encabezado fijo (puede escribir múltiples líneas en la leyenda de la columna si lo desea)
LineCenter: Boolean = indica la función dwcol dibuja texto centralizado verticalmente según la altura de la línea
LineTop: Integer = indica la posición y del texto al DWCOL cuando LineCenter es falso
ListBox: TCustomListBox = ListBox Object (¡requerido!)
TextMargin: Integer = espacio en píxeles a la izquierda y a la derecha de la columna (utilizado para que el texto en una columna no se adhiera al texto en otra columna)
TitleFont: TFont = Title Font para subtítulos de columnas
UseOdd: Boolean = Use fondo de color específico para líneas impares (ver propiedad Colorlineodd)
Alignment: TAlignment = indica la alineación del texto utilizado en la función DWCOL
Caption: String = el texto del título del título de la columna
CaptionEx: String = Esta ley es opcional, se usa si desea especificar un subtítulo completo para mostrar en el cuadro de diálogo Personalizar (por ejemplo: subtítulos: "id", subtittionEx: "ID de la persona")
Customizable: Boolean = permitir que la columna sea personalizable en el cuadro de diálogo Personalizar
CustomTextFont: Boolean = determina la propiedad almacenada para textFont (se establece automáticamente cuando textfont cambia)
Hint: String = columna Sugerencia
MaxWidth: Integer = column maxwidth al cambiar el tamaño
MinWidth: Integer = columna MinWidth al cambiar el tamaño
Name: String = Nombre de la columna para encontrar la columna (función colbyName) y para la personalización de guardado/carga (funciones SaveCustom/LoadCustom). La personalización requiere el nombre de la columna porque puede cambiar su proyecto, y en este caso las columnas se mantendrán en orden correcto según los nombres de las columnas.
Sizeable: Boolean = permitir el cambio de tamaño de la columna
TextFont: TFont = font utilizado por lienzo para dibujar el texto del elemento para esta columna (si no se cambia, Canvas usa la fuente de cuadro de lista para dibujar elementos)
Visible: Boolean = show/ocultar columna
Width: Integer = ancho de columna
Data: Pointer = Pointer to Free Use (propiedad no publicada)
procedure LoadCustom ( const A: String);Carga la personalización de la columna de la cadena, incluida la posición, el tamaño y la visibilidad. Puede cargar desde el archivo Registry/INI.
function SaveCustom : String;Guarde la personalización de las columnas en la cadena, incluida la posición, el tamaño y la visibilidad. Puede guardar en el archivo Registry/INI.
function ColByID (ID: Integer): TDzListHeaderCol;Devuelve un TDZLISTTEADERCOL por ID de columna. La ID permanece fija cuando se mueve columnas (la posición de la columna se define mediante la propiedad de índice).
function ColByName ( const aName: String): TDzListHeaderCol;Devuelve un TDZLISTTEADERCOL por nombre de columna.
procedure DwCol (ID: Integer; Rect: TRect; const Value : Variant; Margin: Integer = 0 );Utilizado en OnDrawitem, para dibujar un texto de elemento de columna. La identificación representa el número de columna considerando el orden en la colección. Entonces, incluso cuando las columnas se mueven en tiempo de ejecución, la ID sigue siendo siempre la misma. Esta es la identificación principal de la columna. El valor representa el texto que se imprimirá. Tenga en cuenta que el valor es de tipo variante, por lo que no necesita convertir a cadena, a menos que desee formatear el valor, por supuesto. Puede especificar un margen en el lado izquierdo de la columna, para dibujar un icono u otro sorteo personalizado (ver fuente de ejemplo).
function AddItem ( const Ar: TArray<String>): Integer;Esta función le ayuda a agregar un elemento a ListBox, separando automáticamente las cadenas de matriz con un personaje de pestaña. Debe usar esta función solo cuando almacene datos en ListBox usando el método Tabbed Delimiter. Por lo general, querrá usar esto junto con la propiedad AutodrawTabbedText, por lo que no necesita escribir OnDrawitem.
function GetItemArray (Index: Integer): TArray<String>; Devuelve una matriz de cadenas relativas al índice en ListBox, considerando que el texto del elemento tiene datos separados por un carácter de pestaña. Puede leer rápidamente una celda usando GetItemArray(Index)[Column] .
function GetLeft : Integer;Devuelve la posición izquierda de la columna según los límites RECT.
function GetRight : Integer;Devuelve la posición correcta de la columna según los límites RECT.
procedure OnColumnClick (Sender: TObject; Col: TDzListHeaderCol);Ocurre cuando se hace clic con la izquierda en una columna.
procedure OnColumnDraw (Sender: TObject; Col: TDzListHeaderCol; Canvas: TCanvas; Rect: TRect; Hover: Boolean);Si establece este evento, puede ver el tiempo de sorteo del título de la columna, lo que le permite cambiar el lienzo o agregar algunos a la columna pintada actual. Cuando el evento se dispara, la columna ya está pintada, pero no está pintada en la pantalla, porque se usa un mapa de bits interno. Entonces, este evento le permite cambiar este lienzo de mapa de bits. Cuando el evento termina, el mapa de bits se pinta en la pantalla. El parámetro Hover indica que el mouse está sobre la columna en este momento.
procedure OnColumnRClick (Sender: TObject; Col: TDzListHeaderCol);Ocurre cuando se hace clic con el botón derecho en una columna.
procedure OnColumnResize (Sender: TObject; Col: TDzListHeaderCol);Ocurre después de que se redimensionó una columna.
procedure OnDrawItem (Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState);Debe utilizar este evento para escribir todas las columnas, utilizando el método DWCOL (consulte la fuente de ejemplo).
Este evento no disparará si está utilizando autodrawTabBedText = True
procedure MouseEnterCol (Sender: TObject; Col: TDzListHeaderCol);Ocurre cuando el mouse ingresa a un área de columna.
procedure MouseLeaveCol (Sender: TObject; Col: TDzListHeaderCol);Ocurre cuando el mouse deja un área de columna.