גרור ושחרר

גרור ושחרר (באנגלית: Drag and Drop) הוא מונח בתחום המחשוב, הלקוח מעולם התוכן של הממשק למשתמש. מדובר במחווה (gesture, פעולת משתמש) אשר לפיה משתמש המחשב מסמן ובוחר רכיב תוכנה גורר אותו למקום אחר על המסך ושם עוזב אותו. זוהי אחת הדרכים ליצירת אינטראקציה בין משתמש לבין תוכנה. פעולת הסימון עצמה יכולה להיות במספר דרכים, למשל: באמצעות העכבר - לחיצה בנקודת התחלת הסימון, החזקת כפתור העכבר במצב לחוץ, הזזת הסמן על פני האזור אותו רוצים לסמן, ולסיום - עזיבת כפתור העכבר. דרך אחרת או נוספת לסימון היא באמצעות הקלקה כפולה על הרכיב. במסכי מגע דרך הסימון היא באמצעות "מריחת" האצבע על פני הקטע אותו רוצים לסמן. נקודת העזיבה יכולה להיות רכיב תוכנה אחר, למשל: כפתור, שדה טקסט, או כל רכיב תצוגתי אחר. פעולה העזיבה עצמה גורמת ליצירת אירוע בתוכנה, ובהתאם לכך מתרחשת תגובה. דוגמה לפעולת "גרור ושחרר": המשתמש מסמן קטע טקסט במסמך, ולאחר מכן גורר ועוזב אותו במקום אחר במסמך. התוצאה היא העברת הטקסט מנקודת המוצא אל נקודת היעד. פעולת "גרור ושחרר" אינה מובנית באופן אוטומטי בכל תוכנה, ועל מתכנת המערכת לשלבה במקומות המתאימים, בהתאם לתכנון. לכאורה, קל ופשוט להשתמש בתכונה זו כאשר היא קיימת, אולם מצד אחר, לא תמיד המשתמש מודע לקיומה כלל. עובדה זו עלולה לפגום ברמת השימושיות של פעולה זו. להלן רשימת הצעדים שיש לבצע על מנת לקיים פעולת "גרור ושחרר": הבאת הסמן אל נקודת תחילת הרכיב אותו רוצים לסמן לחיצה והמשך החזקת הכפתור השמאלי של העכבר (או כל התקן הצבעה אחר) במצב לחוץ. תוך כדי כך, הזזת הסמן כך שהרכיב יסומן בתצוגה גרירת הרכיב אל נקודת היעד עזיבת הרכיב בנקודת היעד על ידי שחרור כפתור העכבר פעולת הגרירה עצמה דורשת מאמץ פיזי רב יותר מהמשתמש מאשר היה הזזת העכבר ללא לחיצה על כפתוריו. מסיבה זו קשה לגרור את הרכיב במהירות ובאופן מדויק (ראה חוק פיט - Fitts's law). יחד עם זאת, לפעולת "גרור ושחרר" יש יתרון בולט והוא - שרשור שתי פעולות נפוצות ונחוצות לכדי פעולה אחת. הסינרגיה המושגת כאן עולה לאין ערוך על חלופתה בביצוע פעולות בדידות ומתמשכות. קשיים נוספים בביצוע הפעולה: שימוש רב מדי בפעולת "גרור ושחרר" עלול לגרום לעומס יתר ולהתעייפות השרירים באזור כף היד המפעילה את העכבר. שימוש באותו כפתור גם לסימון רכיב וגם לגרירתו. פעולה לא מדויקת מצד המשתמש עלולה לגרום להזזת הרכיב במקום לסימונו בלבד. נקודת שחרור הרכיב עשויה להיות נסתרת מהמשתמש וממוקמת מתחת לרכיב אחר. במצב זה יהא על המשתמש להפסיק את פעולת הגרירה, לוודא כי גם נקודת המוצא וגם נקודת העזיבה תהיינה חשופות בפניו, ורק אז להתחיל שוב בגרירה והשחרור. במערכת ההפעלה Mac OS X שורת התפריט שבראש המסך תוכננה כך שתשמש כ - "אזור ביטול גרירה", כלומר - השלכה לאזור זה מבטלת את פעולת הגרירה. בתחילת עידן המקינטוש נקראה בזמנו פעולת "גרור ושחרר" בשם "הקלק וגרור" (Click and Drag), ותפקידה היה לסייע בביצוע פעולות על קבצים, למשל: העתקם והעברתם בין דיסקים וספריות. מערכת ההפעלה System 7 הוסיפה את האפשרות לפתוח מסמך באמצעות יישום על ידי שחרור צלמית המסמך הנגרר על צלמית היישום. במערכת ההפעלה System 7.5 השימוש בפעולת "גרור ושחרר" הורחב גם לביצוע פעולות הקשורות לזיכרון, כמו למשל: העתקה והעברת טקסט בתוך מסמך, או לתוך קובץ. ברוב שנות קיומן של מערכות ההפעלה של מקינטוש, נעשה שימוש בעכבר בעל כפתור יחיד, אשר ביצע מגוון רב מאוד של פעולות, לרבות "גרור ושחרר". מסיבות ארגונומיות (של הנדסת אנוש), ומתוך מחשבה להקל על המשתמש לבצע את כל אותן פעולות בהן היה אמור לתמוך, תוכנן העכבר כך שכפתור ההפעלה היחיד שלו היה גדול מאוד יחסית למשטח העכבר העליון. סביבת העבודה של מערכת הפעלה זו תומכת בביצוע פעולת "גרור ושחרר" על ידי שימוש בכפתור המשני של העכבר (לאו דווקא הכפתור השמאלי, אלא זה שהוגדר להיות משני). הכפתור הראשי תוכנן לשמש למטרות סימון ובחירה. מערכת ההפעלה "חלונות" תמכה מראשיתה בפעולת "גרור ושחרר" המוכרת לנו היום. מפרט ההגדרות של HTML5 כולל תמיכה מלאה בפעולת "גרור ושחרר". התמיכה בנושא זה מתבטאת ביכולות הבאות (בהתאם לצורך): גרירה ושחרור של טקסט וקוד HTML. גרירה ושחרור של רכיבים HTML-ים. גרירה ושחרור של קבצים. הדפדפנים גוגל כרום וספארי, וכן אפליקציית Gmail של Google, תומכים ב"גרור ושחרר" של תמונות וצרופות (Attachments) להודעות דואל. מסכי מגע תומכים אף הם, באופן טבעי, בפעולת "גרור ושחרר", אלא שבהם הפעולה מתבצעת באופן שונה במעט: לחיצה ארוכה על הפריט גורמת לסימונו או בחירתו, ולאחר מכן על המשתמש לגרור את הפריט המסומן אל נקודת היעד ולעזבו שם. זו פעולת השחרור. פעולת "גרור ושחרר" היא צורת תפעול בסיסית בסביבות פיתוח תוכנה, למשל: Microsoft Visual Studio. סביבות פיתוח מדורות קודמים היו ברובן טקסטואליות, כלומר, מבוססות על כתיבת שורות קוד בשפת תכנות. בסביבות הפיתוח המתקדמות יותר כדוגמת Microsoft Visual Studio, פיתוח התוכנה מבוסס מאוד על גרירת רכיבים גרפיים על המסך, ולאחר מכן עדכון רשימות קוד. יתרה מכך, כבר כתוצאה מגרירה ושחרור של רכיב, לדוגמה: כפתורים, כותרות וכו', סביבת הפיתוח יוצרת קוד תוכנה תשתיתי, שהוא בסיס להמשך הפיתוח (לדוגמה: שימוש ברכיבי WPF היוצר קוד XAML). גרירת ושחרור קובץ או צלמית יישום כדי למחקו מהמערכת. גרירת קובץ מסמך או קובץ נתונים ושחרורו מעל צלמית היישום המטפל בו, למשל: גרירת מסמך טקסט ושחרורו מעל הצלמית המפעילה את וורד תגרום לפתיחת המסמך בתוך תוכנת וורד. העתקה והעברת קבצים בין ספריות. העברת טקסט בתוך מסמך. הוספת פריטים לרשימה. סידור מחדש של הצלמיות הנמצאות בשולחן העבודה. גרירת כלי עבודה גרפיים אל עבר משטח העבודה תגרום להפעלתם שם. יצירת שיוך בין שני רכיבים חזותיים על המסך. Mouse gesture (באנגלית) Point and Click (באנגלית) Snap - computer graphics (באנגלית) מדיה וקבצים בנושא גרור ושחרר בוויקישיתוף Jakob Nielsen, "Top-10 Application-Design Mistakes," http://www.useit.com/alertbox/application-mistakes.html (19 February 2008). Buxton, W. (1986). Chunking and Phrasing and the Design of Human-Computer Dialogues, Proceeding of the IFIP World Computet Congress. pp. 475-480. Disk Swapper's Elbow, www.folklore.org Grand Unified Model (2): The Finder, www.folklore.org HTML5 W3C Working Draft, www.w3.org