DOORS DXL: невозможно работать с глобальной кнопкой // переключение управления активно / неактивно - PullRequest
1 голос
/ 06 марта 2019

Хорошо, я нашел полезный ответ о том, как включить / отключить (активный / неактивный) элемент управления с помощью DXL, но теперь я чувствую, что у меня есть проблема, которую я не понимаю, как-то относительно порядка вкакие функции загружены.

Проблема: Когда я создаю диалог, у меня есть две кнопки, одна кнопка неактивна вскоре после создания.Когда я нажимаю кнопку 1, я хочу, чтобы кнопка 2 стала активной, но вместо этого я получаю сообщение о том, что кнопка 2 не назначена, что странно, потому что она была объявлена ​​глобально и настроена в основной функции.Итак, что я делаю не так ??

Вот мой код ...

pragma runLim,10000

DB main_dialog = null
DBE main_button1 = null
DBE main_button2 = null

void toggle_visibility_other_button(DBE dbe)
{
    active(main_button2)
}

void do_something(DBE dbe)
{
    infoBox "UNDER CONSTRUCTION"
}

void main_function()
{   
    main_dialog = create("My GUI", styleCentered)
    main_button1 = button(main_dialog, "Button 1", toggle_visibility_other_button)
    main_button2 = button(main_dialog, "Button 2", do_something)

    inactive(main_button2)

    realize(main_dialog)
    setSize(main_dialog, 300, 150)
}

main_function

1 Ответ

1 голос
/ 07 марта 2019

Хорошо!

Это довольно простая проблема, но я собираюсь уделить секунду, чтобы объяснить, что происходит.

В DOORS есть 2 способа завершить диалоговое окнои отобразите его пользователю:

show(DB box)

или

block(DB box)

Первый отображает диалоговое окно, но остальная часть интерфейса DOORS все еще «активна».Никакой код после 'show' не будет выполнен - ​​все должно быть в обратных вызовах, встроенных в диалоговое окно.

Второй отображает диалоговое окно, но останавливает остальную часть интерфейса DOORS, пока диалоговое окно не будетзакрыт или вызывается функция разблокировки.Как только вы закроете диалоговое окно, программа DXL продолжит работу.

Теперь в вашей программе вы использовали команду «реализовать».Это используется для основной настройки визуальных элементов диалогового окна, но на самом деле неправильно настраивает кнопки и подфункции.Затем пришел ваш setSize и установил диалоговое окно для отображения, но вам все еще нужно шоу - см. Следующее.

//Show example
pragma runLim,10000

DB main_dialog = null
DBE main_button1 = null
DBE main_button2 = null

void toggle_visibility_other_button(DBE dbe)
{
    active(main_button2)
}

void do_something(DBE dbe)
{
    infoBox "UNDER CONSTRUCTION"
}

void main_function()
{   
    main_dialog = create("My GUI", styleCentered)
    main_button1 = button(main_dialog, "Button 1", toggle_visibility_other_button)
    main_button2 = button(main_dialog, "Button 2", do_something)

    inactive(main_button2)

    realize(main_dialog)
    setSize(main_dialog, 300, 150)
    // Added This
    show(main_dialog)
    print "Ran it!"
}

main_function

И пример блока:

//block example
pragma runLim,10000

DB main_dialog = null
DBE main_button1 = null
DBE main_button2 = null

void toggle_visibility_other_button(DBE dbe)
{
    active(main_button2)
}

void do_something(DBE dbe)
{
    infoBox "UNDER CONSTRUCTION"
}

void main_function()
{   
    main_dialog = create("My GUI", styleCentered)
    main_button1 = button(main_dialog, "Button 1", toggle_visibility_other_button)
    main_button2 = button(main_dialog, "Button 2", do_something)

    inactive(main_button2)

    realize(main_dialog)
    setSize(main_dialog, 300, 150)
    // Added This
    block(main_dialog)
    print "Ran it!"
}

main_function

Естьнекоторые функции DOORS, которые потребуют, чтобы вы выполнили функцию реализа () для настройки элементов диалогового окна (до вызова show () или блока ()) - например, добавление столбцов в DBE просмотра списка.Я не уверен, что когда-либо видел полный список таких ситуаций.

Дайте мне знать, если это поможет!

...