


09/12/2021 (Versi 1.7)
03/13/2021 (Versi 1.6)
02/01/2021 (Versi 1.5)
12/18/2020 (Versi 1.4)
10/31/2020 (Versi 1.3)
10/27/2020 (Versi 1.2)
10/26/2020 (Versi 1.1)
05/03/2020
02/11/2019
02/08/2019
02/07/2019
Saat Anda menggunakan ListBox, dan biasanya saat menetapkan objek ke item ListBox, Anda ingin menampilkan/menggambar kolom di ListBox, menggunakan acara OnDrawItem.
Tidak apa -apa, tetapi Anda tidak memiliki kontrol header untuk menunjukkan kolom, dan tidak ada yang memungkinkan pengguna untuk mengubah ukuran, untuk bergerak, dan menampilkan/menyembunyikan kolom.
TheaderControl (Kontrol Default Delphi) memungkinkan beberapa operasi ini, tetapi Anda perlu menulis banyak kode untuk setiap kotak daftar, mengurus item pengecatan ulang dan menghitung posisi kolom. Dan, tentu saja, Anda tidak memiliki fungsi kolom Hide/Show yang tersedia.
Jadi, saya telah mengerjakan komponen ini, dan saya memutuskan untuk membagikannya, karena ini sangat berguna.
Selain itu, Dzlistheader menampilkan bilah gulir ketika kolom terlalu besar dari area yang terlihat. ?
Mendukung Delphi Xe3..Delphi 11
Jatuhkan Dzlistheader dalam formulir, lalu jatuhkan kotak daftar di dalam Dzlistheader.
Atur dzlistheader.listbox = ListBox.
Buat kolom yang diinginkan di properti Dzlistheader.Columns (Anda akan melihat kolom pada waktu desain).
Kemudian tulis OnDrawitem dari Dzlistheader (bukan OnDrawitem dari ListBox - tinggalkan ini yang belum ditugaskan). Panggil metode dzlistheader.dwcol untuk dengan mudah menggambar setiap kolom tunggal.
Silakan lihat folder contoh untuk mengetahui fungsi dasar.
Anda harus menulis OnDrawitem dari Dzlistheader (bukan ListBox), mengikuti ide ini:
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 ;Cukup seperti itu!
Komponen ini menawarkan opsi penggunaan kedua, jadi Anda tidak perlu menggunakan objek, dan Anda tidak perlu menulis kode untuk menggambar item. Dalam opsi ini, Anda harus menambahkan item dengan sel teks yang dipisahkan oleh karakter tab.
Mari kita asumsikan Anda memiliki tabel berikut:
| PENGENAL | Nama | Telepon |
|---|---|---|
| 1 | Jhon | 1111-2222 |
| 2 | Sarah | 3333-4444 |
| 3 | Alfred | 5555-6666 |
Jadi Anda hanya mengaktifkan properti autodrawtabbedtext dan menambahkan item ke listbox yang memiliki sel dipisahkan oleh karakter tab, seperti itu:
1[TAB]JHON[TAB]1111-2222
2[TAB]SARAH[TAB]3333-4444
3[TAB]ALFRED[TAB]5555-6666
Catatan: [tab] mewakili karakter #9
Kemudian cukup konfigurasikan kolom yang diinginkan. Dalam contoh ini adalah kolom: ID, nama, telepon. Tanpa baris kode apa pun, ini akan mencetak semua item dalam daftar dan disejajarkan dengan parameter kolom.
Jika Anda ingin menambahkan item saat run-time, Anda dapat menggunakan fungsi additem, menentukan array string yang akan dikonversi dalam teks terpisah tab.
Anda mungkin perlu menggunakan OnDrawitem dengan teks tab untuk menyesuaikan Cell Draw. Dalam hal ini, Anda harus meninggalkan AutodrawtabbedText dinonaktifkan dan menulis acara OnDrawitem, dan kemudian menggunakan GetIteRarray untuk mengekstrak array item saat ini, memiliki sel yang dipisahkan untuk menggambar menggunakan metode DWCOL.
Untuk membuka dialog Kustomisasi, cukup klik kanan di bagian mana pun dari header atau kolom. Dalam dialog Kustomisasi Anda dapat memesan ulang kolom, tunjukkan/sembunyikan kolom dan atur pesanan default.
AllowMoving: Boolean = mengaktifkan/menonaktifkan reposisi kolom
AllowResize: Boolean = mengaktifkan/menonaktifkan kolom bergerak (jika false, colom.Sizeable tidak penting)
AutoDrawTabbedText: Boolean = Saat menggunakan autodrawtabbedText, Anda tidak perlu menggunakan objek atau onsdrawitem. Anda dapat menambahkan item ke ListBox dengan pembatas tab ke Split Columns. Dalam hal ini, Anda tidak perlu kode untuk menggambar item. Ada dua metode yang tersedia untuk digunakan dengan teks tab: addItem (tambahkan array item, sehingga komponen secara otomatis dikonversi dalam teks tab); GetArrayText (mengembalikan array indeks yang diminta). Anda masih dapat meninggalkan properti ini dinonaktifkan dan bekerja dengan teks tab, menulis acara OnDrawitem dan menggunakan GetArrayText untuk membaca teks kolom yang dipisahkan.
ColorNormalCol: TColor = warna latar belakang kolom
ColorHoverCol: TColor = Warna latar belakang kolom saat mouse di atas kolom
ColorLineNormal: TColor = garis latar belakang warna (di listbox) Saat bukan garis ganjil (atau useodd dinonaktifkan), dan bukan baris yang dipilih
ColorLineOdd: TColor = garis latar belakang warna saat garis aneh dan usingodd diaktifkan
ColorLineSel: TColor = garis latar belakang warna saat garis dipilih
ColorShape: TColor = warna dasbor yang menunjukkan orientasi bergerak atau mengubah ukuran
Columns: TDzListHeaderColumns = koleksi kolom
HeaderHeight: Integer = Fixed Header Height (Anda dapat mengetik beberapa garis dalam keterangan kolom jika Anda mau)
LineCenter: Boolean = menunjukkan fungsi DWCOL menggambar teks terpusat secara vertikal sesuai dengan ketinggian garis
LineTop: Integer = menunjukkan posisi y teks ke dwcol saat linecenter false
ListBox: TCustomListBox = Objek ListBox (Diperlukan!)
TextMargin: Integer = Ruang dalam piksel di kiri dan kanan kolom (digunakan sehingga teks dalam satu kolom tidak menempel pada teks di kolom lain)
TitleFont: TFont = Judul Font untuk Keterangan Kolom
UseOdd: Boolean = Gunakan latar belakang warna tertentu untuk garis aneh (lihat Properti ColorLineodd)
Alignment: TAlignment = menunjukkan penyelarasan teks yang digunakan pada fungsi DWCOL
Caption: String = teks teks judul kolom
CaptionEx: String = Caption ini opsional, digunakan jika Anda ingin menentukan keterangan lengkap untuk ditampilkan dalam dialog Kustomisasi (misalnya: Keterangan: "id", Captionex: "ID orang")
Customizable: Boolean = Biarkan kolom dapat disesuaikan pada dialog Kustomisasi
CustomTextFont: Boolean = ditentukan disimpan untuk properti TextFont (secara otomatis diatur saat perubahan TextFont)
Hint: String = Kolom Petunjuk
MaxWidth: Integer = kolom maxwidth saat mengubah ukuran
MinWidth: Integer = kolom minwidth saat mengubah ukuran
Name: String = Nama kolom untuk menemukan kolom (fungsi colbyname) dan untuk simpan/muat kustomisasi (fungsi savecustom/loadcustom). Kustomisasi memerlukan nama kolom karena Anda dapat mengubah proyek Anda, dan dalam hal ini kolom akan disimpan dalam urutan yang benar berdasarkan nama kolom.
Sizeable: Boolean = Izinkan Penyisihan Kolom
TextFont: TFont = font yang digunakan oleh kanvas untuk menggambar teks item untuk kolom ini (jika tidak diubah, Canvas menggunakan font ListBox untuk menggambar item)
Visible: Boolean = kolom show/hide
Width: Integer = Lebar kolom
Data: Pointer = pointer untuk digunakan gratis (properti yang tidak diterbitkan)
procedure LoadCustom ( const A: String);Memuat kustomisasi kolom dari string, termasuk posisi, ukuran, dan visibilitas. Anda dapat memuat dari file registri/INI.
function SaveCustom : String;Simpan kustomisasi kolom ke string, termasuk posisi, ukuran, dan visibilitas. Anda dapat menyimpan ke file registri/INI.
function ColByID (ID: Integer): TDzListHeaderCol;Mengembalikan tdzlistheadercol dengan ID kolom. ID tetap diperbaiki saat memindahkan kolom (posisi kolom ditentukan oleh properti indeks).
function ColByName ( const aName: String): TDzListHeaderCol;Mengembalikan TdzlistheaderCol dengan nama kolom.
procedure DwCol (ID: Integer; Rect: TRect; const Value : Variant; Margin: Integer = 0 );Digunakan di Ondrawitem, untuk menggambar teks item kolom. ID mewakili nomor kolom yang mempertimbangkan urutan dalam koleksi. Jadi, bahkan ketika kolom dipindahkan saat run-time, ID tetap sama. Ini adalah identifikasi utama kolom. Nilai tersebut mewakili teks yang akan dicetak. Perhatikan bahwa nilainya adalah tipe varian, jadi Anda tidak perlu mengonversi ke string, kecuali Anda ingin memformat nilainya, tentu saja. Anda dapat menentukan margin di sisi kiri kolom, untuk menggambar ikon atau penarikan kustom lainnya (lihat sumber contoh).
function AddItem ( const Ar: TArray<String>): Integer;Fungsi ini membantu Anda menambahkan item ke ListBox, secara otomatis memisahkan string array dengan karakter tab. Anda harus menggunakan fungsi ini hanya ketika Anda menyimpan data ke ListBox menggunakan metode pembatas tab. Biasanya Anda ingin menggunakan ini bersama dengan properti AutoDrawtabbedText, jadi Anda tidak perlu menulis OnDrawitem.
function GetItemArray (Index: Integer): TArray<String>; Mengembalikan array string relatif terhadap indeks di ListBox, mengingat teks item memiliki data yang dipisahkan oleh karakter tab. Anda dapat dengan cepat membaca sel menggunakan GetItemArray(Index)[Column] .
function GetLeft : Integer;Mengembalikan posisi kiri kolom sesuai dengan batas Rect.
function GetRight : Integer;Mengembalikan posisi yang tepat kolom sesuai dengan batas Rect.
procedure OnColumnClick (Sender: TObject; Col: TDzListHeaderCol);Terjadi saat diklik kiri pada kolom.
procedure OnColumnDraw (Sender: TObject; Col: TDzListHeaderCol; Canvas: TCanvas; Rect: TRect; Hover: Boolean);Jika Anda mengatur acara ini, Anda dapat menangkap waktu undian judul kolom, memungkinkan Anda untuk mengubah kanvas atau menambahkan beberapa ke kolom dicat saat ini. Ketika acara menyala, kolom sudah dicat, tetapi tidak dicat ke layar, karena bitmap internal digunakan. Jadi acara ini memungkinkan Anda untuk mengubah kanvas bitmap ini. Ketika acara berakhir, bitmap dilukis ke layar. Parameter hover menunjukkan mouse ada di atas kolom pada saat ini.
procedure OnColumnRClick (Sender: TObject; Col: TDzListHeaderCol);Terjadi saat diklik kanan pada kolom.
procedure OnColumnResize (Sender: TObject; Col: TDzListHeaderCol);Terjadi setelah kolom diubah ukurannya.
procedure OnDrawItem (Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState);Anda harus menggunakan acara ini untuk menulis semua kolom, menggunakan metode DWCOL (silakan lihat sumber contoh).
Acara ini tidak akan menembak jika Anda menggunakan autodrawtabbedtext = true
procedure MouseEnterCol (Sender: TObject; Col: TDzListHeaderCol);Terjadi saat mouse memasuki area kolom.
procedure MouseLeaveCol (Sender: TObject; Col: TDzListHeaderCol);Terjadi ketika tikus meninggalkan area kolom.