


12/09/2021 (versão 1.7)
13/03/2021 (versão 1.6)
01/02/2021 (versão 1.5)
18/12/2020 (versão 1.4)
31/10/2020 (versão 1.3)
27/10/2020 (versão 1.2)
26/10/2020 (versão 1.1)
05/05/2020
02/11/2019
08/08/2019
02/07/2019
Quando você está usando o ListBox e, geralmente, ao atribuir objetos aos itens da ListBox, você deseja mostrar/desenhar colunas no ListBox, usando o OnDrawItem.
Tudo bem, mas você não tem um controle de cabeçalho para mostrar as colunas e não permite que o usuário redimensione, se mova e mostre/oculte colunas.
O TheaderControl (Delphi Padrive Control) permite algumas dessas operações, mas você precisa escrever muito código para cada caixa de listagem, cuidando de repintando itens e calcular as posições das colunas. E, é claro, você não tem função de coluna Ocultar/Mostrar disponível.
Então, eu tenho trabalhado nesse componente e decidi compartilhá -lo, porque é muito útil.
Além disso, o dzlistheader exibe uma barra de rolagem quando as colunas superam a área visível. ?
Suporta Delphi Xe3..Delphi 11
Solte o dzlisttheader em um formulário e depois solte uma caixa de listagem dentro do dzlistheader.
Defina o dzlisttheader.listbox = listbox.
Crie colunas desejadas na propriedade Dzlisttheader.Columns (você deve ver as colunas em tempo de design).
Em seguida, escreva o drawiTem do dzlistheader (não ondrawItem da ListBox - deixe isso não atribuído). Chame o método dzlistheader.dwcol para desenhar facilmente todas as colunas.
Consulte a pasta Exemplo para conhecer as funções básicas.
Você deve escrever OnDrawItem de Dzlisttheader (não ListBox), seguindo esta ideia:
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 ;Simplesmente assim!
Este componente oferece uma segunda opção de uso, para que você não precise usar objetos e não precisa escrever código para desenhar itens. Nesta opção, você deve adicionar itens com células de texto separadas pelo caractere da guia.
Vamos supor que você tenha a tabela seguinte:
| EU IA | Nome | Telefone |
|---|---|---|
| 1 | Jhon | 1111-2222 |
| 2 | Sarah | 3333-4444 |
| 3 | Alfred | 5555-6666 |
Então você apenas habilita a propriedade AutodrawTabbedText e adiciona itens à ListBox, que possui células separadas pelo caractere da guia, assim:
1[TAB]JHON[TAB]1111-2222
2[TAB]SARAH[TAB]3333-4444
3[TAB]ALFRED[TAB]5555-6666
NOTA: [TAB] representa #9 caractere
Em seguida, basta configurar colunas desejadas. Neste exemplo, serão colunas: id, nome, telefone. Sem qualquer linha de código, isso imprimirá todos os itens da lista e alinhado pelos parâmetros das colunas.
Se você deseja adicionar itens em tempo de execução, pode usar a função AddItem, especificando uma matriz de strings que serão convertidas em texto separado com abas.
Pode ser necessário usar o OnDrawItem com o texto com guias para personalizar as células desenham. Nesse caso, você deve deixar o AutodrawTabbedText desativado e escrever um evento OnDrawItem e, em seguida, usar o GetItemarray para extrair uma matriz do item atual, tendo as células separadas para desenhar usando o método DWCOL.
Para abrir a caixa de diálogo Personalizar, clique com o botão direito do mouse em qualquer parte do cabeçalho ou colunas. Na caixa de diálogo Personalize, você pode reordenar colunas, mostrar/ocultar colunas e definir o pedido padrão.
AllowMoving: Boolean = Ativar/desativar colunas reposicionando
AllowResize: Boolean = Ativar/desabilitar colunas em movimento (se false, column.sizable não importa)
AutoDrawTabbedText: Boolean = Ao usar o AutodRawTabBedText, você não precisa usar objetos ou OnDrawItem. Você pode adicionar itens à caixa de listagem com o Delimitador de Tab para dividir colunas. Nesse caso, você não precisa codificar para desenhar itens. Existem dois métodos disponíveis para uso com o texto com guias: Additem (Adicione a matriz do item, para que o componente converte automaticamente no texto com guias); GetArrayText (Retorna uma variedade de índice solicitado). Você ainda pode deixar essa propriedade desativada e trabalhar com o texto com guias, escrevendo o Event OnDrawItem e usando o getArrayText para ler o texto das colunas separadas.
ColorNormalCol: TColor = coluna cor de fundo
ColorHoverCol: TColor = coluna cor de fundo quando mouse sobre a coluna
ColorLineNormal: TColor = line Background Color (On ListBox) quando não é uma linha ímpar (ou desativada por uso), e não selecionada linha
ColorLineOdd: TColor = line Background Color quando linha ímpar e USEDODD ativado
ColorLineSel: TColor = linha cor de fundo quando a linha é selecionada
ColorShape: TColor = cor do traço que indica orientação em movimento ou redimensionamento
Columns: TDzListHeaderColumns = colunas coleta
HeaderHeight: Integer = altura do cabeçalho fixo (você pode digitar várias linhas na legenda da coluna, se quiser)
LineCenter: Boolean = indica a função dwcol desenha o texto centralizado verticalmente de acordo com a altura da linha
LineTop: Integer = indica a posição Y do texto para o dwcol quando LineCenter é falso
ListBox: TCustomListBox = ListBox Object (necessário!)
TextMargin: Integer = Espaço em pixels à esquerda e à direita da coluna (usada para que o texto em uma coluna não grude no texto em outra coluna)
TitleFont: TFont = Fonte do título para legendas de colunas
UseOdd: Boolean = use fundo de cores específico para linhas ímpares (consulte a propriedade ColorLineODD)
Alignment: TAlignment = indica o alinhamento do texto usado na função DWCOL
Caption: String = O texto da legenda do título da coluna
CaptionEx: String = Esta legenda é opcional, usada se você deseja especificar uma legenda completa para ser exibida na caixa de diálogo personalizada (por exemplo: legenda: "id", legex: "id de pessoa")
Customizable: Boolean = Permitir que a coluna seja personalizável na caixa de diálogo personalizada
CustomTextFont: Boolean = determina armazenada para a propriedade TextFont (é definido automaticamente quando o TextFont muda)
Hint: String = dica de coluna
MaxWidth: Integer = coluna maxwidth ao redimensionar
MinWidth: Integer = Coluna Minwidth ao redimensionar
Name: String = Nome da coluna para encontrar a coluna (função Colbyname) e para salvar/carregar personalização (funções SaveCustom/LoadCustom). A personalização requer nome da coluna porque você pode alterar seu projeto e, neste caso, as colunas serão mantidas em ordem correta com base nos nomes das colunas.
Sizeable: Boolean = Permitir redimensionar a coluna
TextFont: TFont = font usado pela tela para desenhar o texto do item para esta coluna (se não for alterada, o Canvas usa a fonte da ListBox para desenhar itens)
Visible: Boolean = Mostrar/Ocultar Coluna
Width: Integer = largura da coluna
Data: Pointer = ponteiro para uso livre (propriedade não publicada)
procedure LoadCustom ( const A: String);Carrega a personalização da coluna da string, incluindo posição, tamanho e visibilidade. Você pode carregar do arquivo Registry/INI.
function SaveCustom : String;Salvar a personalização das colunas na sequência, incluindo posição, tamanho e visibilidade. Você pode salvar no arquivo Registry/INI.
function ColByID (ID: Integer): TDzListHeaderCol;Retorna um tdzlisttheadercol por ID da coluna. O ID permanece fixo ao mover colunas (a posição da coluna é definida pela propriedade Index).
function ColByName ( const aName: String): TDzListHeaderCol;Retorna um tdzlistheadercol pelo nome da coluna.
procedure DwCol (ID: Integer; Rect: TRect; const Value : Variant; Margin: Integer = 0 );Usado no OnDrawItem, para desenhar um texto do item da coluna. O ID representa o número da coluna, considerando o pedido na coleção. Portanto, mesmo quando as colunas são movidas em tempo de execução, o ID permanece sempre o mesmo. Esta é a principal identificação da coluna. O valor representa o texto a ser impresso. Observe que o valor é do tipo variante, para que você não precise se converter em string, a menos que deseje formatar o valor, é claro. Você pode especificar uma margem no lado esquerdo da coluna, para desenhar um ícone ou outro desenho personalizado (consulte a fonte de exemplo).
function AddItem ( const Ar: TArray<String>): Integer;Esta função ajuda você a adicionar um item ao ListBox, separando automaticamente strings de matriz com um caractere de guia. Você deve usar essa função somente quando estiver armazenando dados no ListBox usando o método Delimiter com guias. Normalmente, você deseja usá -lo junto com a propriedade AutodrawTabbedText, para não precisar escrever ondrawItem.
function GetItemArray (Index: Integer): TArray<String>; Retorna uma matriz de strings em relação ao índice no ListBox, considerando que o texto do item possui dados separados por um caractere de guia. Você pode ler rapidamente uma célula usando GetItemArray(Index)[Column] .
function GetLeft : Integer;Retorna a posição esquerda da coluna de acordo com os limites RECT.
function GetRight : Integer;Retorna a posição correta da coluna de acordo com os limites RECT.
procedure OnColumnClick (Sender: TObject; Col: TDzListHeaderCol);Ocorre quando clicado com esquerda em uma coluna.
procedure OnColumnDraw (Sender: TObject; Col: TDzListHeaderCol; Canvas: TCanvas; Rect: TRect; Hover: Boolean);Se você definir este evento, poderá pegar o tempo do desenho do título da coluna, permitindo alterar a tela ou adicionar alguns à coluna pintada atual. Quando o evento dispara, a coluna já está pintada, mas não pintada na tela, porque um bitmap interno é usado. Portanto, este evento permite alterar esta tela de bitmap. Quando o evento termina, o bitmap é pintado na tela. O parâmetro hover indica que o mouse está sobre a coluna neste momento.
procedure OnColumnRClick (Sender: TObject; Col: TDzListHeaderCol);Ocorre quando clicar com o botão direito do mouse em uma coluna.
procedure OnColumnResize (Sender: TObject; Col: TDzListHeaderCol);Ocorre depois que uma coluna foi redimensionada.
procedure OnDrawItem (Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState);Você deve usar este evento para escrever todas as colunas, usando o método DWCOL (consulte Exemplo de origem).
Este evento não vai disparar se você estiver usando AutodrawTabbedText = true
procedure MouseEnterCol (Sender: TObject; Col: TDzListHeaderCol);Ocorre quando o mouse entra em uma área de coluna.
procedure MouseLeaveCol (Sender: TObject; Col: TDzListHeaderCol);Ocorre quando o mouse deixa uma área de coluna.