Страница 1 из 1

[РЕШЕНО] Как в коде изменять properties?

СообщениеДобавлено: Пн ноя 02, 2009 2:37 pm
Yvgen
Как в ананас скрипте, изменить в коде главного модуля например:
задать для Button_edit на форме Элемента Справочника "Товары" свойство enabled=False

Re: Как в коде изменять properties?

СообщениеДобавлено: Пн ноя 02, 2009 3:38 pm
Yvgen
Код: Выделить всё
    var bOk = Widget("ok");
    bOk.enabled ="false";

Но это в модуле формы.
А как изменять из глобального модуля?
Хотим сделать разграничение интерфейса.
Типа при включении часть кнопок не доступна, потом после определенного действия пользователя кнопки становятся доступны.

Re: Как в коде изменять properties?

СообщениеДобавлено: Ср ноя 04, 2009 11:38 am
antares0
Yvgen писал(а):
Код: Выделить всё
    var bOk = Widget("ok");
    bOk.enabled ="false";

Но это в модуле формы.
А как изменять из глобального модуля?
Хотим сделать разграничение интерфейса.
Типа при включении часть кнопок не доступна, потом после определенного действия пользователя кнопки становятся доступны.

Сама форма и ее элементы появляются в реальном мире только в момент открытия этой самой формы. Поэтому глобальный модуль сам по себе о них ничего знать не может. Но вы можете передать ссылку на кнопку (bOk в вашем примере) или на объект формы (this в моделе формы, далее this_this.Widget("ok") ) вызывая из формы функцию или метод глобального модуля.
Может лучше будет заранее выключать кнопки в дизайнере, а програмно их именно включать?
P.S. properties по русски - свойства

Re: Как в коде изменять properties?

СообщениеДобавлено: Ср ноя 04, 2009 1:50 pm
Yvgen
antares0 писал(а):
Yvgen писал(а):
Код: Выделить всё
    var bOk = Widget("ok");
    bOk.enabled ="false";

Но это в модуле формы.
А как изменять из глобального модуля?
Хотим сделать разграничение интерфейса.
Типа при включении часть кнопок не доступна, потом после определенного действия пользователя кнопки становятся доступны.

Сама форма и ее элементы появляются в реальном мире только в момент открытия этой самой формы. Поэтому глобальный модуль сам по себе о них ничего знать не может. Но вы можете передать ссылку на кнопку (bOk в вашем примере) или на объект формы (this в моделе формы, далее this_this.Widget("ok") ) вызывая из формы функцию или метод глобального модуля.
Может лучше будет заранее выключать кнопки в дизайнере, а програмно их именно включать?
P.S. properties по русски - свойства

Понятно, что форма и ее элементы появляются в момент открытия!
Но свойства (те которые заданы в дизайнере) ведь есть.
По идее, их можно переопределять как то.

Re: Как в коде изменять properties?

СообщениеДобавлено: Ср ноя 04, 2009 6:02 pm
antares0
Yvgen писал(а):Понятно, что форма и ее элементы появляются в момент открытия!
Но свойства (те которые заданы в дизайнере) ведь есть.
По идее, их можно переопределять как то.

А может стоить рассказать о задаче поподробнее? Если это не военно-комерческая тайна конечно, а то у вопроса вылазят странные подробности и непонятные дебри.
Теперь о дебрях.
Свойства есть ведь не просто сами по себе. Они описываются классом, но конкретных свойств кокретного объекта которые можно поменять еще нет.
Когда на форму добавляют элемент, дизайнер читает из метаданных класса (на самом деле компоненты, но это не принципиально) список свойств и их умолчальные значения. И записывает все это плюс ваши правки в метаданные бизнес-схемы. Но самих объектов то еще нет. А они будут созданы вместе с всеми своими свойствами на основе метаданых при открытии формы. В дизайнере показывается не сам виджит, а объект метаданых описывающий его.
У формы есть метод on_formstart, который вызывается до показа формы. Из него можно вызвать функции глобального модуля необходимые для аутенфикаии и авторизации пользователя и при успешнои их прохождении вызвать функцию разблокировки необходимых элементов. Если же нужно разблокировать интерфейс по событию вне этой формы (прямому разрешеню другого оператора напрмер), то в on_formstart добавляется регистрация этой формы как я показывал в предыдущем сообщении.

Re: Как в коде изменять properties?

СообщениеДобавлено: Чт ноя 05, 2009 3:53 pm
Yvgen
И так, у меня есть:
Форма 1, на этой форме Кнопка.
Я дизайнере я задал ей свойство Enabled = true.
При появление каждый раз формы, кнопка всегда доступна.
Далее есть еще одна форма 2 и модуль.
Так вот, я хочу, что бы при выполнении определенного действия на этой форме 2,
свойство Формы 1 Enabled = true менялось на False.
Т.е. то, что я определелил в дизайнере, я хочу переопределить. Вот и все.

Re: Как в коде изменять properties?

СообщениеДобавлено: Чт ноя 05, 2009 8:28 pm
antares0
Код: Выделить всё
//Глобальный модуль
var slave_form="";
function registration (form) {
   slave_form = form;
}
function unregistration () {
   slave_form =  "";
}
functon block_on_slave_form () {
   if slave_form
      then {slave_form.block()};
}

Код: Выделить всё
//Модуль Форма 1
var but = "";
function on_formstart () {
   but = Widget("ok");
   registration(this);
}
function block () {
   but.enabled = false;
}
function on_formstop () {
   unregistration();
}

Код: Выделить всё
//Модуль форм 2
function do_block () {
   //вызывается при выполнении определенного действия
   block_on_slave_form();
}

Здесь я не учитываю возможность того, что "Форма 1" может быть не в единственном экземпляре.