דוגמא 3 תיבות רשימה

בדוגמא זו ניצור דיאלוג עם 2 כפתורים Add, וRemove-. כמו כן ניצור תיבת טקסט אחת, רשימה אחת וכפתור שישמש לסגירת הדיאלוג. כאשר המשתמש ילחץ על add נוסיף את הטקסט שבתיבת הטקסט לרשימה. כאשר המשתמש ילחץ על Remove, נבדוק האם נבחר פריט ברשימה, ואם כן נמחק אותו. נלמד תוך כדי הדוגמא על הפונצקיה $did והפרמטרים השונים שלה, המאפשרים לנו לקבל מידע על הפקדים השונים שיצרנו.

דבר ראשון, נעצב את הדיאלוג:

dialog dlgLists {
  title  "Lists Work"
  size   205 126 250 240
  list   1,143 24 87 154
  button "Add",2,39 42 65 22
  button "Remove",3,39 71 65 22
  edit   "Text",4,31 111 81 20
  button "Close",5,87 191 72 29,cancel, default
  box    "",6,16 17 110 154
}

לצורך ביצוע הדוגמא, עלינו להיות מסוגלים לקבל מידע על הפקדים שיצרנו. למשל, עלינו לדעת איזה, אם בכלל, פריט ברשימה נבחר כרגע. כמו כן נרצה לדעת מה הטקסט הנוכחי בתיבת העריכה, על מנת שנוכל להוסיף אותו לרשימה.

לעזרתנו באה הפונקציה $did.

צורת הפנייה לפונקציה הזו הוא $did(name,id,N) .

name הוא שם הדיאלוג בו נמצא הפקד. id זהו הid של הפקד. N הוא פרמטר אופציונלי, ואנו מוסיפים אותו אם אנו רוצים להתייחס לשורה N ברשימה או בתיבת בחירה.

על מנת לגשת לתכונות השונות של כל פקד, מוסיפים . (נקודה) אחרי הפונקציה $did ואז את הערך המבוקש לנו, מתוך הערכים הבאים:

text מחזיר את הטקסט המופיע על הפקד בשורה הנוכחית או בשורה N אם מוגדר N. למשל,

$did(dlgLists, 2).text

יחזיר לנו "Add".

אם לא קיים טקסט, נקבל בחזרה את הערך $null

len מחזיר לנו את אורך הטקסט המופיע בשורה הנוכחית או בשורה N

$did(dlgLists, 2).len

יחזיר לנו 3. (בטקסט “Add” יש 3 אותיות).

lines פרמטר זה יחזיר לנו את מספר שורות הטקסט שיש בפקד.

sel מחזירה את מספר השורה שנבחרה ברשימה או בתיבת בחירה.

seltext מחזיר את הטקסט הנוכחי שנבחר בפקד כגון רשימה או תיבת בחירה.

state מחזיר את מצב הפקד (בפקדים שיש בהם מצבים, שהם כפתורי רדיו וכפתורי בחירה). המצב יכול להיות 0 (off), 1 (on) או 2 (לא מוגדר).

visible מחזיר ערך $true אם הפקד נראה, או $false אם הוא בלתי נראה.

enabled מחזיר ערך $true אם הפקד פעיל, או $false אם הוא לא פעיל.

נחזור כעת לדוגמא שלנו.

אם נביט, נראה כי בדיאלוג שיצרנו, מוצג הטקסט Text בתיבת עריכה בהתחלה.

אנו רוצים שכאשר הדיאלוג יפתח, לא יהיה טקסט בתיבה, והמשתמש יוכל להקיש את הטקסט שהוא רוצה. נגיב לאירוע init של הדיאלוג, ונמחוק את הטקסט מהתיבה:

on 1:dialog:dlgLists:init:*: {
  did -r dlgLists 4
}

עכשיו נטפל בלחיצה על המקש Add.

כאשר המשתמש ילחץ על המקש, הסקריפט יבדוק האם קיים טקסט בתוך התיבה, ואם כן, יוסיף את הטקסט לרשימה, וינקה את תיבת הטקסט.

כדי להגיב ללחיצה על Add אנו צריכים להגיב לאירוע sclick.

on 1:dialog:dlgLists:sclick:*: {
  if ($did == 2 ) {
    if ( $did(dlgLists, 4).text != $null ) {
      did -a dlgLists 1 $did(dlgLists, 4).text
      did -r dlgLists 4
    }
  }
}

כאשר המשתמש לוחץ במקום כלשהו בדיאלוג, הסקריפט בודק האם הid שנלחץ הוא 2.

אם כן אנו בודקים בעזרת if ( $did(dlgLists, 4).text != $null ) האם ישנו טקסט בתיבת הטקסט. אם כן, אנו מוסיפים את הטקסט אל הרשימה, ואז מוחקים את הטקסט.

לאחר שגרמנו לכפתור Add לעבוד, אנו רוצים לגרום גם לכפתור Remove לעבוד.

כאשר הכפתור יילחץ, הסקריפט יבדוק האם המשתמש בחר את אחד מפריטי הרשימה. אם כן, פריט זה יימחק מהרשימה.

הנה הקוד החדש של האירוע sclick:

on 1:dialog:dlgLists:sclick:*: {
  if ($did == 2 ) {
    if ( $did(dlgLists, 4).text != $null ) {
      did -a dlgLists 1 $did(dlgLists, 4).text
      did -r dlgLists 4
    }
  }
  if ($did == 3 ) {
    if ( $did(dlgLists, 1).sel != $null ) {
      did -d dlgLists 1 $did(dlgLists, 1).sel
    }
  }
}

אנו בודקים האם ישנו פריט מסומן : if ( $did(dlgLists, 1).sel != $null )

במידה וכן, אנו מוחקים מהרשימה את הפריט שהמספר הסידורי שלו הוא $did(dlgLists, 1).sel (הפריט הנבחר).

סיימנו את כתיבת הקוד של הדוגמא. נציג את הדיאלוג על המסך בעזרת הפקודה.

/dialog –m dlgLists dlgLists

נוסיף איברים לרשימה, נמחק אותם ונראה איך הקוד עובד.

[S1]האם חסר כאן קוד?

אין תגובות!
שיתוף:
| עוד