Jump to content

Пользовательские функции в параметрических объектах


Recommended Posts

Добрый день!

Пытаюсь создать пользовательскую функцию в параметрическом объекте (в скрипте).

у функции есть параметры a, b, c

результат функции = а/(b*c)

 

a, b c - нужны только внутри функции как входные параметры.

 

Как сделать? Я сделал так, не работает:

function FunTok

{

Protected(a, b, c);

if (b==220||b==230) FunTok=a/(b*c); else FunTok=a/(1.73*b*c);

}

  • Like 1
Link to comment
Share on other sites

так и не будет работать

1. переменные объявляются в секции ActHeader

2.стандартные функции срабатывают по событию

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

==================

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

==============

имхо стандартных функций как правило хватает за глаза..

PS вы бы объектик конкретный /упрощенный приложили что не получается... а то обсуждаем сферического коня в вакууме

Edited by doctorraz
  • Like 1
Link to comment
Share on other sites

Пример потом.

 

img-2016-02-08-13-45-18.png

 

 

1. переменные объявляются в секции ActHeader

PS вы бы объектик конкретный /упрощенный приложили что не получается... а то обсуждаем сферического коня в вакууме

Само собой :-)

  • Like 1
Link to comment
Share on other sites

Выбор напряжения это для простоты понимания.

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

Так возможно или не возможно?

Я переменные не описываю в секции ActHeader потому что они нужны только внутри функции.

Link to comment
Share on other sites

Так возможно или не возможно?

прежде чем давать ответ... хотелось бы посмотреть на сферического коня.. или хотя бы сИкретную идею (что хочется получить) упрощенно, что бы никто украсть не смог.

Я переменные не описываю в секции ActHeader потому что они нужны только внутри функции.

как они туда попадают? внутрь функции? из формы, с чертежа, из таблицы параметров, из базы данных, ввод в свойства напрямую, силой мысли???

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

коль неохота учить матчасть по справке то вот в популярной форме:

переменные, еще про них

Edited by doctorraz
  • Like 1
Link to comment
Share on other sites

Ну они конечно есть в скрипте.

Затея такая: есть ВРУ с отходящими линиями.

циклом перебрать все линии и посчитать ток.

 

Конечно все решается копировать/вставить, но мне кажется это не камильфо.

Т.е. пользовательская функция нужна чтобы уйти от конкретного написания глобальных имен переменных.

То бишь эта функция может использоваться в другом объекте (№2), где нет таких переменных, и придется переписывать кучу кода меняя его под переменные объекта №2.

А так ты скопировал функцию и считаешь ток уже кабельной линии или еще где.

 

описание пользовательской функции

User_Function (a,b,c)

{.....

.....

User_Function=a*b+c

.....

}

Переменные a,b,c нужны только в функции User_Function

 

while (i

{Tok=UserFunction(P,U,cos);

i=i+1;

}

 

Так в параметрическом объекте не возможно?

Link to comment
Share on other sites

вру с отходящими линиями это что?? один парам объект или несколько?? если один то как он размножается?? массивом?

парам объект который будет все это считать он кто??

я так понимаю вывод результатов будет в таблицу СПДС???

может проще все считать в ней?

=================

я не уверен, что мехвизард поддерживает передачу параметров между функциями , все таки это не полноценный язык программирования.

=============

опять же есть вариант все это реализовать на VBA с выводом результатов в таблицу СПДС

PS правильный вопрос 99% ответа

Link to comment
Share on other sites

ВРУ - вводно-распределительное устройство.

у него один вводной автомат и несколько отходящих.

 

да суть даже не в этом.

 

Удобство функций в том что они однообразны и упрощают логику скрипта.

Чем копировать кучу строк и контролировать - "Везде ли исправил имена переменных" - удобно вызвать функцию Ток (Мощность, Напряжение, Косинус) и все. Логика функции сама правильно обработает входные переменные.

 

Изменил код функции и не надо переписывать и вспоминать где еще использовал выражение вычисления тока.

Link to comment
Share on other sites

еще раз повторю это не полноценный язык программирования. (пусть гуру меня поправят)

==============

как вариант что бы не править "функцию"...

в начале скрипта объявлять переменные (этой функции) и перед вызовом функции присваивать им нужные значения.

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

  • Like 1
Link to comment
Share on other sites

  • 3 months later...

Вопрос :

 

Как предохранить «Шаблон выноски» от случайного редактирования связанных значений, оставив, при этом возможность ручного редактирования.

 

1. Штатными средствами создаём
«Шаблон выноски»
и сохраняем его в базе объектов. Размещаем элементы управления связанные с первой и второй строкой выноски и устанавливаем
«CheckBox»
[5];

 

image001.png

 

2. Находим шаблон выноски в базе и открываем его в
«Мастере объектов»
;

 

image002.png

 

3. В редакторе открываем форму на редактирование и задаем имя формы
«Form1»

Имеет смысл всегда давать элементам управления осмысленные имена.

 

image003.png

 

4. Переходим в редактирование скрипта, создаём переменную.

 

image004.png

 

5. Теперь создаём функцию, которая при изменения элемента управления
“CheckBox”
, будет управлять переменной
«checkerEdit»
, объявленной выше в скрипте;

 

image005.png

 

6. Открываем диалог редактирования формы. Выбираем элемент управления «CheckBox» и назначаем ему переменную
«checkerEdit»
;

 

image006.png

 

7. Далее указываем функцию
«onCheckBox»
на событие
«на нажатие»
. Все пользовательские функции скрипта доступны в выпадывающем списке
«Свойств»
элементов управления формы;

image008.png

 

8. Остаётся только запретить редактирование нужного элемента управления, соответствующего первой строке выноски, с помощью еще одной пользовательской функции;

image009.png

 

9. И установить эту функцию на событие открытия диалога;

image010.png

 

image007.jpg

Шаблон выноски со скриптом.zip

  • Like 1
Link to comment
Share on other sites

Мы с тобой уже обсуждали эту тему...

Стандартные методы не работают в шаблонах маркерах и группах!!!

ActHeader не исключение

По крайней мере в СПДС10

А как было бы здорово(((

Я бы тогда сделал суперпупермаркервсехвременинародов))

SVersion = 2;
ObjectDescription = "";

//function ActHeader Стандартные функции не работают в шаблонах маркерах и группах!!! Только пользовательские.
//{
//Public(checkerEdit, "переключатель разрешения поля ввода");// объявление переменной связанной с контролом checkBox в редакторе форм.
//}

function onOpenForm()// Событие на открытие диалога
{
Form1.editbox.Enabled = FALSE;
Form1.checkbox.Value = FALSE;
}

function onCheckBox()// Установка свойства на поле ввода
{
Form1.editbox.Enabled = Form1.checkbox.Value;
}

================

PS посмотрел видео, в нано работает... попробуй свой шаблон в АК+СПДС))) проверил на другом АК работает, но ActHeader не влияет.

