Saya mencoba membuat kontrol Firemonkey khusus yang mewarisi kontrol TListView
. Saya ingin menambahkan beberapa fungsi ke kontrol yang secara otomatis dijalankan ketika pengguna mengklik kontrol. Oleh karena itu, tujuan saya BUKAN untuk menentukan metode OnItemClick
pada formulir kontrol saya, melainkan menambahkan fungsionalitas langsung ke dalam kontrol itu sendiri.
Saya kesulitan memahami apa yang perlu saya lakukan untuk memanfaatkan pengendali klik untuk TListView
. Di kepala saya, saya membayangkan solusi saya akan terlihat mirip dengan kode semu ini:
//somewhere in the base TListView code
void __fastcall TListView::ClickHandler()
{
//logic for handling a click on the list view
}
//somewhere in my custom list view control
void __fastcall TMyListView::ClickHandler()
{
TListView::ClickHandler(); //call base click handler so all the normal stuff happens
//my additional logic goes here
}
Namun, sepertinya saya tidak dapat menemukan apa pun dalam dokumentasi tentang metode apa yang harus saya coba timpa, atau bagaimana saya harus melakukan hal ini.
Saya menemukan informasi ini tentang memanggil pengendali 'Click-event'. Saya membuat contoh sederhana seperti ini:
void __fastcall TFmListView::Click()
{
ShowMessage("This is the control's click");
}
Ini berfungsi dengan baik, namun menurut dokumentasi:
Jika pengguna telah menetapkan pengendali pada peristiwa OnClick suatu kontrol, mengklik kontrol tersebut akan menyebabkan metode tersebut dipanggil.
Oleh karena itu, logika tambahan apa pun yang saya tempatkan dalam metode kontrol Click()
akan hilang jika salah satu properti peristiwa klik pada kontrol disetel.
Apa cara yang tepat untuk memperluas fungsionalitas dari apa yang terjadi ketika kontrol khusus diklik?
Click()
yang memanggil pengendaliOnClick
, jika ada yang ditugaskan. Jika pengguna menetapkan penanganOnClick
, dan Anda menggantiClick()
, penangan pengguna tidak akan dipanggil kecualiClick()
Anda memanggil kelas dasarClick()
. Hal ini memungkinkan Anda untuk bertindak selain kode pengguna, untuk memutuskan apakah kode Anda berjalan sebelum/sesudah kode pengguna, dan bahkan melewati kode pengguna. - person Remy Lebeau   schedule 31.10.2015