P> Dalam mengembangkan perangkat lunak analisis sekuritas, seringkali perlu untuk menggambar kurva analitik untuk berbagai saham. Untuk membuat fungsi perangkat lunak lebih nyaman dan fleksibel, pengguna berharap dapat menyesuaikan warna berbagai kurva sesuai dengan preferensi mereka. Ada fungsi serupa di kotak dialog font di bawah menu [format] Word97. Ketika pengguna mengklik kotak drop-down warna di kotak dialog font, pola sederhana dari berbagai warna ditampilkan bersama dengan nama warna font. dengan nama warna. 1. Implementasi kotak dialog warna khusus
Di Delphi, kita dapat menggunakan TcomboBox untuk mencapai fungsionalitas yang serupa. Ada atribut gaya dalam komponen TcomboBox, yang menentukan atribut tampilan TcomboBox. Biasanya, csdropdown, cssimple, csdropdownlist, csownerdrawfixed, csownerdrawvariable, dll. Dapat dipilih. Ketika CSOWNERDRAWFIXED dipilih, itu berarti membuat kotak drop-down yang ditarik sendiri. Dan proses melukis diri harus ditanggapi dalam peristiwa OnDrawitem dari Tcombobox. Ondrawitem didefinisikan sebagai:
Propertyondrawitem: TdrawitemEvent;
Tdrawitemevent = prosedur (kontrol: twincontrol; indeks: integerrect: trect; state: townerdrawstate) ofObject;
Arti dari tiga parameter adalah:
Kontrol: TcomboBox yang berisi kotak drop-down
Indeks: Nomor indeks kotak drop-down yang ditarik sendiri di properti item TomboBox
RECT: Oleh karena itu, posisi menggambar sendiri, kita tahu posisi persegi panjang yang perlu ditarik sendiri (parameter rect) dan nomor indeks (parameter indeks) di tcombobox, kita dapat menggunakan properti kanvas tcombobox untuk menggambar kanvasnya. Proses implementasi spesifik adalah sebagai berikut:
1. Buat file proyek baru dan atur properti yang relevan dari formulir defaultnya ke:
Keterangan Kotak Drop-Down Kustom
Nama form1
PositionPoscreencenter
2. Tempatkan dua komponen TcomboBox dalam bentuk dan atur propertinya sebagai berikut:
Namestyleitemheightondrawitem
Colorcombo1csownerDrawfixed 20ColorComboDrawitem
Colorcombo2csownerdrawfixed 30colorcombodrawitem
3. Klik dua kali tombol DOT di sebelah properti item ColorCombo1 dan ColorCombo2 dan masukkan di kotak dialog StringListEditor.
hitam
biru
Biru dan Hijau
Hijau cerah
merah
kuning
Nama Berbagai Warna
4. Dalam acara OnDrawitem di ColorCombo1, Yu Manlu?
ProcedureTform1.ColorComboDrawitem (Kontrol: Twincontrol; Indeks: Integer; Rect: Trect; State: OwnerDrawstate);
var
Tempcolor: Tcolor; // Warna gambar
Temprushcolor: Tcolor; // Warna sementara
Mulai
dengan (controlastcomboBox) lakukan
// Gambarlah di kanvas Combo
Mulai
TemprushColor: = canvas.brush.color;
// simpan warna aslinya
Canvas.fillrect (rect);
caseIndexOf // Tentukan warna yang dicat sendiri yang berbeda sesuai dengan indeks
0: // Hitam
Tempcolor: = clblack;
1: // biru
Tempcolor: = clblue;
2: // biru dan hijau
Tempcolor: = Claqua;
3: // hijau cerah
Tempcolor: = cllime;
4: // merah
Tempcolor: = Clred;
5: // Kuning
Tempcolor: = Clyellow;
// Respons terhadap warna lain dapat ditambahkan di sini.
akhir;
Canvas.brush.color: = Tempcolor;
// persegi panjang warna yang ditarik sendiri
Canvas.Rectangle (Rect.Left+4,
Rect.top+1,
(Rect.Right+Rect.Left) Div3,
Rect.bottom 1);
Canvas.brush.color: = tempbrushcolor;
// Tunjukkan string yang sesuai dengan warna
Canvas.textout ((rect.left+rect.right) div2,
Rect.top+1,
Item [indeks]);
akhir;
akhir;
5. Simpan dan jalankan file, kita dapat melihat efek yang sama dengan kotak drop-down warna di Word
Pembaca yang tertarik dapat menambahkan warna lain ke lokasi yang ditampilkan dalam artikel.
Program di atas dilewatkan pada Delphi3.0, 4.0. 2. Tulis Komponen Dialog Warna Kustom
Bagi banyak programmer Delphi, sangat tidak dikenal dengan cara menulis komponen Delphi mereka sendiri. Di bawah ini kami akan memperkenalkan penulisan komponen menggunakan kotak dialog warna khusus sebagai contoh. TcolorcomboBox berikut berlanjut dari kelas TcomboBox. 1. Pilih opsi komponen baru di item menu komponen. Pilih tcomboBox di kotak Ancestortortype, isi tcolorcomboBox di kotak classname, pilih sampel di kotak halaman palet, isi colorcomboBox.pas di kotak UnitFileName, lalu klik tombol OK.
2. Pilih opsi Install Component di item menu Komponen, klik IntonewPackage, tulis Path dan ColorComboDpk.dpk di kotak nama paket, dan klik OK untuk menghasilkan file ColorComboDpk.bpl.
3. Gunakan ImageEditor di menu Tools untuk membuat file Edit ColorComBox.dcr dan membuat bitmap untuk kelas TColorComboBox.
4. Tambahkan spesifikasi untuk ukuran dan tinggi font dan atribut gaya kontrol (diatur ke csownerdrawfixed) di creathewnd yang dieksekusi setelah membuat. warna.
5. Tambahkan Program Lukisan Diri Warna ke acara DrawItem, yang terjadi sebelumnya di DrawItem.
Prosedur implementasi adalah sebagai berikut:
UnitColorComboBox;
antarmuka
penggunaan
Windows, pesan, sysutils, kelas,
Grafik, kontrol, formulir, dialog,
Stdctrls;
jenis
TcolorcomboBox = class (tcomboBox)
Pribadi
{PrivatedEclarations}
Fondrawitem: tdrawitemevent;
ProseduredRawitem (Indeks: Integer; Rect: Trect; State: Townerdrawstate);
terlindung
{ProtectedDeclarations}
publik
{PublicDeclarations}
ConstructorCreate (Aowner: TComponent); override;
ProsedureCreatewnd; override;
diterbitkan
{PublishedDeclarations}
Propertyondrawitem: TdrawitemEvent
Readfondrawitemwritefondrawitem;
akhir;
Prosedureregister;
Pelaksanaan
Prosedureregister; // Daftarkan Komponen
Mulai
RegisterComponents (sampel, [tcolorcomboBox]);
akhir;
constructorcolorcombobox.create
(Aowner: tComponent); // Inisialisasi komponen
Mulai
diwaritedCreate (Aowner);
Gaya: = CSOWNERDRAWFIXED; // Jenis awal komponen
ItemHeight: = 20;
Font.size: = 10;
akhir;
ProcedureTcolorComboBox.createWnd;
// Inisialisasi properti item dari komponen warna
Mulai
diwariskan Createwnd;
Item.clear;
Item.add (hitam);
Item.add (biru);
Item.add (biru dan hijau);
Item.add (hijau cerah);
Item.add (pink);
Item.add (merah);
Item.add (kuning);
Item.add (putih);
Item.add (biru tua);
Item.add (cyan);
Item.add (hijau);
Item.add (ungu);
Item.add (crimson red);
Item.add (kuning tua);
Item.add (abu -abu gelap);
Item.add (perak);
// Jika Anda tidak membutuhkan banyak warna, Anda dapat menghapus warna yang tidak diinginkan dalam atribut item dari komponen
akhir;
// kelebihan proses drawItem
ProcedureTcolorComboBox.drawitem (indeks: integer; rect: trect; state: townerdrawstate);
var
Tempcolor: Tcolor; // Warna gambar
Temprushcolor: Tcolor; // Warna sementara
Mulai
// Pengaturan lukisan diri default dari komponen ini
TemprushColor: = canvas.brush.color;
// simpan warna aslinya
Canvas.fillrect (rect);
ifitems [index] = hitam lalu
Tempcolor: = clblack
elseifitems [index] = biru kalau begitu
Tempcolor: = ClBlue
ElseIfItems [index] = biru hijau
Tempcolor: = Claqua
ElseIfItems [index] = Bright Green kemudian
Tempcolor: = cllime
ElseIfItems [index] = Pink Lalu
Tempcolor: = Clfuchsia
ElseIfItems [index] = merah kalau begitu
Tempcolor: = Clred
ElseIfItems [index] = Kuning Lalu
Tempcolor: = Clyellow
ElseIfItems [index] = White kalau begitu
Tempcolor: = Clwhite
ElseIfItems [index] = Dark Blue Lalu
Tempcolor: = clnavy
ElseIfitems [index] = cyan kemudian
Tempcolor: = Clteal
ElseIfItems [index] = Green kemudian
Tempcolor: = Clgreen
ElseIfitems [index] = ungu kalau begitu
Tempcolor: = clpurple
elseifitems [index] = Crimson kemudian
Tempcolor: = Clmaroon
ElseIfitems [indeks] = Kuning dalam
Tempcolor: = Clolive
ElseIfItems [index] = Dark Grey Lalu
Tempcolor: = Clgray
elseifitems [index] = perak kalau begitu
Elsetempcolor: = clsilver;
Canvas.brush.color: = Tempcolor;
// persegi panjang warna yang ditarik sendiri
Canvas.Rectangle (Rect.Left+4,
Rect.top+1,
(Rect.Right+Rect.Left) Div3,
Rect.bottom 1);
Canvas.brush.color: = tempbrushcolor;
// Tunjukkan string yang sesuai dengan warna
Canvas.textout ((rect.left+rect.right) div2,
Rect.top+1,
Item [indeks]);
akhir;
Akhirnya. 3. Penggunaan komponen dialog warna khusus
Setelah mendaftarkan komponen warna khusus, Anda dapat memilih komponen warna khusus dari halaman sampel template komponen Delphi, dan tidak ada perbedaan antara menggunakan komponen Delphi sendiri.