برای کتابخانه VCL، Borland نسخه خود را از رابط Drag&Drop (که به عنوان "کشیدن" ترجمه شده است) پیاده سازی کرده است. این رابط داخلی است - شما می توانید هر کنترل دلفی را در داخل فرم ارسال و دریافت کنید (به جز خود فرم). بدون استفاده از توابع API مربوطه ویندوز پیاده سازی می شود - آنها باید هنگام سازماندهی ارتباط با سایر وظایف با کشیدن و رها کردن استفاده شوند. .
کلیک کردن دکمه سمت چپماوس را روی کنترل، میتوانیم آن را به هر عنصر دیگری "کشش" کنیم. از دیدگاه برنامه نویس، این بدان معنی است که در لحظه های کشیدن و رها کردن کلید، رویدادهای خاصی تولید می شوند که تمام اطلاعات لازم را منتقل می کنند - یک اشاره گر به شیء کشیده شده، مختصات مکان نما فعلی و غیره. گیرنده رویداد عنصر است. که روی آن این لحظهمکان نما قرار دارد. کنترل کننده چنین رویدادی باید به سیستم بگوید که آیا کنترل داده شده "ارسال" را می پذیرد یا خیر. هنگامی که دکمه روی کنترل گیرنده رها می شود، بسته به آمادگی گیرنده، یک یا دو رویداد دیگر اجرا می شود.
لغو بکشید عملیات جاری کشیدن و رها کردن یا کشیدن و اتصال را لغو می کند.
تابع FindDragTarget (const Pos: TPoint ;AllowDisabled: Boolean): TControl ;
تابع یک شی از کلاس پایه را برمی گرداند TCکنترل ، که به موقعیت صفحه با مختصات مشخص شده توسط پارامتر Pos اشاره دارد. این تابع برای تعیین گیرنده احتمالی عملیات کشیدن و رها کردن یا کشیدن و داک کردن استفاده می شود. اگر هیچ کنترل پنجره ای برای موقعیت مشخص شده وجود نداشته باشد، تابع برمی گرددصفر . پارامتر AllowDisabled تعیین می کند که آیا اشیاء غیرفعال در نظر گرفته می شوند یا خیر.
تابع IsDragObject(فرستنده: TObject): Boolean;
تابع تعیین می کند که آیا شی مشخص شده در پارامتر Sender از نوادگان کلاس است یا خیر TDragObject . این تابعمی تواند به عنوان پارامتر Source در کنترل کننده رویداد OnDragOver و OnDockOver برای تعیین اینکه آیا شیء کشیده شده پذیرفته می شود یا خیر استفاده شود. همچنین عملکرد IsDragObjectمی تواند به عنوان پارامتر Source در کنترل کننده رویداد OnDragDrop و OnDockDrop به منظور تفسیر صحیح شیء کشیده شده استفاده شود.
DragMode، ویژگیهای DragCursor، BeginDrag، OnDragOver، OnDragDrop، OnEndDrag، روشهای OnStartDrag، پارامتر Accept
فرآیند کشیدن اطلاعات از یک شی به شی دیگر با ماوس به طور گسترده در Widows استفاده می شود.شما می توانید فایل ها را بین پوشه ها جابه جا کنید، خود پوشه ها را جابجا کنید و موارد دیگر.
تمام خصوصیات، متدها و رویدادهای مرتبط با فرآیند کشیدن و رها کردن در کلاس TControl تعریف شدهاند که والد تمام اجزای بصری دلفی است. بنابراین، آنها در همه اجزاء مشترک هستند.
شروع کشیدن توسط ویژگی DragMode تعیین می شود که می تواند در زمان طراحی یا از نظر برنامه ای برابر با dmManual یا dmAutomatic تنظیم شود. مقدار dmAutomatic (اتوماتیک) شروع خودکار فرآیند کشیدن را زمانی که کاربر دکمه ماوس را روی کامپوننت کلیک می کند، تعیین می کند. با این حال، در این مورد، رویداد OnMouseDown مربوط به فشار دادن دکمه ماوس توسط کاربر به هیچ وجه برای این مؤلفه رخ نمی دهد.
رابط برای انتقال و دریافت مولفه ها مدت ها پیش ظاهر شد. این تعامل بین دو کنترل را در طول اجرای برنامه فراهم می کند. در این صورت می توان هرگونه عملیات لازم را انجام داد. با وجود سادگی اجرا و قدمت توسعه، بسیاری از برنامه نویسان (به ویژه مبتدیان) این مکانیسم را مبهم و عجیب می دانند. با این حال، استفاده از Drag-and-Drop می تواند بسیار مفید و آسان برای پیاده سازی باشد. اکنون ما این را تأیید می کنیم.
برای اینکه مکانیزم کار کند، دو کنترل باید بر اساس آن پیکربندی شوند. یکی باید منبع (منبع) باشد، دومی - گیرنده (هدف). در این حالت، منبع به جایی حرکت نمی کند، بلکه فقط به این صورت در مکانیزم ثبت می شود.
باور کنید، تبدیل شدن به آن به اندازه کافی آسان است مختصات X,Y، در پارامترهای رویدادهای OnDragOver و OnDragDrop به مختصات فرم منتقل می شود.
با ویژگی های Left و Top مؤلفه ای که مکان نما روی آن قرار دارد کار کنید. من یک مثال ساده می زنم. یک جزء یادداشت را روی فرم قرار دهید و اختصاص دهید تراز کردن ویژگیمقدار alTop یک پانل روی فرم قرار دهید، همچنین ویژگی Align را روی alTop قرار دهید و ویژگی Height را روی یک مقدار کوچک مثلاً 6 یا 7 پیکسل قرار دهید. DragMode را روی dmAutomatica و DragCursor را روی crVSplit قرار دهید. کامپوننت Memo دیگری را قرار دهید و Align را روی alClient قرار دهید. هر دو یادداشت را همزمان انتخاب کنید، پانل، و یک کنترل کننده رویداد مشترک OnDragOver را مطابق شکل زیر ایجاد کنید:
ویژگی Drag and Drop می تواند به افزایش عملکرد iPad شما کمک کند. در اینجا نحوه استفاده از آن آورده شده است.
بنابراین می توانید یک فایل را از یک سرویس ذخیره سازی ابری به سرویس دیگر منتقل کنید، متن را از Safari در یک برنامه ویرایش متن کپی کنید تا یک نقل قول اضافه کنید یا ایجاد کنید. پشتیبان گیریعکس های خاص در برنامه ذخیره سازی فایل
نحوه کشیدن و رها کردن عکس ها، فایل ها و متن
1. عکس، فایل یا متن برجستهشدهای را که میخواهید به برنامه دیگری بکشید، لمس کنید و نگه دارید.
2. مورد را به آن بکشید جای مناسبکه در این نرم افزاریا دیگری که در Slide Over یا Split View باز کرده اید و رها کنید.
چگونه چندین عکس یا فایل را همزمان بکشید و رها کنید
1. یکی از عکسها یا فایلهایی را که میخواهید بکشید، لمس کنید و نگه دارید.
2. در حین کشیدن مورد فعلی، روی عکس یا فایل دیگری که میخواهید آن را نیز بکشید ضربه بزنید. این کار را دوباره با هر تعداد عنصری که می خواهید حرکت دهید، انجام دهید.
3. همه اشیاء انتخاب شده را به مکان تعیین شده در برنامه دیگری که در Slide Over یا Split View باز کرده اید بکشید و آنها را رها کنید.
نحوه کشیدن متن از یک برنامه به برنامه دیگر
1. روی بخشی از متنی که می خواهید بکشید ضربه بزنید و نگه دارید تا انتخاب شود.
2. از نقاط انتخاب برای برجسته کردن بقیه متنی که می خواهید بکشید استفاده کنید.
3. متن انتخاب شده را فشار داده و نگه دارید.
4. متن را به برنامه ای که می خواهید در آن قرار دهید بکشید و رها کنید.
نحوه تغییر موقعیت نمادهای چندین برنامه به طور همزمان با استفاده از "Drag and Drop"
در حالی که اکثر قابلیتهای کشیدن و رها کردن iOS فقط روی آیپد کار میکنند، این ترفند در واقع هم روی آیفون و هم روی آیپد کار میکند. این به شما امکان می دهد مکان برنامه ها را با استفاده از صفحه اصلی سازماندهی کنید « بکشید و رها کنید" به جای اینکه آنها را یکی یکی جابجا کنید.
1. نماد برنامه ای را که می خواهید در صفحه اصلی تغییر مکان دهید، لمس کنید و نگه دارید.
2. دست زدن به برنامه های کاربردی اضافی، که باید جابجا شود.
3. این برنامه ها را به صفحه یا پوشه ای که می خواهید در آن قرار گیرند بکشید و رها کنید.
مدتهاست که توابع جاوا اسکریپت وجود دارد که به ما امکان ایجاد رابطهای کشیدن و رها کردن را میدهد. اما هیچ یک از این پیاده سازی ها بومی مرورگر نیستند.HTML5 روش خاص خود را برای ایجاد رابط های کشیدن و رها کردن (با کمک کمی از جاوا اسکریپت) دارد. در این مقاله به شما خواهیم گفت که چگونه می توان به این ...
پشتیبانی از مرورگر
کشیدن و رها کردن HTML5 در حال حاضر توسط همه مرورگرهای اصلی دسکتاپ (از جمله IE (حتی IE 5.5 پشتیبانی جزئی دارد) پشتیبانی می شود، اما توسط هیچ یک از مرورگرهای محبوب موبایل پشتیبانی نمی شود.
کشیدن و رها کردن رویدادها
در هر مرحله از کشیدن و رها کردن، رویدادهای مختلفی فعال میشوند تا مرورگر بداند کدام کد جاوا اسکریپت را باید اجرا کند. لیست رویدادها:
- dragStart: زمانی فعال می شود که کاربر شروع به کشیدن عناصر می کند.
- dragEnter: زمانی که عنصر کشیده شده برای اولین بار روی عنصر هدف کشیده می شود، اجرا می شود.
- dragOver: هنگامی که ماوس روی یک عنصر حرکت می کند در حالی که کشیدن در حال انجام است، اجرا می شود.
- dragLeave: اگر مکان نما کاربر هنگام کشیدن عنصر را ترک کند، فعال می شود.
- کشیدن: هر بار که ماوس را حرکت میدهیم در حالی که عنصر خود را میکشیم، شلیک میشود.
- drop: هنگامی که دراپ واقعی اجرا می شود، شلیک می شود.
- dragEnd: زمانی که کاربر دکمه ماوس را در حین کشیدن یک شی رها می کند، فعال می شود.
با همه این شنوندگان رویداد، شما کنترل زیادی بر نحوه عملکرد رابط دارید.
شی انتقال داده
اینجاست که تمام جادوهای کشیدن و رها کردن اتفاق می افتد. این شی حاوی داده هایی است که توسط عملیات کشیدن ارسال شده است. داده ها را می توان تنظیم و بازیابی کرد روش های مختلفکه مهمترین آنها عبارتند از:
- dataTransfer.effectAllowed=value: انواع اعمال مجاز را برمی گرداند، مقادیر ممکن: هیچکدام، کپی، copyLink، copyMove، پیوند، انتقال، انتقال، همه و بدون مقدار اولیه.
- dataTransfer.setData (فرمت، داده): داده ها و قالب خاصی را اضافه می کند.
- dataTransfer.clearData(format): تمام داده ها را برای یک فرمت خاص پاک می کند.
- dataTransfer.setDragImage(عنصر، x، y): تصویری را که می خواهید بکشید تنظیم می کند، مقادیر x و y نشان می دهد مکان نما ماوس کجا باید باشد (0، 0 آن را در سمت چپ بالا قرار می دهد).
- data = dataTransfer.getData(format): همانطور که از نام آن پیداست، داده ها را برای یک فرمت خاص برمی گرداند.
ایجاد یک مثال کشیدن و رها کردن
حالا ما شروع به ایجاد یک مثال کشیدن و رها کردن ساده می کنیم. همانطور که می بینید ما دو div کوچک و یک div بزرگ داریم، می توانیم div های کوچک را به داخل بزرگ بکشیم و حتی آنها را به عقب برگردانیم.
کشیدن یک شی
اولین کاری که باید انجام دهیم ایجاد HTML است. ما div ها را با ویژگی draggable قابل کشیدن می کنیم:
پس از انجام این کار، باید یک تابع جاوا اسکریپت تعریف کنیم که به محض شروع حرکت این عنصر فعال می شود:
تابع dragStart(ev) ( ev.dataTransfer.effectAllowed="move"; ev.dataTransfer.setData("Text"، ev.target.getAttribute("id")); ev.dataTransfer.setDragImage(ev.target,100,100) ؛ بازگشت واقعی؛ )
در این کد ابتدا اعلام می کنیم که چه نوع افکتی را در عملیات مجاز می کنیم و آن را روی حرکت قرار می دهیم. در خط دوم، داده ها را برای کار با آن تنظیم می کنیم، که متن آن Text و مقدار، شناسه عنصری است که در حال کشیدن آن هستیم. بعد از آن از متد setDragImage استفاده می کنیم که مشخص می کند چه چیزی را بکشیم و سپس مکان نما در حین کشیدن کجا باشد و چون مکعب ها 200 در 200 پیکسل هستند آن را در مرکز قرار می دهیم. در پایان، ما به بازگشت true برمی گردیم.
رها کردن شی
برای اینکه یک عنصر یک drop را بپذیرد، باید به 3 رویداد مختلف گوش دهد: dragEnter، dragOver، و رویداد drop. پس بیایید این را با شناسه بزرگ به div HTML5 خود اضافه کنیم:
تابع dragEnter(ev) ( ev.preventDefault(); return true؛ ) تابع dragOver(ev) (ev.preventDefault(); )
در تابع اول تعریف می کنیم که چه اتفاقی باید بیفتد وقتی عنصری که می کشیم به عنصر مورد نظر برسد که در آن افت باید رخ دهد، در این حالت فقط از رفتار پیش فرض مرورگر جلوگیری می کنیم. بعد، در تابع dragOver، به طور پیش فرض اجازه نمی دهیم drop اتفاق بیفتد.
در قسمت بعدی، تابعی را برای زمانی که یک عنصر روی هدف مورد نظر "پرتاب می شود" تعریف می کنیم:
تابع dragDrop(ev) ( var data = ev.dataTransfer.getData("Text"); ev.target.appendChild(document.getElementById(data)); ev.stopPropagation(); return false;)
در این بخش آخر، ابتدا متغیر داده را در جایی قرار می دهیم که تمام داده هایی را که در دسترس است به دست آوریم قالب متن، و سپس داده ها را به div که می خواهیم عنصر را رها کنیم اضافه می کنیم.
بخش رها کردن را به یک هدف تبدیل کنید
دمو نشان می دهد که دو div را می توان به جای خود بازگرداند. خوشبختانه، اضافه کردن یک هدف دیگر بسیار ساده تر از آن چیزی است که فکر می کنید. زیرا ما قبلاً این توابع را داریم و تنها کاری که باید انجام دهیم این است که شنوندگان رویداد را اضافه کنیم:
و این تمام چیزی است که لازم است تا بتوان دیو را به جای خود بازگرداند.
بسیاری از برنامه های کاربردی کشیدن و رها کردن وجود دارد که با آن ساخته شده اند با استفاده از جاوا اسکریپتکتابخانه ها و اغلب استفاده از آنها آسان تر است. اما امیدواریم که در این HTML5 و تکنیک جاوا اسکریپت، پتانسیل آینده را برای حل مشکلات خود خواهید دید.
HTML بکشید و رها کنیدرابطها برنامهها را قادر میسازند از ویژگیهای کشیدن و رها کردن در مرورگرها استفاده کنند.کاربر ممکن است انتخاب کند قابل کشیدنعناصر را با ماوس، آن عناصر را به a بکشید قابل رها شدنعنصر، و با رها کردن دکمه ماوس آنها را رها کنید. یک نمایش شفاف از قابل کشیدنعناصر در طول عملیات کشیدن نشانگر را دنبال می کنند.
برای وب سایت ها، برنامه های افزودنی و برنامه های XUL، تو می توانیشخصی سازی کنید که کدام عناصر می توانند تبدیل شوند قابل کشیدن، نوع بازخورد قابل کشیدنعناصر تولید می کنند، و قابل رها شدنعناصر.
این نمای کلی از کشیدن و رها کردن HTML شامل شرح رابطها، گامهای اساسی برای افزودن پشتیبانی کشیدن و رها کردن به یک برنامه، و خلاصه قابلیت همکاری رابطها است.
رویدادها را بکشید
رویداد | روی رویداد Handler | آتش سوزی زمانی… |
---|---|---|
بکشید | ondrag | …آ مورد کشیده شده(انتخاب عنصر یا متن) کشیده می شود. |
اژدها | ondragend | ... عملیات کشیدن به پایان می رسد (مانند رها کردن دکمه ماوس یا زدن کلید Esc؛ به پایان کشیدن مراجعه کنید.) |
کشنده | ondragenter | ... یک مورد کشیده شده وارد یک هدف سقوط معتبر می شود. (به مشخص کردن اهداف رها شده مراجعه کنید.) |
dragexit | ondragexit | ... یک عنصر دیگر هدف انتخاب فوری عملیات کشیدن نیست. |
کشیدن | روی گلبرگ | ... یک مورد کشیده شده یک هدف رها کردن معتبر باقی می گذارد. |
کشنده | اندراگوور | ... یک مورد کشیده شده روی یک هدف سقوط معتبر، هر چند صد میلی ثانیه کشیده می شود. |
dragstart | ondragstart | ... کاربر شروع به کشیدن یک مورد می کند. (به شروع عملیات کشیدن مراجعه کنید.) |
رها کردن | رها کردن | ... یک مورد روی یک هدف سقوط معتبر رها می شود. (به اجرای یک قطره مراجعه کنید.) |
توجه داشته باشید:هنگام کشیدن فایل از سیستم عامل به داخل مرورگر، نه رویدادهای dragstart و dragend اجرا نمی شوند.
رابط ها
اصول اولیه
این بخش خلاصه ای از مراحل اولیه برای افزودن قابلیت کشیدن و رها کردن به یک برنامه است.
تشخیص دهید که چیست قابل کشیدن
ساختن یک عنصر قابل کشیدنهمانطور که در نمونه کد زیر نشان داده شده است، نیاز به افزودن ویژگی dragable و کنترل کننده رویداد جهانی ondragstart دارد:
این عنصر قابل کشیدن است.
برای اطلاعات بیشتر ببین:
قطره را مدیریت کند اثر
کنترل کننده رویداد drop برای پردازش داده های کشیدن به روشی خاص برنامه آزاد است.
به طور معمول، یک برنامه کاربردی از متد getData() برای بازیابی آیتم های درگ و سپس پردازش آنها بر اساس آن استفاده می کند. علاوه بر این، معناشناسی برنامه ممکن است بسته به مقدار آن متفاوت باشد
تکنیکهای کشیدن و رها کردن طی سالها تکامل یافتهاند. جای تعجب نیست که با افزایش تعداد برنامه نویسانی که پلاگین های باز را توسعه می دهند کد منبع(به عنوان مثال برای jQuery) روش های قدیمی دوباره احیا می شوند. کتابخانه جاوا اسکریپت بسیار سازگار است و پیشرفت های زیادی را در این عصر فناوری وب ارائه می دهد.
در این آموزش، ما یک اسکریپت می سازیم که می توانیم از آن برای ایجاد مستطیل های پویا کشیدن و رها کردن در وب سایت خود استفاده کنیم. این فرآیند توسط جی کوئری کنترل می شود. چنین اسکریپت هایی با ارائه قابلیت های آماده در زمان صرفه جویی می کنند! و کتابخانه کشیدن و رها کردن را می توان در پروژه های دیگر استفاده کرد.
ما محتوا را آماده می کنیم
اول از همه، ما یک وب سایت کوچک برای پروژه آماده خواهیم کرد. در پوشه پروژه، باید دو دایرکتوری با نام های قابل توجه ایجاد کنید "js"و "css"و یک فایل خالی index.html . کد بسیار ساده خواهد بود به طوری که ایده روشنی از کار وجود دارد و نکته ای برای توسعه بیشتر وجود دارد.
در زیر کد ما آمده است فایل HTML. در فصل سرما شامل 3 اسکریپت هستیم. اسکریپت اصلی جی کوئری از سرور کد گوگل بارگیری می شود. فایل style.css ما نیز گنجانده شده است که حاوی ویژگی های اصلی برای شکل دهی است ظاهرسند ما
مرا بکش
من هم می توانم کشیده شوم
P.S. شما می توانید من را در هر جایی رها کنید!