Dalam penulisan aplikasi, komponen umum seperti ComboBox dan ListBox biasanya digunakan tidak hanya untuk menampilkan teks, tetapi juga untuk menampilkan ikon yang berhubungan dengan teks tersebut. Pada aplikasi Windows secara umum, tampilan ikon-ikon ini akan berubah seiring perubahan teks tampilan yang tercantum. Misalnya, ketika semua file dalam direktori saat ini dicantumkan dalam kotak kombo, tampilan di sisi kiri kotak kombo terkait dengan kotak kombo. nama file. Ikon yang terhubung disebut ikon dinamis. Langkah-langkah menggunakan ikon dinamis di Delphi adalah sebagai berikut: 1. Mendapatkan ikon
Untuk menggunakan ikon dinamis, hal pertama yang harus diselesaikan adalah cara mendapatkan teks tampilan dan pegangan ikon yang terkait dengannya. Ikon ditentukan oleh registri sistem melalui asosiasi file, dan dalam pemrograman Windows, file (atau subdirektori, atau folder) yang sama mungkin juga memiliki dua hasil tampilan di desktop, yaitu nama file DOS dan nama tampilan (Nama Tampilan) . Jika aplikasi kita tidak perlu memiliki efek yang sama seperti Windows Resource Browser, kita dapat menggunakan fungsi FindFirst() dan FindNext() serta proses FindClose() untuk mendapatkan nama file DOS untuk mendapatkan nama tampilan. Sambil mendapatkan nama file, Anda bisa mendapatkan ikon pegangan HICON dengan menggunakan fungsi SHGetFileInfo() di ShellAPI.pas.
fungsi SHGetFileInfo(pszPath: PAnsiChar; dwFileAttributes: DWord;var psfi: TSHFileInfo; cbFileInfo,uFlags: UINT): DWORDl;
parameter pszPath: nama file yang ditentukan. Jika nilai uFlags tidak mengandung SHGFI_PIDL, maka dapat ditentukan secara langsung; jika tidak, pszPath harus diperoleh melalui perhitungan dan tidak dapat ditentukan secara langsung;
parameter dwFileAttributes: atribut file, hanya valid jika nilai uFlags berisi SHGFI_USEFILEATTRIBUTES, parameter ini umumnya tidak digunakan;
parameter psfi: Mengembalikan informasi file yang diperoleh, yang merupakan tipe rekaman dengan bidang berikut:
hIcon: HICON; //Ikon pegangan file
iIcon: Integer; //Nomor indeks sistem dari ikon
dwAttributes: DWORD; //Nilai atribut file
szDisplayName: array [0..MAX_PATH-1] dari AnsiChar; //Nama tampilan file
szTypeName: array [0..79] dari AnsiChar; //Nama jenis file
parameter cbFileInfo: nilai bit psfi;
Parameter uFlags: Menunjukkan pengidentifikasi informasi file yang perlu dikembalikan. Konstanta yang umum digunakan adalah sebagai berikut:
SHGFI_ICON; //Dapatkan ikonnya
SHGFI_DISPLAYNAME; //Dapatkan nama tampilan
SHGFI_TYPENAME; //Dapatkan nama tipe
SHGFI_ATTRIBUTES;//Dapatkan atribut
SHGFI_LARGEICON; //Dapatkan ikon besar
SHGFI_SMALLICON; //Dapatkan ikon kecil
SHGFI_PIDL; // pszPath adalah pengidentifikasi
Nilai kembalian fungsi SHGetFileInfo() juga bervariasi menurut nilai uFlags. Dengan memanggil SHGetFileInfo(), Anda bisa mendapatkan pegangan ikon file dari parameter psfi, namun harap dicatat bahwa ketika SHGFI_PIDL tidak digunakan dalam parameter uFlags, SHGetFileInfo() tidak dapat memperoleh informasi tentang folder virtual seperti "Komputer Saya". 2. Memuat ikon
Gunakan komponen TImageList yang disediakan oleh Delphi untuk memuat ikon yang diperoleh dengan memanggil fungsi ImageList_AddIcon() di CommCtrl.pas, dan pastikan nomor indeksnya sesuai dengan teks yang ditampilkan. Petunjuknya adalah sebagai berikut:
function ImageList_AddIcon(ImageList: HIMAGELIST; //Muat pegangan ImageList dari ikon
Ikon: Hicon //Pegangan ikon dimuat): Integer; //Mengembalikan nomor indeks ikon di ImageList
Nilai kembalian ImageList_AddIcon() dapat digunakan ketika Anda perlu menentukan nomor indeks ikon. 3. Output grafis dari ikon dan teks
Untuk komponen seperti kotak kombo dan kotak daftar yang tidak dapat menampilkan ikon secara langsung, karena diperlukan untuk menampilkan ikon dan teks secara bersamaan, hal ini dapat dicapai dengan mengatur properti Gaya yang sesuai. Contohnya adalah sebagai berikut:
Kotak kombo: ComboBox1.Style:=csOwnerDrawVariable. Menurut pengalaman penggunaan sebenarnya, yang terbaik adalah tidak mengaturnya secara langsung dalam bentuk ObjectInspector. Sebaliknya, kode harus ditambahkan ke lokasi yang sesuai dalam program, jika tidak, perubahan ketinggian tidak teratur area gambar dapat terjadi.
Kotak daftar: ListBox1.Style:=lbOwnerDrawVariable
Bilah status: StatusBar1.Panels[i].Style:= psOwnerDraw tidak dapat menggunakan bilah status sederhana. i adalah nomor indeks panel tertentu di bilah status tempat ikon akan digambar. Output grafis dapat menggunakan ImageList1.Draw () metode TImageList, dan keluaran Teks dapat menggunakan metode TextOut() dari TCanvas, yang diwarisi dari properti Canvas komponen. Tentunya komponen tanpa properti Canvas tidak dapat menggunakan metode ini untuk menampilkan ikon.
Untuk komponen yang dapat langsung menampilkan ikon, tentukan langsung properti ikon yang diperlukan seperti Gambar dan StateImages sebagai nama komponen TimageList yang sesuai, dan ikon dapat ditampilkan dengan menentukan nomor indeks ikon. Perlu diperhatikan bahwa saat menggunakan ikon besar, Anda harus terlebih dahulu memanggil metode CreateSize() dari TImageList untuk menentukan ukuran ikon yang dapat dimuat, dan memanggil CreateSize() lagi setelah setiap panggilan ke metode Clear dari TImageList.
Gunakan metode ImageList1.Clear dari TImageList untuk menghapus ikon yang dimuat, yang sering digunakan saat penyegaran diperlukan.