Dragdrop adalah cara cepat untuk mengoperasikan Windows. Sebagai pengembang berdasarkan Windows
Delphi juga mendukung operasi drag and drop, dan fungsi drag and drop dari sistem aplikasi sangat nyaman, yang benar -benar mencerminkan
Kekuatan dan kenyamanan Delphi.
Semua kontrol yang disediakan oleh Delphi (Control, yang dapat memperoleh fokus input) mendukung operasi seret dan jatuhkan
Properti seret dan lepas yang sesuai, acara seret dan lepas, dan metode seret dan jatuhkan. Selanjutnya, kami akan memperkenalkan dukungan drag-and-drop dari kontrol terlebih dahulu, dan kemudian berikan
Langkah Umum dan Contoh Aplikasi Pengiriman Operasi Seret dan Jatuhkan.
9.1 Seret dan Jatuhkan Dukungan untuk Kontrol
Dalam operasi seret dan lepas, kontrol dapat dibagi menjadi dua kategori: kontrol sumber dan kontrol target. Sebagian besar kontrol dapat digunakan sebagai kontrol sumber
Dapat juga digunakan sebagai kontrol target. Tetapi ada juga beberapa kontrol yang hanya dapat mendukung salah satunya.
9.1.1 Properti Seret dan Jatuhkan
Ada dua properti drag and drop utama:
● Dragmode: Mode seret
Mereka semua diatur dalam kontrol sumber drag-and-drop. Dragmode mengontrol pengguna saat menekan kontrol selama waktu berjalan
Bagaimana kontrol bereaksi saat mouse turun. Jika DragMode diatur ke Drautomatic, maka ketika pengguna menekan mouse pada kontrol
Dragmode dimulai secara otomatis; jika dragmode diatur ke DMManual (ini adalah default), acara mouse akan diproses
Untuk menentukan apakah hambatan dapat dimulai.
Dragcursor digunakan untuk memilih kursor yang ditampilkan saat menyeret.
Spesifikasi antarmuka yang umum dalam proses pemrograman harus dihormati oleh pengembang. Tetapi terkadang untuk tujuan tertentu,
Pengembang juga dapat menetapkan kursor mereka sendiri ke dragcursor.
9.1.2 Acara Seret dan Jatuhkan
Ada tiga acara drag and drop utama:
● Ondragover: Inspire saat diseret oleh
● Ondragdrop: Inspire saat menyeret dan menjatuhkan
● Onenddrop: Inspire saat menyeret ujung
Dua peristiwa pertama ditanggapi oleh kontrol target, dan yang terakhir ditanggapi oleh kontrol sumber.
Fungsi utama dari acara OnDragover adalah untuk menentukan apakah kontrol dapat diterima ketika pengguna menjatuhkan hambatan di tempatnya.
Parameternya meliputi:
Sumber: Tobject;
Status: tdragState;
TdragState adalah jenis enumerasi yang mewakili hubungan antara item drag dan drop dan kontrol target.
ketik tdragState = (dsdragenter, dsdragleave, dsdragmove);
Arti dari nilai yang berbeda adalah sebagai berikut:
Tabel 9.1 Nilai dan signifikansi Dragstate
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ━━━
Makna nilai
────── Chasan 4irim 4irim "tolasanarmaskanirim" ""onggol uranding" "" "" "4irim" "4irim 4 olakkanansansansansansans poto─ansansansansans pirim tolasan 4. 4. 4. 4.kankanansansans pasurn
DSDRAGENTER Seret objek ke kontrol yang memungkinkan objek yang diseret dijatuhkan. adalah keadaan default.
Dsdragleave menyeret objek menjauh dari kontrol yang memungkinkan objek drag dijatuhkan.
Objek drag dsdragmove bergerak dalam kontrol yang memungkinkan objek drag dijatuhkan.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ━━━
Pengguna dapat menggunakan parameter yang disediakan untuk menentukan apakah drag yang dijatuhkan dapat diterima, seperti:
● Jenis Kontrol Sumber Juri:
Terima: = Sumber adalah Tlabel;
● Objek kontrol sumber menilai:
Terima: = (source = tabset1);
● Posisi kursor menilai:
Lihat rutinitas di (9.2), (9.3).
● Hakim Status Seret:
If (sumber adalah tlabel) dan (state = dsdragmove)
Begin Source.dragicon: = 'new.ico';
akhir
kalau tidak
Terima: = false;
Saat menerima = Benar, kontrol target dapat menanggapi peristiwa OnDragdrop, yang digunakan untuk menentukan bahwa program setelah hambatan dijatuhkan
Bagaimana menghadapinya.
Parameter proses pemrosesan acara OnDragdrop mencakup kontrol sumber dan posisi kursor. Informasi ini dapat digunakan untuk diproses
Konfirmasi.
Acara Onenddrag ditanggapi oleh kontrol sumber setelah operasi seret selesai, dan digunakan oleh kontrol sumber untuk melakukan yang sesuai
menghadapi. Akhir dari operasi seret mencakup drag dan drop yang diterima, dan pengguna melepaskannya pada kontrol yang tidak dapat dijatuhkan.
Letakkan mouse. Parameter dari proses pemrosesan acara ini mencakup kontrol target (target) dan koordinat posisi drop. jika
Target = nihil, berarti item yang diseret tidak diterima oleh kontrol apa pun.
Dalam operasi seret-dan-drop, operasi penyalinan drag-and-drop yang diperkenalkan di bagian 3, jika operasi berhasil, kotak daftar file akan tercantum di bawah ini.
Konten yang ditampilkan harus diperbarui. Program berikut digunakan untuk mengimplementasikan fungsi ini.
Prosedur tfmform.filelistendddrag (pengirim, target: tobject; x, y: integer);
Mulai
jika target <> nil maka filelist.update;
akhir;
Selain tiga peristiwa yang dijelaskan di atas, ada peristiwa lain dimusar, yang juga biasa digunakan untuk respons drag-and-drop.
Meskipun Onmousedown bukan peristiwa drag-and-drop khusus, awal menyeret dalam mode manual adalah pada saat ini
Diterapkan selama proses pemrosesan acara.
9.1.3 Metode Seret dan Jatuhkan
Ada tiga cara untuk menyeret dan drop:
● Begindrag: Mulai hambatan dalam mode manual
● Enddrag:
Akhiri hambatan
● Seret: Menentukan apakah kontrol sedang diseret
Ketiga metode ini digunakan oleh kontrol sumber.
Ketika DragMode diatur ke DMManual, seret harus memanggil metode Begindrag kontrol untuk memulai.
Begindrag memiliki parameter boolean segera. Jika parameter input benar, seret untuk segera mulai,
Ubah ke pengaturan Dragcursor. Jika parameter input salah, sampai pengguna memindahkan kursor dengan jarak tertentu
(5 piksel) Sebelum mengubah kursor dan mulai menyeret. Ini memungkinkan kontrol untuk menerima acara OnClick tanpa memulai
Seret operasi.
Metode enddrag membatalkan keadaan yang diseret dari suatu objek. Ini memiliki penurunan parameter boolean. Jika drop diatur
Untuk benar, objek yang diseret dijatuhkan pada posisi saat ini (apakah dapat diterima ditentukan oleh kontrol target);
Jika salah, menyeret dibatalkan di tempatnya.
Program berikut menunjukkan bahwa seret dibatalkan saat menyeret ke panel kontrol.
Prosedur tform1.panel1dragover (pengirim, sumber: tobject; x, y: integer;
Status: tdragState; var menerima: boolean);
Mulai
Terima: = false;
if (sumber adalah tlabel) dan (state = dsdragenter)
(Sumber sebagai tlabel) .enddrag (false);
akhir;
Metode draging menentukan apakah kontrol sedang diseret. Dalam contoh berikut, saat pengguna menyeret kotak centang yang berbeda
Saat jendela berubah ke warna yang berbeda.
Prosedur TFORM1.FORMACTIVATE (Pengirim: TOBJEKS);
Mulai
CHECKBOX1.DRAGMODE: = DAMUUTOMATION;
CHECKBOX2.DRAGMODE: = DMAUTOMATION;
Centang kotak3.dragMode: = Drautomatic;
akhir;
Prosedur TFORM1.FORMDRAGOVER (Pengirim, Sumber: Tobject; X, Y: Integer;
Status: tdragState; var menerima: boolean);
Mulai
Jika centang 1.dragging maka
Warna: = Claqua;
Jika centang kotak
Warna: = Clyellow;
Jika kotak centang3
Warna: = cllime;
akhir;