Шаблон выноски со скриптом.zip

Edited by doctorraz
  • Like 1
Link to comment
Share on other sites

так сохраняет значение

SVersion = 2;
ObjectDescription = "";

function onOpenForm {
   Form1.editbox.Enabled = Form1.checkbox.Value;
}

function onCheckBox {
   Form1.editbox.Enabled = Form1.checkbox.Value ;
}

обязательное условие checkbox должна быть присвоена любая переменная.

Инициализируется при первом изменении и потом можно менять из свойств

  • Like 1
Link to comment
Share on other sites

обязательное условие checkbox должна быть присвоена любая переменная.

 

Блин, ты опять "БАГ" нашёл :-) :-) :-) :-) :-) :-) :-) :-) :-) :-) :-)

 

img-2016-05-13-09-16-18.png

Link to comment
Share on other sites

Блин, ты опять "БАГ" нашёл :-) :-) :-) :-) :-) :-) :-) :-) :-) :-) :-)

я это, как баг не воспринимаю, грабельки которые легко обойти))) опять же коль никто не пользуется, значит никому не надА))

К вечеру дошел смысл твоего сарказма))) Если б не этот "баг" то для переменных маркеров и шаблонов приходилось бы явно объявлять параметры в ActHeader, а так они хоть вроде как локальные (если по правилам), но ведут себя как глобальные (сохраняют значения после закрытия скрипта)

Очень удобно.

============================

В продолжение нашего разговора о работе стандартных методов скрипта в маркерах шаблонах и группах...

Провел небольшое исследование, возможно кому пригодится, но я себе выводы сделал, на тему, что возможно, а что нет..

итак:

  1. В маркерах и группах стандартные методы не работают
  2. В шаблонах при наличии формы работают только методы ActHeader и OnInitialization

