Тема: Помогите создать диалоговое окно

ребята не как немогу написать прогу следующ содержания:
короче надо штоб в диалоговом окне
было три текстовых окошка
притом в третьем отображалось  сумма
содержимого двух других
т.е. вводиш в первое текстовое окошко 100
во второе 200 и мгновенно в третьем появляеться сумма
содержимого первого и второго =300
Это вообще реально или мне лучше не ломать себе голову
если реально был бы признателен еслиб кто небуть
НАВЁЛ меня на мысль как это осуществить
заранее благодарен

Re: Помогите создать диалоговое окно

Реально. Надо в action_tile первого и второго окошек прописать вызов функции, которая читает данные из первого и второго окошек и пишет их сумму в третье. Кстати, "третим окошком" может быть и текст, если это надо только для отображения.

Re: Помогите создать диалоговое окно

а как писать в третье (т.е присваивать все время новые значения
) если текстовые формы обрабатываються в цикле
как тут сделать вызов процедуры
(set_tile "edit2" "500")
(set_tile "edit1" "2400")
(setq on_ed1 "2400" on_ed2 "500")
(setq what_next 8)
(while (< 2 what_next)
(action_tile "edit1" "(setq on_ed1 $value)")
(action_tile "edit2" "(setq on_ed2 $value)")
(action_tile "edit3" "(setq on_ed3 $value)")
(action_tile "accept" "(done_dialog 1) (ok_tab)")
(setq what_next (start_dialog))
)
(unload_dialog dcl_id) ; Unload the DCL file
(setq relst ret_value1)

Re: Помогите создать диалоговое окно

Не нужно никакого цикла тут. А нужно обрабатывать переменную $reason для каждого edit_box.
Если $reason = 1 значит пользователь нажал Enter
Если $reason = 2 значит пользователь вышел из текстового поля(edit_box)
Итого: Если выполняется одно из этих условий берём get_tile от каждого edit_box, делаем значения числом(а не строкой), складываем и устанавливаем в текстовое поле при помощи set_tile
Естественно ещё нужно предусмотреть защиту от "дурака", например если поле edit_box пустое, то его не суммировать. Ну вот такие мысли навскидку...

Re: Помогите создать диалоговое окно

Примерно так, хотя есть варианты...
DCL

test : dialog {
    label = "TEST";
    : column {
        : edit_box {
            label = "A";
            key = "sl1";
            value = "0";
        }
        : edit_box {
            label = "B";
            key = "sl2";
            value = "0";
        }
        : edit_box {
            label = "A+B";
            key = "sum";
            value = "0";
        }
        : row {
            : button {
                label = "Ok";
                key = "done";
                is_cancel = true;
            }
        }
    }
}

LSP

(defun test (/ sumfunc)
  (defun sumfunc (/)
    (set_tile "sum" (rtos (+ (atof (get_tile "sl1")) (atof (get_tile "sl2")))))
  )
    (new_dialog "test" (setq dcl_id (load_dialog "test.dcl")))
  (action_tile "sl1" "(sumfunc)")
  (action_tile "sl2" "(sumfunc)")
  (action_tile "done" "(done_dialog 0) (unload_dialog dcl_id)")
  (start_dialog)
)

Разумеется, здесь все до предела упрощено.

Re: Помогите создать диалоговое окно

Впрочем, функцию можно и целиком прописать в action_tile

(defun test (/ dcl_id)
    (new_dialog "test" (setq dcl_id (load_dialog "test.dcl")))
  (action_tile "sl1" "(set_tile \"sum\" (rtos (+ (atof (get_tile \"sl1\")) (atof (get_tile \"sl2\")))))")
  (action_tile "sl2" "(set_tile \"sum\" (rtos (+ (atof (get_tile \"sl1\")) (atof (get_tile \"sl2\")))))")
  (action_tile "done" "(done_dialog 0) (unload_dialog dcl_id)")
  (start_dialog)
)

Re: Помогите создать диалоговое окно

спасибо щас опробую

Re: Помогите создать диалоговое окно

получилось примного благодарен
я незнал что можно из (action_tile  функцию вызывать
век живи век учись