Drag-and-Drop. Bu bor-yo`g’i ikki komponentani bir-biri bilan bog’lash vositasi bo`lib, bajaradigan amali dasturchi fantaziyasi va qo`yilgan masalaga bog’liq bo`ladi.
Drag-and-Drop mexanizmi to`laligicha bazaviy TControl klassida amalga oshirilgan. Uning mohiyatini ko`rib chiqaylik.
Delphi ning qurollar palitrasidagi ixtiyoriy boshqaruv elementi Drag-and-Drop mexanizmida manba bo`la oladi. Uning hulqi olib o`tishning boshlang’ich davrida
type TDragMode = (dmManual, dmAutomatic);
property DragMode: TDragMode;
hususiyatining qiymatiga bog’liq bo`ladi. DmAutomatic qiymati komponentaning sichqoncha tugmasini bosilishi va olib o`tish jarayonining boshlanishini ta`minlaydi. Bunda mexanizm mustaqil ravishda ishga tushadi.
DmManual qiymati mexanizmni “qo`lda” ishga tushirishni ta`minlaydi. Bu rejimdan sichqoncha tugmasining bosilishiga komponenta odatdagidan boshqacha javob berishiga to`g’ri kelganda foydalanish mumkin. Olib o`tish mexanizmini initsializatsiya qilish uchun
procedure BeginDrag(Immediate: Boolean; Threshold: Integer = -1);
metodi yordam beradi. Bu yerdagi immediate=True parametri mexanizmni shu zahotiyoq ishga tushishini ta`minlaydi. Agar False bo’lsa, mexanizm sichqoncha ko’rsatkichi Threshold parametri bilan belgilangan masofaga yaqinlashganda ishga tushadi.
Mexanizmning ishga tushganligi haqida sichqoncha ko’rsatkichi xabar beradi. U property DragCursor: Tcursor hususiyati bilan aniqlangan ko`rinishni oladi.
Quyidagi
procedure DragOver(Source: TObject; X, Y: Integer; State: DragState; var Accept: Boolean);
metodda nazarda tutilgan ixtiyoriy komponenta qabul qiluvchi bo`lishi mumkin.
Drag-and-Drop mexanizmi ko`rsatkichni shu komponenta ustiga keltirilganda ishga tushadi. Xodisalarni qayta ishlagich metodda kerakli hususiyatlar bo`yicha olib o`tish manbalarini tanlashni xam nazarda tutish mumkin.
Agar Accept parametri True bo`lsa, u holda bu komponenta qabul qiluvchi bo`lib qoladi. Olib o`tish manbasi esa Source parametri bilan belgilanadi. Bu parametr yordamida dasturchi manbaning metod va hususiyatlari bilan ishlashga ruxsat oladi. Ko`rsatkichning joriy holatini X va Y parametrlar aniqlaydi. State parametri sichqoncha xarakati haqidagi ma`lumotlarni saqlaydi:
type TDragState = (dsDragEnter, dsDragLeave, dsDragMove);
bu yerda dsDragEnter – ko`rsatkich komponenta ustiga keldi; dsDragLeave – ko`rsatkich komponentadan ketdi; dsDragMove — ko`rsatkich komponenta tomon surilmoqda.
Qabul qiluvchi manba agar olib o`tish amali aynan unda tugatiladigan bo`lsa, bajarishi lozim bo`lgan ayrim amallarni hisobga olishi lozim. Buning uchun DELPHI ga
type TDragDropEvent = procedure(Sender, Source: TObject;
X, Y: Integer) of object;
property OnDragDrop: TDragDropEvent;
xodisalarni qayta ishlagich metodi kiritilgan. U SCHT qo`yib yuborilganda ishga tushadi. Manba va qabul qiluvchilar bilan ishlashga ruxsat mos ravishda Source va Sender parametrlari yordamida olinadi. Sichqoncha koordinatalarini X va Y parametrlar ko`rsatadi.
Boshqaruv elementini olib o`tish tugaganidan so`ng, manba
type TEndDragEvent = procedure(Sender, Target: TObject; X, Y: Integer) of object;
property OnEndDrag: TEndDragEvent;
metodi bilan qayta ishlanadigan ma`lumotlarni oladi.
Ilovada olib o`tish jarayonini to`xtatish uchun manbaning EndDrag metodidan foydalanish mumkin:
procedure EndDrag(Drop: Boolean);
Bu yerda Drop = True parametri olib o`tish jarayonini tugatadi, va aksincha False – bo`lsa olib o`tish jarayoni to`xtatiladi.
Quyida keltirilgani namunada loyihada Drag-and-Drop mexanizmi asosida matn muharrirlari orasida matnni uzatish va panellarni forma bo`ylab joy almashtirishi amalga oshirilgan (20.1-rasm).
Do'stlaringiz bilan baham: |