Конечно методы можно принудительно вызвать в скрипте (по событию формы или ее элемента), но в этом случае они ничем не отличаются от пользовательских ((((

Мои слова достаточно легко проверить запустив IDM и введя этот скрипт:

 

SVersion = 2;
ObjectDescription = "";
function ActHeader
{
ShowValue ("ActHeader ",);
}
function OnInitialization
{
ShowValue ("OnInitialization ",);
}
function OnMakeParameters
{
ShowValue ("OnMakeParameters ",);
}
function OnMoveGripPoint
{
ShowValue ("OnMoveGripPoint ",);
}
function OnChangeParameters
{
ShowValue ("OnChangeParameters ",);
}
function OnUpdateGraphics
{
ShowValue ("OnUpdateGraphics ",);
}
function OnDialog
{
ShowValue ("OnDialog ",);
}
function OnDialogChanged
{
ShowValue ("OnDialogChanged ",);
}
function OnConnect
{
ShowValue ("OnConnect ",);
}
function BeforeConnect
{
ShowValue ("BeforeConnect ",);
}
function OnInitSelect
{
ShowValue ("OnInitSelect ",);
}
function OnSelectParam
{
ShowValue ("OnSelectParam ",);
}
function OnAddObject
{
ShowValue ("OnAddObject ",);
}
function SetGripPoint
{
ShowValue ("SetGripPoint ",);
}
function OnMenu
{
ShowValue ("OnMenu ",);
}

 

 

============

PS остался еще открытым вопрос по присваиванию значений полям маркера/формы/группы из скрипта, пока не получилось, но так и не понял возможно ли в принципе((

Edited by doctorraz
Link to comment
Share on other sites

  • 8 months later...

А можете выложить список функций типа:

Form1.editbox.Enabled = FALSE;

 

Просто, сейчас делаю, что на radiobutton у меня некоторые editbox блокируются в форме, а другие становятся доступны, но ещё есть checkbox'ы, которые хотелось бы, чтобы выключались (снималась галочка).

думал это

Form1.checkbox.Checked = FALSE;

Но, почему-то, не работает..

 

Ну и на будущее хотелось бы просто знать эти функции =)

Link to comment
Share on other sites

Form1.checkbox.Value=FALSE;

или

Form1.checkbox.Value=0;

скрыть

Form1.checkbox.Visible=0;

 

Form1.checkbox.Visible=0 - работает, а вот Form1.checkbox.Value=FALSE/0 отказывалось работать..

На чекбоксе была переменная G1, прописал просто G1=1 - сработало =)

Edited by dromandon
Link to comment
Share on other sites

Form1.checkbox.Value=FALSE;

или

Form1.checkbox.Value=0;

скрыть

Form1.checkbox.Visible=0;

 

Form1.checkbox.Visible=0 - работает, а вот Form1.checkbox.Value=FALSE/0 отказывалось работать..

На чекбоксе была переменная G1, прописал просто G1=1 - сработало =)

 

Хотя нет. Вообще бред какой-то происходит... Логики происходящего как не ищу, не вижу..

вот объект.

Выбираю радиобаттон - "для падсчёта в п.м." жмакаю по галочки справа (доборные шаги),

Потом переключаюсь на радиобаттон "Если распределено по длине" на котором скрипт

 

function onRButton2()

{

 

Form.editbox7.Enabled = FALSE;

Form.editbox21.Enabled = FALSE;

Form.editbox22.Enabled = FALSE;

Form.editbox39.Enabled = FALSE;

 

Form.editbox8.Enabled = TRUE;

Form.editbox9.Enabled = TRUE;

Form.editbox.Enabled = TRUE;

Form.editbox1.Enabled = TRUE;

Form.editbox2.Enabled = TRUE;

Form.editbox3.Enabled = TRUE;

Form.editbox10.Enabled = TRUE;

Form.editbox19.Enabled = TRUE;

 

G1 = 0;

V1 = 0;

}

 

G1 и V1 - переменные на галочках

 

Ничего не происходит. Щёлкую по нему ещё раз - галочки снимаются. Но при этом захожу в редактор свойств маркера G1 и V1 по прежнему равны 1, будто галочки стоят. И поля, за блокировку которых отвечают снятые голочки - не заблокированы, опять же, будто галки стоят на месте.

Дальше круче. Жму окей, закрываю редактор свойст маркера - объект закрываются - захожу в него - галочки стоят, но поля, которые должны быть разблокированы, когда галочки выставлены - заблокированы.

Идём дальше. Опять жму на "Если распределено по длине" мышкой дважды - галочки снимаются.

Потом жму на радиобаттон "отдельные стержни" у которого в скрипте вообще не прописано ничего про эти чекбатоны - появляются галочки.

*смайлик взрывающегося мозга*

АРМ.7z

Edited by dromandon
Link to comment
Share on other sites

и таки никто не понял с чем ты пытаешься работать? шаблон , маркер, параметрика, группа?

Link to comment
Share on other sites

и таки никто не понял с чем ты пытаешься работать? шаблон , маркер, параметрика, группа?

 

Маркер. В нём куча переменных, которые я потом вытаскиваю в таблицу и получаю готовую спецификацию.. Маркер со временем унифицирую, сейчас он вот в таком виде. Захотел привести в нормальный вид форму, чтобы не путаться где что включать и отключать, вот мучаюсь)

Link to comment
Share on other sites

разбирайся, как работает

это шаблон выноски... в маркере, тож должон взлететь

Шаблон выноски со скриптом.mcd.zip

Edited by doctorraz
Link to comment
Share on other sites

Вот тут пост #73 small2002 показывал управление видимостью контролов на форме маркера. Объект (маркер) у меня где-то есть, но фиг знает в какой редакции. У него спроси.

 

http://www.youtube.com/watch?v=la2glAZAQKg

  • Like 1
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

  • Tell a friend

    Love Официальный форум компании Нанософт? Tell a friend!
×
×
  • Create New...