Làm cách nào để tạo hộp thoại đa trường trong AppleScript (để yêu cầu thời gian từ người dùng)?


0

Tôi có Ứng dụng Máy tự động mà tôi muốn yêu cầu người dùng nhập thời gian do người dùng chọn.

Lý tưởng nhất, tôi muốn hộp thoại có ba trường:

1) Trường giờ

2) Trường phút

3) Thời gian (chiều hoặc sáng)

Các trường một và hai có thể được nhập bởi người dùng và có một dấu hai chấm ở giữa hai trường. Trường ba là một danh sách thả xuống đơn giản và người dùng phải chọn một trong hai tùy chọn.

Tôi cũng muốn AppleScript kiểm tra xem bất kỳ văn bản nào được nhập vào các giờ và phút đều tuân theo các tiêu chuẩn về thời gian và nếu không, thì sẽ xuất hiện thông báo lỗi và người dùng phải nhập lại văn bản. (Tức là, văn bản được nhập trong trường đầu tiên phải là số có một chữ số từ 1 đến 12 và văn bản được nhập trong trường thứ hai phải là số có hai chữ số trong khoảng từ 00 đến 60.)

Tôi biết rằng tất cả những điều này có thể được thực hiện trong ba hộp thoại riêng biệt, nhưng tôi thực sự muốn hoàn thành tất cả trong một hộp thoại (vì mục đích trình bày cho người dùng một giao diện người dùng thuận tiện).

Tôi không thành thạo AppleScript, vì vậy dự án này cực kỳ tham vọng đối với tôi. Điều này có thể được thực hiện trong AppleScript?

Nếu hành vi này không thể xảy ra với AppleScript, ai đó có thể đề xuất một ngôn ngữ thay thế tương tự trong đó loại hộp thoại này có thể không?

Cảm ơn bạn.

Câu trả lời:


1

Nó không thể được thực hiện trong AppleScript.

Tuy nhiên, tôi đã tìm thấy cách giải quyết này , trong đó văn bản được nhập trên mỗi dòng của một trường được hiểu là một câu trả lời riêng biệt:

-- multiple input dialog

on run -- example
    set {firstName, lastName} to (inputItems for {"• First Name", "• Last Name"} with title given prompt:"Enter the following items separated by a carriage return:")
    display dialog "First Name:  \"" & firstName & "\"" & return & "Last Name:  \"" & lastName & "\""
end run

to inputItems for someItems given title:theTitle, prompt:thePrompt
    (*
    displays a dialog for multiple item entry - a carriage return is used between each input item
    for each item in someItems, a line of text is displayed in the dialog and a line is reserved for the input
        the number of items returned are padded or truncated to match the number of items in someItems
    to fit the size of the dialog, items should be limited in length (~30) and number (~15)  
        parameters -        someItems [list/integer]: a list or count of items to get from the dialog
                        theTitle [boolean/text]: use a default or the given dialog title
                        thePrompt [boolean/text]: use a default or the given prompt text
        returns [list]:     a list of the input items
    *)
    if thePrompt is in {true, false} then -- "with" or "without" prompt
        if thePrompt then
            set thePrompt to "Input the following items:" & return & return -- default
        else
            set thePrompt to ""
        end if
    else -- fix up the prompt a bit
        set thePrompt to thePrompt & return & return
    end if

    if theTitle is in {true, false} then if theTitle then -- "with" or "without" title
        set theTitle to "Multiple Input Dialog" -- default
    else
        set theTitle to ""
    end if

    if class of someItems is integer then -- no item list
        set {theCount, someItems} to {someItems, ""}
        if thePrompt is not "" then set thePrompt to text 1 thru -2 of thePrompt
    else
        set theCount to (count someItems)
    end if
    if theCount is less than 1 then error "inputItems handler:  empty input list"
    set {theItems, theInput} to {{}, {}}

    repeat theCount times -- set the number of lines in the input
        set the end of theInput to ""
    end repeat
    set {tempTID, AppleScript's text item delimiters} to {AppleScript's text item delimiters, return}
    set {someItems, theInput} to {someItems as text, theInput as text}
    set AppleScript's text item delimiters to tempTID

    set theInput to paragraphs of text returned of (display dialog thePrompt & someItems with title theTitle default answer theInput)

    repeat with anItem from 1 to theCount -- pad/truncate entered items
        try
            set the end of theItems to (item anItem of theInput)
        on error
            set the end of theItems to ""
        end try
    end repeat
    return theItems
end inputItems
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.