


09/12/2021(版本1.7)
03/13/2021(版本1.6)
02/01/2021(版本1.5)
12/18/2020(版本1.4)
10/31/2020(1.3版)
10/27/2020(版本1.2)
10/26/2020(版本1.1)
05/03/2020
2019年2月11日
2019年2月8日
2019年2月7日
當您使用ListBox時,通常在將對象分配給ListBox項目時,您需要使用OnDrawItem事件在列錶框中顯示/繪製列。
沒關係,但是您沒有標題控件可以顯示列,也不允許用戶調整大小,移動和顯示/隱藏列。
TheaderControl(Delphi默認控件)允許其中一些操作,但是您需要為每個列錶框編寫大量代碼,負責重新粉刷項目併計算列位置。而且,當然,您沒有可用的隱藏/顯示列功能。
因此,我一直在研究此組件,因此我決定分享它,因為它非常有用。
此外,當列超過可見區域時,dzlistheader將顯示一個滾動條。 ?
支持delphi xe3..delphi 11
將dzlistheader放在形式中,然後在dzlistheader中放置一個列錶框。
設置dzlistheader.listbox = ListBox。
在dzlistheader.columns屬性上創建所需的列(您應該在設計時看到列)。
然後編寫dzlistheader的OnDrawItem(不是listbox的on Drawitem-留下這個未分配的)。調用方法dzlistheader.dwcol輕鬆繪製每個列。
請參閱示例文件夾以了解基本功能。
您應該編寫dzlistheader(不是列錶框)的OnDrawItem,遵循此想法:
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 ;只是這樣!
該組件提供了第二種使用的選擇,因此您無需使用對象,也無需編寫代碼即可繪製項目。在此選項中,您應該添加帶有選項卡字符的文本單元格的項目。
假設您有下表:
| ID | 姓名 | 電話 |
|---|---|---|
| 1 | 朱恩 | 1111-2222 |
| 2 | 莎拉 | 3333-4444 |
| 3 | 阿爾弗雷德 | 5555-6666 |
因此,您只需啟用autodrawtabbedText屬性,然後將項目添加到列錶框中,其中像這樣分開的單元格,例如:
1[TAB]JHON[TAB]1111-2222
2[TAB]SARAH[TAB]3333-4444
3[TAB]ALFRED[TAB]5555-6666
注意:[TAB]代表#9字符
然後只需配置所需的列即可。在此示例中,將是列:ID,名稱,電話。沒有任何代碼行,這將打印列表中的所有項目,並按列參數對齊。
如果要在運行時添加項目,則可以使用AddItem函數,指定將在選項卡式分離的文本中轉換的一系列字符串。
您可能需要將on Drawitem與選項卡式文本一起自定義繪製。在這種情況下,您應該將禁用的自動介質tabbedText放置並編寫事件OnDrawItem,然後使用getIteMarray提取當前項目的數組,並使用dwcol方法分開單元格進行繪製。
要打開自定義對話框,只需在標題或列的任何部分右鍵單擊即可。在自定義對話框中,您可以重新排序列,顯示/隱藏列並設置默認順序。
AllowMoving: Boolean =啟用/禁用列重新定位
AllowResize: Boolean = enable/disable列移動(如果為false,列。可算無關緊要)
AutoDrawTabbedText: Boolean =使用autodrawtabbedtext時,您無需使用對像或on DrawtItem。您可以將項目添加到列錶框中,其中帶有選項卡定界符以拆分列。在這種情況下,您無需代碼即可繪製項目。有兩種方法可與選項卡式文本一起使用:addItem(添加項目數組,因此組件自動將其轉換為選項卡式文本); getArrayText(返回請求的索引數組)。您仍然可以將此屬性保留,並使用選項卡式文本,編寫事件on Drawitem並使用getArrayText讀取分離的列的文本。
ColorNormalCol: TColor =列背景顏色
ColorHoverCol: TColor =列鼠標列在列上的列背景顏色
ColorLineNormal: TColor =線背景顏色(在列錶框上)不是奇數行(或useodd disabled),而不是選擇行
ColorLineOdd: TColor =啟用奇數線和useodd時線背景顏色
ColorLineSel: TColor =選擇行時線背景顏色
ColorShape: TColor =指示移動或調整定向的儀表板的顏色
Columns: TDzListHeaderColumns =列集合
HeaderHeight: Integer =固定標頭高(如果需要的話,可以在列標題中輸入多線)
LineCenter: Boolean =表示DWCOL函數根據行高垂直繪製文本集中式繪製
LineTop: Integer =表示LineCenter為False時,表示文本對DWCOL的位置
ListBox: TCustomListBox = ListBox對象(必需!)
TextMargin: Integer =列的左右像素中的空間
TitleFont: TFont =列標題標題標題
UseOdd: Boolean =使用特定的顏色背景(請參閱colorlineodd屬性)
Alignment: TAlignment =表示DWCOL功能上使用的文本對齊
Caption: String =列標題的字幕文本
CaptionEx: String =此字幕是可選的,如果要指定一個完整的字幕以在自定義對話框中顯示(例如:標題:“ id”,catchionex:“ of Person of Person”),則使用
Customizable: Boolean =允許該列在自定義對話框中進行自定義
CustomTextFont: Boolean =確定為TextFont屬性存儲的存儲(在TextFont更改時將自動設置)
Hint: String =列提示
MaxWidth: Integer =調整大小時列最大寬度
MinWidth: Integer =調整大小的列最小
Name: String =列名稱以查找列(ColbyName函數)和用於保存/加載自定義(SaveCustom/LoadCustom函數)。自定義需要列名稱,因為您可以更改項目,在這種情況下,該列將根據列名的正確順序保存。
Sizeable: Boolean =允許列調整大小
TextFont: TFont =畫布用來繪製此列的項目文本的字體(如果不更改,帆布使用ListBox字體來繪製項目)
Visible: Boolean = show/hide列
Width: Integer =列寬度
Data: Pointer =指針免費使用(非公開屬性)
procedure LoadCustom ( const A: String);從字符串中加載列自定義,包括位置,大小和可見性。您可以從註冊表/INI文件加載。
function SaveCustom : String;將列定制為字符串,包括位置,大小和可見性。您可以保存到註冊表/INI文件。
function ColByID (ID: Integer): TDzListHeaderCol;通過列ID返回tdzlistheadercol。移動列(列的位置由索引屬性定義)時,ID保持固定。
function ColByName ( const aName: String): TDzListHeaderCol;按列名返回tdzlistheadercol。
procedure DwCol (ID: Integer; Rect: TRect; const Value : Variant; Margin: Integer = 0 );在OnDrawItem上使用,繪製列項目文本。 ID代表考慮集合中的順序的列號。因此,即使列在運行時移動,ID也始終保持不變。這是列的主要標識。該值表示要打印的文本。請注意,該值是變體類型,因此您當然不需要轉換為字符串,除非您要格式化值。您可以在列的左側指定邊距,以繪製圖標或其他自定義繪製(請參閱示例源)。
function AddItem ( const Ar: TArray<String>): Integer;此功能可幫助您將項目添加到ListBox,並自動將數組字符串與Tab字符分開。僅當您使用選項卡式定界符方法將數據存儲到列錶框中時,才應使用此功能。通常,您將需要與AutoDrawTabbedText屬性一起使用,因此您無需編寫OnDrawItem。
function GetItemArray (Index: Integer): TArray<String>;返回列錶框中索引的字符串數組,考慮到項目文本的數據由選項卡字符分開。您可以使用GetItemArray(Index)[Column]快速讀取單元格。
function GetLeft : Integer;返回列的左側位置,根據RECT邊界。
function GetRight : Integer;根據RECT界限返回列的正確位置。
procedure OnColumnClick (Sender: TObject; Col: TDzListHeaderCol);當在列上左鍵單擊時發生。
procedure OnColumnDraw (Sender: TObject; Col: TDzListHeaderCol; Canvas: TCanvas; Rect: TRect; Hover: Boolean);如果設置此事件,則可以捕獲列標題繪製的時間,從而使您可以更改畫布或將一些添加到當前的塗漆列中。事件發射時,列已經繪製,但沒有塗在屏幕上,因為使用了內部位圖。因此,此事件使您可以更改此位圖畫布。事件終止時,將位圖塗在屏幕中。懸停參數表示鼠標目前在列上。
procedure OnColumnRClick (Sender: TObject; Col: TDzListHeaderCol);當在列上右鍵單擊時發生。
procedure OnColumnResize (Sender: TObject; Col: TDzListHeaderCol);在調整列大小後發生。
procedure OnDrawItem (Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState);您應該使用此事件使用DWCOL方法來編寫所有列(請參閱示例源)。
如果您使用的是autodrawtabbedtext = true,此事件將不會發射
procedure MouseEnterCol (Sender: TObject; Col: TDzListHeaderCol);當鼠標進入列區域時發生。
procedure MouseLeaveCol (Sender: TObject; Col: TDzListHeaderCol);當鼠標離開列區域時,就會發生。