


09/12/2021 (Version 1.7)
13.03.2021 (Version 1.6)
02/01/2021 (Version 1.5)
18.12.2020 (Version 1.4)
03.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
Wenn Sie ListBox verwenden, und normalerweise bei der Zuweisung von Objekten für Listbox -Elemente die Spalten im Listbox mit dem OneDrawitem -Ereignis anzeigen/zeichnen möchten.
Das ist in Ordnung, aber Sie haben keine Header -Steuerung, um die Spalten anzuzeigen, und es erlauben auch keinen Benutzer, die Größe zu ändern, sich zu bewegen und Spalten zu zeigen/auszublenden.
Das theaderControl (Delphi Standard Control) ermöglicht einige dieser Vorgänge, aber Sie müssen viel Code für jede einzelne Listbox schreiben, um Elemente neu zu lackieren und Spaltenpositionen zu berechnen. Und natürlich haben Sie keine Spaltenfunktion ausblenden/anzeigen.
Also habe ich an dieser Komponente gearbeitet und beschlossen, sie zu teilen, weil es sehr nützlich ist.
Darüber hinaus zeigt der DZLISTHAEDER eine Bildlaufleiste an, wenn die Spalten den sichtbaren Bereich überdimensioniert. ?
Unterstützt Delphi xe3..delphi 11
Lassen Sie den Dzlistheader in einem Formular fallen und lassen Sie dann eine Listbox in den Dzlistheader fallen.
Legen Sie den dzlistheader.listbox = listBox fest.
Erstellen Sie die gewünschten Spalten in der Eigenschaft dzlistheader.columns (Sie sollten die Spalten zur Entwurfszeit sehen).
Schreiben Sie dann OnDrawitem von Dzlistheader (nicht OneDrawitem von Listbox - lassen Sie dies nicht zugewiesen). Rufen Sie die Methode dzlistheader.dwcol auf, um problemlos jede einzelnen Spalte zu zeichnen.
Siehe Beispielordner, um die Grundfunktionen zu kennen.
Sie sollten OneDrawitem von Dzlistheader (nicht Listbox) schreiben, folgt dieser Idee:
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 ;Einfach so!
Diese Komponente bietet eine zweite Option der Nutzung, sodass Sie keine Objekte verwenden müssen und keinen Code schreiben müssen, um Elemente zu zeichnen. In dieser Option sollten Sie Elemente mit Textzellen hinzufügen, die durch TAB -Zeichen getrennt sind.
Nehmen wir an, Sie haben die folgende Tabelle:
| AUSWEIS | Name | Telefon |
|---|---|---|
| 1 | Jhon | 1111-2222 |
| 2 | Sarah | 3333-4444 |
| 3 | Alfred | 5555-6666 |
Sie aktivieren also einfach die autodrawtabbedText -Eigenschaft und fügen Elemente zu Listbox mit Zellen hinzu, die durch Registerkartenzeichen getrennt sind, wie folgt:
1[TAB]JHON[TAB]1111-2222
2[TAB]SARAH[TAB]3333-4444
3[TAB]ALFRED[TAB]5555-6666
Hinweis: [Tab] repräsentiert #9 Zeichen
Konfigurieren Sie dann einfach die gewünschten Spalten. In diesem Beispiel sind Spalten: ID, Name, Telefon. Ohne eine Codezeile wird alle Elemente in der Liste gedruckt und durch Spaltenparameter ausgerichtet.
Wenn Sie zur Laufzeit Elemente hinzufügen möchten, können Sie die AddItem-Funktion verwenden und ein Array von Zeichenfolgen angeben, die in tollbedingten, getrennten Text konvertiert werden.
Möglicherweise müssen Sie OneDrawitem mit dem Registerkarte Text verwenden, um Zellen des Zeichnens anzupassen. In diesem Fall sollten Sie den autodrawtabbedText deaktiviert lassen und Ereignissen auf dem Schreiben von OneDrawitem schreiben lassen und dann GetItemArray verwenden, um ein Array des aktuellen Elements zu extrahieren, wobei die Zellen mithilfe der DWCOL -Methode getrennt sind, um sie zu zeichnen.
Um das Dialogfeld anzupassen, klicken Sie einfach mit der rechten Maustaste auf einen Teil von Header oder Spalten. Im Dialogfeld Anpassen können Sie Spalten neu ordnen, Spalten anzeigen/ausblenden und die Standardreihenfolge festlegen.
AllowMoving: Boolean = Spalten aktivieren/deaktivieren
AllowResize: Boolean = Spalten aktivieren/deaktivieren (falls falsch, Spalte.Sizable egal)
AutoDrawTabbedText: Boolean = Bei Verwendung von autodrawtabbedText müssen Sie keine Objekte oder OneDrawitem verwenden. Sie können dem Listbox Elemente mit der Registerkarte Abgrenzung hinzufügen, um Spalten zu teilen. In diesem Fall müssen Sie keinen Code zum Zeichnen von Elementen. Es stehen zwei Methoden zur Verfügung, die mit dem Registerkartentext verwendet werden können: AddItem (Element -Array hinzufügen, so dass die Komponente automatisch in Registerkarten -Text umwandelt). GetArrayText (gibt eine Reihe von angeforderten Index zurück). Sie können diese Eigenschaft weiterhin deaktiviert lassen und mit dem Registerkarten von Text, dem Schreiben von Ereignissen OneDrawitem arbeiten und GetArrayText verwenden, um den Text mit getrennten Spalten zu lesen.
ColorNormalCol: TColor = Spaltenhintergrundfarbe
ColorHoverCol: TColor = Spaltenhintergrund
ColorLineNormal: TColor = Zeilen Hintergrundfarbe (in Listbox), wenn nicht ungerade Zeile (oder Anwendung deaktiviert) und nicht ausgewählte Zeile
ColorLineOdd: TColor = Linienhintergrundfarbe Wenn ungerade Zeile und Anwendungsdauer aktiviert sind
ColorLineSel: TColor = Linien Hintergrundfarbe Wenn die Linie ausgewählt ist
ColorShape: TColor = Farbe des Armaturenbrett
Columns: TDzListHeaderColumns = Säulensammlung
HeaderHeight: Integer = Feste Headerhöhe (Sie können mehrere Linien in der Spaltenunterschrift eingeben, wenn Sie möchten)
LineCenter: Boolean = Zeigt die DWCOL -Funktion an
LineTop: Integer = zeigt die y -Textposition zum DWCOL an, wenn Linecenter falsch ist
ListBox: TCustomListBox = ListBox -Objekt (erforderlich!)
TextMargin: Integer = Speicherplatz in Pixeln links und rechts in der Spalte (verwendet, so dass der Text in einer Spalte nicht am Text in einer anderen Spalte haftet)
TitleFont: TFont = title -Schriftart für Spaltenunterschriften
UseOdd: Boolean = spezifischen Farbhintergrund für ungerade Linien verwenden (siehe Colorlineodd -Eigenschaft)
Alignment: TAlignment = Zeigt die Ausrichtung des in der DWCOL -Funktion verwendeten Text an
Caption: String = Der Bildunterschriftstext des Spaltentitels
CaptionEx: String = Diese Bildunterschrift ist optional und verwendet, wenn Sie eine vollständige Bildunterschrift angeben möchten, die im Dialogfeld "Anpassen" angezeigt werden soll (z. B. Bildunterschrift: "ID", CaptionEx: "ID der Person")
Customizable: Boolean = Erlauben Sie, dass die Spalte im Dialogfeld Anpassen anpassen kann
CustomTextFont: Boolean = bestimmt gespeichert für die textfont -Eigenschaft (wird automatisch festgelegt, wenn textfont ändert)
Hint: String = Spalte Hinweis
MaxWidth: Integer = Spalte Maxwidth bei der Größe
MinWidth: Integer = Spalte Minwidth bei der Größenänderung
Name: String = Spaltenname, um die Spalte (ColbyName -Funktion) und für Speichern/Ladeanpassung (SaveCustom/LoadCustom -Funktionen) zu finden. Die Anpassung erfordert den Spaltennamen, da Sie Ihr Projekt ändern können. In diesem Fall werden die Spalten basierend auf Spaltennamen in korrekter Reihenfolge gehalten.
Sizeable: Boolean = Säulenreside zulassen
TextFont: TFont = font verwendet von canvas zum zeichnen item tect text für diese spalte
Visible: Boolean = säule/ausblenden Säule
Width: Integer = Spaltenbreite
Data: Pointer = Zeiger zur kostenlosen Verwendung (nicht veröffentlichte Eigenschaft)
procedure LoadCustom ( const A: String);Laden Sie die Spaltenanpassung aus der Zeichenfolge, einschließlich Position, Größe und Sichtbarkeit. Sie können aus der Registrierung/INI -Datei laden.
function SaveCustom : String;Speichern Sie die Anpassung der Spalten in die Zeichenfolge, einschließlich Position, Größe und Sichtbarkeit. Sie können in der Registrierung/INI -Datei speichern.
function ColByID (ID: Integer): TDzListHeaderCol;Gibt ein TDZLISTHEADERCOL durch Spalten -ID zurück. Die ID bleibt behoben, wenn sich die Spalten bewegt (die Position der Spalte wird durch die Indexeigenschaft definiert).
function ColByName ( const aName: String): TDzListHeaderCol;Gibt ein TDZLISTHEADERCOL mit Spaltennamen zurück.
procedure DwCol (ID: Integer; Rect: TRect; const Value : Variant; Margin: Integer = 0 );Wird bei OneDrawitem verwendet, um einen Spaltenelementtext zu zeichnen. Die ID repräsentiert die Spaltennummer unter Berücksichtigung der Reihenfolge in der Sammlung. Selbst wenn die Spalten zur Laufzeit verschoben werden, bleibt die ID immer gleich. Dies ist die Hauptidentifizierung der Spalte. Der Wert repräsentiert den zu druckenden Text. Beachten Sie, dass der Wert Variante -Typ ist, sodass Sie nicht in String konvertieren müssen, es sei denn, Sie möchten den Wert natürlich formatieren. Sie können einen Rand auf der linken Seite der Spalte angeben, um ein Symbol oder eine andere benutzerdefinierte Zeichnung zu zeichnen (siehe Beispielquelle).
function AddItem ( const Ar: TArray<String>): Integer;Mit dieser Funktion können Sie ListBox ein Element hinzufügen und Array -Zeichenfolgen automatisch mit einem Registerkartenzeichen trennen. Sie sollten diese Funktion nur dann verwenden, wenn Sie Daten mit der Registerkarte Gremiter -Methode in ListBox speichern. Normalerweise möchten Sie dies zusammen mit der AutodrawtabbedText -Eigenschaft verwenden, sodass Sie OneDrawitem nicht schreiben müssen.
function GetItemArray (Index: Integer): TArray<String>; Gibt eine Reihe von Zeichenfolgen relativ zum Index in ListBox zurück, unter Berücksichtigung des Element -Textes enthält Daten, die durch ein Registerkartenzeichen getrennt sind. Sie können eine Zelle mit GetItemArray(Index)[Column] schnell lesen.
function GetLeft : Integer;Gibt die linke Position der Säule gemäß Richtgrenzen zurück.
function GetRight : Integer;Gibt die rechte Spaltesposition nach Rektivgrenzen zurück.
procedure OnColumnClick (Sender: TObject; Col: TDzListHeaderCol);Tritt beim Link auf eine Spalte auf.
procedure OnColumnDraw (Sender: TObject; Col: TDzListHeaderCol; Canvas: TCanvas; Rect: TRect; Hover: Boolean);Wenn Sie dieses Ereignis festlegen, können Sie die Zeit des Spalten -Titels zeichnen, sodass Sie die Leinwand ändern oder die aktuelle bemalte Spalte hinzufügen können. Wenn das Ereignis brennt, ist die Säule bereits gemalt, aber nicht in den Bildschirm gemalt, da eine interne Bitmap verwendet wird. Mit diesem Ereignis können Sie diese Bitmap -Leinwand ändern. Wenn das Ereignis endet, wird die Bitmap in den Bildschirm gemalt. Der Schwebeparameter zeigt an, dass die Maus in diesem Moment über der Spalte ist.
procedure OnColumnRClick (Sender: TObject; Col: TDzListHeaderCol);Tritt bei der rechten Maustaste auf eine Spalte auf.
procedure OnColumnResize (Sender: TObject; Col: TDzListHeaderCol);Tritt nach, nachdem eine Säule geändert wurde.
procedure OnDrawItem (Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState);Sie sollten dieses Ereignis verwenden, um alle Spalten mithilfe der DWCOL -Methode zu schreiben (siehe Beispielquelle).
Dieses Ereignis wird nicht ausfeuern, wenn Sie autodrawtabbedText = true verwenden
procedure MouseEnterCol (Sender: TObject; Col: TDzListHeaderCol);Tritt auf, wenn die Maus in einen Säulenbereich eintritt.
procedure MouseLeaveCol (Sender: TObject; Col: TDzListHeaderCol);Tritt auf, wenn die Maus einen Säulenbereich verlässt.