


09/12/2021 (version 1.7)
13/03/2021 (version 1.6)
02/01/2021 (version 1.5)
18/12/2020 (version 1.4)
31/10/2020 (version 1.3)
27/10/2020 (version 1.2)
26/10/2020 (version 1.1)
05/03/2020
02/11/2019
02/08/2019
02/07/2019
Lorsque vous utilisez ListBox, et généralement lorsque vous affectez des objets aux éléments Listbox, vous souhaitez afficher / dessiner des colonnes dans la liste ListBox, en utilisant l'événement OnDrawitem.
C'est OK, mais vous n'avez pas de contrôle d'en-tête pour afficher les colonnes, et ni l'un ni l'autre ne permettez à l'utilisateur de redimensionner, de déplacer et d'afficher / masquer les colonnes.
Le TheaderControl (Delphi Default Control) permet certaines de ces opérations, mais vous devez écrire beaucoup de code pour chaque boîte de liste, en prenant en charge les éléments et calculant les positions des colonnes. Et, bien sûr, vous n'avez pas la fonction de colonne masquée / affiche disponible.
Donc, j'ai travaillé sur ce composant, et j'ai décidé de le partager, car c'est très utile.
De plus, le DZLISTHEDER affiche une barre de défilement lorsque les colonnes surdimensionnent la zone visible. ?
Prend en charge Delphi Xe3..Delphi 11
Déposez le DzlistHeader sous une forme, puis déposez une boîte de liste à l'intérieur du DzlistHeader.
Définissez le dzlistheader.listbox = listbox.
Créez des colonnes souhaitées sur la propriété DZLISTHEADER.Columns (vous devriez voir les colonnes au moment de la conception).
Ensuite, écrivez OnDrawitem de DzlistHeader (pas OnDrawitem de Listbox - laissez cela non assisté). Appelez la méthode dzlistheader.dwcol pour dessiner facilement chaque colonne.
Veuillez consulter l'exemple de dossier pour connaître les fonctions de base.
Vous devriez écrire OnDrawitem de DzlistHeader (pas ListBox), en suivant cette idée:
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 ;Tout simplement comme ça!
Ce composant offre une deuxième option d'utilisation, vous n'avez donc pas besoin d'utiliser des objets, et vous n'avez pas besoin d'écrire de code pour dessiner des éléments. Dans cette option, vous devez ajouter des éléments avec des cellules de texte séparées par le caractère de l'onglet.
Supposons que vous ayez le tableau suivant:
| IDENTIFIANT | Nom | Téléphone |
|---|---|---|
| 1 | Jhon | 1111-2222 |
| 2 | Sarah | 3333-4444 |
| 3 | Alfred | 5555-6666 |
Vous activez donc simplement la propriété AutoDraWtabbedText et ajoutez des éléments à Listbox ayant des cellules séparées par le caractère de l'onglet, comme celle-là:
1[TAB]JHON[TAB]1111-2222
2[TAB]SARAH[TAB]3333-4444
3[TAB]ALFRED[TAB]5555-6666
Remarque: [Tab] représente le caractère n ° 9
Ensuite, configurez simplement les colonnes souhaitées. Dans cet exemple, ce seront des colonnes: id, nom, téléphone. Sans aucune ligne de code, cela imprimera tous les éléments de la liste et alignés par les paramètres des colonnes.
Si vous souhaitez ajouter des éléments au moment de l'exécution, vous pouvez utiliser la fonction additem, en spécifiant un tableau de chaînes qui seront converties dans un texte séparé à onglets.
Vous devrez peut-être utiliser onDrawitem avec du texte à onglets pour personnaliser les cellules. Dans ce cas, vous devez laisser le AutoDraWtabbedText Disabled and Write Event OnDrawitem, puis utiliser GetIteMarray pour extraire un tableau de l'élément actuel, en faisant séparer les cellules pour dessiner en utilisant la méthode DWCOL.
Pour ouvrir la boîte de dialogue Personnaliser, cliquez avec le bouton droit dans n'importe quelle partie de l'en-tête ou des colonnes. Dans la boîte de dialogue Personnaliser, vous pouvez réorganiser les colonnes, afficher / masquer les colonnes et définir l'ordre par défaut.
AllowMoving: Boolean = activer / désactiver les colonnes repositionnant
AllowResize: Boolean = Activer / Désactiver les colonnes se déplacer (si FALSE, COLUMN.IXIYable n'a pas d'importance)
AutoDrawTabbedText: Boolean = Lorsque vous utilisez AutoDraWtabbedText, vous n'avez pas besoin d'utiliser des objets ou ONDRAWITEM. Vous pouvez ajouter des éléments à la liste List avec un délimiteur d'onglet aux colonnes divisées. Dans ce cas, vous n'avez pas besoin de coder pour dessiner des éléments. Il existe deux méthodes disponibles avec du texte à onglets: additem (Ajouter un tableau d'élément, donc le composant se convertit automatiquement en texte à onglets); GetArrayText (renvoie un tableau d'index demandé). Vous pouvez toujours laisser cette propriété désactivée et travailler avec du texte à onglets, écrire l'événement OnDrawitem et utiliser getArrayText pour lire le texte des colonnes séparées.
ColorNormalCol: TColor = couleur de fond de colonne
ColorHoverCol: TColor = couleur de la colonne Couleur lorsque vous souris sur la colonne
ColorLineNormal: TColor = Couleur d'arrière-plan de ligne (sur Listbox) lorsqu'il n'est pas une ligne impair (ou useoDd Disabled), et non sélectionnée
ColorLineOdd: TColor = Couleur d'arrière-plan de ligne lorsque la ligne impair et l'utilisation ont activé
ColorLineSel: TColor = Couleur d'arrière-plan de ligne lorsque la ligne est sélectionnée
ColorShape: TColor = couleur de tableau de bord qui indique une orientation mobile ou redimensive
Columns: TDzListHeaderColumns = Collection des colonnes
HeaderHeight: Integer = hauteur de tête fixe (vous pouvez taper plusieurs lignes dans la légende de la colonne si vous le souhaitez)
LineCenter: Boolean = indique que la fonction DWCOL dessine le texte centralisé verticalement en fonction de la hauteur de la ligne
LineTop: Integer = indique la position y du texte au DWCOL lorsque le linecenter est faux
ListBox: TCustomListBox = ListBox Object (Obligatoire!)
TextMargin: Integer = espace en pixels à gauche et à droite de la colonne (utilisé pour que le texte dans une colonne ne colle pas au texte dans une autre colonne)
TitleFont: TFont = Title Font for Colonnes Légendes
UseOdd: Boolean = utilisez un fond de couleur spécifique pour les lignes impairs (voir la propriété ColorLineodd)
Alignment: TAlignment = indique l'alignement du texte utilisé sur la fonction DWCOL
Caption: String = le texte de la légende du titre de la colonne
CaptionEx: String = Cette légende est facultative, utilisée si vous souhaitez spécifier une légende complète à afficher dans la boîte de dialogue Personnaliser (par exemple: Légende: "ID", Légendex: "ID de la personne")
Customizable: Boolean = permettre à la colonne de personnaliser la boîte de dialogue personnaliser
CustomTextFont: Boolean = détermine stocké pour la propriété TextFont (est automatiquement défini lorsque TextFont change)
Hint: String = indice de colonne
MaxWidth: Integer = colonne maxwidth lors de la redimensionnement
MinWidth: Integer = colonne MinWidth lors de la redimensionnement
Name: String = Nom de la colonne pour trouver la colonne (fonction colByName) et pour la personnalisation de sauvegarde / chargement (fonctions SAVECustom / LoadCustom). La personnalisation nécessite le nom de la colonne car vous pouvez modifier votre projet et, dans ce cas, les colonnes seront conservées dans un ordre correct en fonction des noms de colonnes.
Sizeable: Boolean = permettre la colonne redimensive
TextFont: TFont = Font utilisé par Canvas pour dessiner du texte de l'élément pour cette colonne (si elle n'est pas modifiée, Canvas utilise la police ListBox pour dessiner des éléments)
Visible: Boolean = Colonne Show / Master
Width: Integer = largeur de colonne
Data: Pointer = Pointer to Gratuit Use (propriété non publiée)
procedure LoadCustom ( const A: String);Charge la personnalisation de la colonne à partir de la chaîne, y compris la position, la taille et la visibilité. Vous pouvez charger à partir du fichier Registry / INI.
function SaveCustom : String;Enregistrer la personnalisation des colonnes en chaîne, y compris la position, la taille et la visibilité. Vous pouvez enregistrer dans le fichier Registry / INI.
function ColByID (ID: Integer): TDzListHeaderCol;Renvoie un tdzlistheaderCol par ID de colonne. L'ID reste fixé lors des colonnes de déplacement (la position de colonne est définie par la propriété d'index).
function ColByName ( const aName: String): TDzListHeaderCol;Renvoie un tdzlistheaderCol par nom de colonne.
procedure DwCol (ID: Integer; Rect: TRect; const Value : Variant; Margin: Integer = 0 );Utilisé sur ONDrawitem, pour dessiner un texte d'élément de colonne. L'ID représente le numéro de colonne en tenant compte de l'ordre dans la collection. Ainsi, même lorsque les colonnes sont déplacées au moment de l'exécution, l'ID reste toujours le même. Il s'agit de l'identification principale de la colonne. La valeur représente le texte à imprimer. Notez que la valeur est de type variant, vous n'avez donc pas besoin de vous convertir en chaîne, sauf si vous souhaitez formater la valeur, bien sûr. Vous pouvez spécifier une marge sur le côté gauche de la colonne, pour dessiner une icône ou un autre tirage personnalisé (voir l'exemple de source).
function AddItem ( const Ar: TArray<String>): Integer;Cette fonction vous aide à ajouter un élément à ListBox, séparant automatiquement les chaînes de tableau avec un caractère d'onglet. Vous devez utiliser cette fonction uniquement lorsque vous stockez des données dans Listbox à l'aide de la méthode Tabbed Delimiter. Habituellement, vous voudrez l'utiliser avec la propriété AutoDraWTabbedText, vous n'avez donc pas besoin d'écrire onDrawitem.
function GetItemArray (Index: Integer): TArray<String>; Renvoie un tableau de chaînes par rapport à l'index dans Listbox, la considération du texte de l'élément a des données séparées par un caractère d'onglet. Vous pouvez rapidement lire une cellule à l'aide de GetItemArray(Index)[Column] .
function GetLeft : Integer;Renvoie la position gauche de la colonne en fonction des limites de rect.
function GetRight : Integer;Renvoie la position droite de la colonne en fonction des limites REct.
procedure OnColumnClick (Sender: TObject; Col: TDzListHeaderCol);Se produit lorsqu'il est gauche sur une colonne.
procedure OnColumnDraw (Sender: TObject; Col: TDzListHeaderCol; Canvas: TCanvas; Rect: TRect; Hover: Boolean);Si vous définissez cet événement, vous pouvez attraper le temps du tit-titrage de colonne, vous permettant de changer la toile ou en ajouter à une colonne peinte actuelle. Lorsque l'événement se déclenche, la colonne est déjà peinte, mais n'est pas peinte dans l'écran, car un bitmap interne est utilisé. Cet événement vous permet donc de modifier ce toile de bitmap. Lorsque l'événement se termine, le bitmap est peint dans l'écran. Le paramètre de survol indique que la souris est au-dessus de la colonne en ce moment.
procedure OnColumnRClick (Sender: TObject; Col: TDzListHeaderCol);Se produit lorsqu'il est cliqué droit sur une colonne.
procedure OnColumnResize (Sender: TObject; Col: TDzListHeaderCol);Se produit après la redimension d'une colonne.
procedure OnDrawItem (Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState);Vous devez utiliser cet événement pour écrire toutes les colonnes, en utilisant la méthode DWCOL (veuillez consulter l'exemple de source).
Cet événement ne se déclenche pas si vous utilisez AutoDraWtabbedText = True
procedure MouseEnterCol (Sender: TObject; Col: TDzListHeaderCol);Se produit lorsque la souris entre dans une zone de colonne.
procedure MouseLeaveCol (Sender: TObject; Col: TDzListHeaderCol);Se produit lorsque la souris quitte une zone de colonne.