Перейти к содержанию

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


Рекомендуемые сообщения

Добрый день!

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

у функции есть параметры 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);

}

Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

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

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

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

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

Изменено пользователем doctorraz
Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

 

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

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

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

Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

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

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

Изменено пользователем doctorraz
Ссылка на сообщение
Поделиться на другие сайты

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

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

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

 

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

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

То бишь эта функция может использоваться в другом объекте (№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;

}

 

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

Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

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

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

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

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

Ссылка на сообщение
Поделиться на другие сайты

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

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

 

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

 

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

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

 

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

Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

Ссылка на сообщение
Поделиться на другие сайты
  • 3 месяца спустя...

Вопрос :

 

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

 

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

Ссылка на сообщение
Поделиться на другие сайты

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

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

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

Изменено пользователем doctorraz
Ссылка на сообщение
Поделиться на другие сайты

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

SVersion = 2;
ObjectDescription = "";

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

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

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

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

Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

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

Ссылка на сообщение
Поделиться на другие сайты

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

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

К вечеру дошел смысл твоего сарказма))) Если б не этот "баг" то для переменных маркеров и шаблонов приходилось бы явно объявлять параметры в 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 остался еще открытым вопрос по присваиванию значений полям маркера/формы/группы из скрипта, пока не получилось, но так и не понял возможно ли в принципе((

Изменено пользователем doctorraz
Ссылка на сообщение
Поделиться на другие сайты
  • 8 месяцев спустя...

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

Form1.editbox.Enabled = FALSE;

 

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

думал это

Form1.checkbox.Checked = FALSE;

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

 

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

Ссылка на сообщение
Поделиться на другие сайты

Form1.checkbox.Value=FALSE;

или

Form1.checkbox.Value=0;

скрыть

Form1.checkbox.Visible=0;

Ссылка на сообщение
Поделиться на другие сайты

Form1.checkbox.Value=FALSE;

или

Form1.checkbox.Value=0;

скрыть

Form1.checkbox.Visible=0;

 

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

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

Изменено пользователем dromandon
Ссылка на сообщение
Поделиться на другие сайты

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

Изменено пользователем dromandon
Ссылка на сообщение
Поделиться на другие сайты

читай до тех пор пока не поймешь http://forum.nanocad.ru/index.php?showtopic=7114&view=findpost&p=37837

Ссылка на сообщение
Поделиться на другие сайты

таки чекбоксу присвой переменную и работай с ней

Ссылка на сообщение
Поделиться на другие сайты

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

Ссылка на сообщение
Поделиться на другие сайты

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

 

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

Ссылка на сообщение
Поделиться на другие сайты

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

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

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

Изменено пользователем doctorraz
Ссылка на сообщение
Поделиться на другие сайты

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

 

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

Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Расскажите друзьям

    Нравится Официальный форум компании Нанософт? Расскажите друзьям!
×
×
  • Создать...