


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
02/11/2019
02/08/2019
02/07/2019
ListBoxを使用している場合、および通常、ListBoxアイテムにオブジェクトを割り当てるときは、OnDrawitemイベントを使用して、ListBoxに列を表示/描画する必要があります。
それは大丈夫ですが、列を表示するためのヘッダーコントロールはありません。また、ユーザーがサイズを変更し、移動し、列を表示/非表示にすることも許可しません。
TheaderControl(Delphi Default Control)により、これらの操作の一部が許可されていますが、リストボックスごとに多くのコードを記述し、アイテムの塗り替えと列の位置を計算する必要があります。そして、もちろん、利用可能な列機能を非表示/表示することはありません。
だから、私はこのコンポーネントに取り組んできましたが、それが非常に便利だから共有することにしました。
さらに、dzlistheaderは、列が可視領域を超えたときにスクロールバーを表示します。 ?
Delphi XE3..delphi 11をサポートします
dzlistheaderをフォームにドロップし、dzlistheaderの内部にリストボックスをドロップします。
dzlistheader.listbox = listboxを設定します。
dzlistheader.columnsプロパティで目的の列を作成します(設計時に列が表示されるはずです)。
次に、dzlistheaderのondrawitemを書き込みます(ListBoxのOndrawitemではありません - これを割り当てられないままにします)。メソッドdzlistheader.dwcolを呼び出して、すべての列を簡単に描画します。
基本的な機能を知るには、サンプルフォルダーを参照してください。
このアイデアに従って、dzlistheader(listboxではない)の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 ;単にそのように!
このコンポーネントには2番目の使用オプションが使用されるため、オブジェクトを使用する必要はなく、アイテムを描画するためにコードを記述する必要はありません。このオプションでは、タブ文字で区切られたテキストセルのアイテムを追加する必要があります。
次の表があると仮定しましょう。
| 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
注:[タブ]は#9文字を表します
次に、目的の列を構成するだけです。この例には、列、ID、名前、電話があります。コードの行がないと、リスト内のすべてのアイテムが印刷され、列パラメーターによって並べられます。
実行時にアイテムを追加する場合は、additem関数を使用して、タブ付き分離テキストで変換される文字列の配列を指定できます。
Tabbed TextでOndrawitemを使用して、セルの描画をカスタマイズする必要がある場合があります。この場合、AutoDrawtabbedTextを無効にしてイベントondrawitemを書き留めてから、GetItemarrayを使用して現在のアイテムの配列を抽出し、DWCOLメソッドを使用してセルを分離して描画します。
[カスタマイズ]ダイアログを開くには、ヘッダーまたは列の任意の部分を右クリックします。ダイアログのカスタマイズでは、列を再注文したり、列を表示/非表示にしたり、デフォルトの注文を設定したりできます。
AllowMoving: Boolean =列の再配置を有効/無効にします
AllowResize: Boolean = balse/disable columns moving(false、column.Sizaibleは問題ではありません)
AutoDrawTabbedText: Boolean = autoDrawtabbedTextを使用する場合、オブジェクトやondrawitemを使用する必要はありません。列を分割するタブデリミッターを使用して、リストボックスにアイテムを追加できます。この場合、アイテムを描画するためにコーディングする必要はありません。タブ付きテキストで使用できる2つの方法があります。AddITem(アイテム配列を追加するため、コンポーネントはタブ付きテキストで自動的に変換されます)。 getArrayText(要求されたインデックスの配列を返します)。このプロパティを無効にして、タブ付きテキストを使用して作業し、イベントondrawitemを作成し、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の場合、テキストのy位置をdwcolに示します
ListBox: TCustomListBox = listboxオブジェクト(必須!)
TextMargin: Integer =列の左右のピクセルのスペース(1つの列のテキストが別の列のテキストに固執しないように使用される)
TitleFont: TFont =列のキャプションのタイトルフォント
UseOdd: Boolean =奇妙な線に特定の色の背景を使用します(colorlineoddプロパティを参照)
Alignment: TAlignment = DWCOL関数で使用されるテキストのアライメントを示します
Caption: String =列タイトルのキャプションテキスト
CaptionEx: String =このキャプションはオプションです。カスタマイズダイアログに表示する完全なキャプションを指定する場合に使用されます(例: "id"、captionex: "id of person"))
Customizable: Boolean =カスタマイズダイアログで列をカスタマイズ可能にすることを許可します
CustomTextFont: Boolean = textfontプロパティに保存されている決定(textfontが変更されると自動的に設定されます)
Hint: String =列ヒント
MaxWidth: Integer = column maxwidthを変更するとき
MinWidth: Integer = column minwidthの変更時
Name: String =列名列(colbyname関数)を見つけるには、保存/ロードのカスタマイズ(SaveCustom/LoadCustom関数)を見つけます。カスタマイズには、プロジェクトを変更できるため、列名が必要です。この場合、列名に基づいて列が正しい順序で保持されます。
Sizeable: Boolean =列のサイズを許可します
TextFont: TFont =キャンバスがこの列のアイテムテキストを描画するために使用するフォント(変更されていない場合、キャンバスはリストボックスフォントを使用してアイテムを描画します)
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;この関数は、リストボックスにアイテムを追加し、アレイ文字列をタブ文字で自動的に分離するのに役立ちます。この関数は、Tabbed Delimiterメソッドを使用してListBoxにデータを保存する場合にのみ使用する必要があります。通常、これをautodrawtabbedTextプロパティとともに使用する必要があるため、Ondrawitemを記述する必要はありません。
function GetItemArray (Index: Integer): TArray<String>;アイテムテキストにはタブ文字によって区切られたデータがあることを考慮して、リストボックスのインデックスに関連する文字列の配列を返します。 GetItemArray(Index)[Column]を使用してセルをすばやく読み取ることができます。
function GetLeft : Integer;長方形の範囲に従って列の左の位置を返します。
function GetRight : Integer;長方形の境界に従って列の右の位置を返します。
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);マウスがカラム領域を離れるときに発生します。