Запрос информации у пользователя

Материал из K3-Macro
Макро | Создание макропрограмм | Переменные и выражения | Вызов из ZIP | Типовые параметры | Создание геом. объектов | Буфер обмена | Сценарии | Параметрические библиотеки | Геометрические характеристики | Атрибуты | Структурные объекты | Текстовые файлы | Системные параметры | Работа с файлами | Редактирование объектов | Удаление объектов | Размеры | Штриховка | Объект «Текст» | Камера | Работа с видом | Наборы параметров | Запрос информации у пользователя | Фильтры | Слои | Графы | Универсальные плоские объекты | Функции работы с системой | Функции работы с объектами сцены | Работа с динамически подключаемыми библиотеками | Функции работы с массивами | Работа со строками | Математические функции | Работа с файлами DBF dBASE IV | Унифицированная работа с базами данных | Вычисление выражений | Присвоение имени объекту | Откатка и восстановление команд | Изменение режима трассировки макропрограмм | Вызов внешних приложений и задач | Проверка условия | Проверка типа переменной | Установкв статуса вывода сообщений | Выдача системного сообщения | Выбор объектов | Версия системы | Информация о системе | Проверка принадлежности к списку | Помещение строки в буфер команд | Получение метапути | Установка курсора ожидания | Мебельные команды и функции для макропрограммирования‎

Команды запроса информации у пользователя во время выполнения макропрограмм делятся на два основных класса:

  • Запрос информации при помощи диалоговых окон
  • Запрос информации без диалоговых окон. Как правило, это - запрос геометрической информации, но не только.

Частным случаем запроса является запрос указания объекта. Для этого используется команда objident.

Запрос геометрической информации[править | править код]

Запрос геометрической информации осуществляется по команде get. Команда имеет несколько режимов работы, которые представлены ниже.

Ввод точки[править | править код]

get <Prompt> [expand] point {missing | bpoint | <FPoint>} <VarY> <VarY> <VarZ> [done] <Point>

Команда осуществляет запрос с подсказкой, заданной текстовой строкой <Prompt>, координат точки и помещает координаты точки <Point> (X, Y, Z) в переменные <VarY> <VarY> <VarZ> соответственно. По умолчанию запрос осуществляется с помощью "резинового" отрезка от точки <FPoint> до выбранной пользователем точки. Если указан ключ missing, то "резиновый" отрезок отсутствует и точка задается исключительно курсором K3. Если указан ключ bpoint, то "резиновый" отрезок тянется от базовой точки.

Необязательный ключ expand позволяет осуществить возможность отказаться от ввода точки вводом ключевого слова done или выбором пункта "Закончить" в контекстном меню. Остановки макропрограммы при этом не происходит. В переменные <VarY> <VarY> <VarZ> в этом случае помещаются величины 1е35 (1035), которые говорят о том, что от ввода отказались.

Нажатие клавиши Esc отменяет ввод и останавливает выполнение макропрограммы.

Если необходимо, чтобы запрос координат точки происходил в интерактивном режиме, необходимо вместо координат <Point> ввести выход в интерактивный режим — : (двоеточие).

get "Правая стойка" point missing  f[1] f[2] f[3] near :
get "Левая стойка" point f[1] f[2] f[3] s[1] s[2] s[3] near :

где near — включение привязки к объекту для ввода точки.

Ввод вектора[править | править код]

get <Prompt> vector {bpoint | <FPoint>} <VarY> <VarY> <VarZ> [done] <Point>

Команда осуществляет запрос с подсказкой, заданной текстовой строкой <Prompt>, координат вектора (приращения от точки <FPoint> или от базовой точки (bpoint)) и помещает координаты вектора <Point> (X, Y, Z) в переменные <VarY> <VarY> <VarZ> соответственно. Запрос осуществляется с помощью "резинового" отрезка от точки <FPoint> до выбранной пользователем точки. Если указан ключ bpoint, то "резиновый" отрезок тянется от базовой точки.

Необязательный ключ expand позволяет осуществить возможность отказаться от ввода точки вводом ключевого слова done или выбором пункта "Закончить" в контекстном меню. Остановки макропрограммы при этом не происходит. В переменные <VarY> <VarY> <VarZ> в этом случае помещаются величины 1е35 (1035), которые говорят о том, что от ввода отказались.

Нажатие клавиши Esc отменяет ввод и останавливает выполнение макропрограммы.

Если необходимо, чтобы запрос координат вектора происходил в интерактивном режиме, необходимо вместо координат <Point> ввести выход в интерактивный режим — : (двоеточие).

get "Стойка" point missing  f[1] f[2] f[3] near :
get "Сдвиг стойки" vector f[1] f[2] f[3] s[1] s[2] s[3] :

Ввод расстояния[править | править код]

get <Prompt> [expand] distance [expand] {bpoint | <FPoint>} <VarD> [done] <Point>

Команда осуществляет запрос с подсказкой, заданной текстовой строкой <Prompt>, расстояния от точки <FPoint> или от базовой точки (bpoint) до точки <Point> и помещает его в переменную <VarD>. Запрос осуществляется с помощью "резинового" отрезка от точки <FPoint> до выбранной пользователем точки. Если указан ключ bpoint, то "резиновый" отрезок тянется от базовой точки.

Необязательный ключ expand позволяет осуществить возможность отказаться от ввода точки вводом ключевого слова done или выбором пункта "Закончить" в контекстном меню. Остановки макропрограммы при этом не происходит. В переменную <VarD> в этом случае помещается величина 1е35 (1035), которая говорит о том, что от ввода отказались.

Нажатие клавиши Esc отменяет ввод и останавливает выполнение макропрограммы.

Если необходимо, чтобы запрос расстояния происходил в интерактивном режиме, необходимо вместо координат <Point> и/или <FPoint> ввести выход в интерактивный режим — : (двоеточие).

get "Стойка" point missing  f[1] f[2] f[3] near :
get "Расстояние до полки" distance f[1] f[2] f[3] d near :

где near – включение привязки к объекту для ввода точки.

Ввод угла[править | править код]

get <Prompt> [expand] angle [expand] {bpoint | <FPoint>} <VarA> [done] <Point>

Команда осуществляет запрос с подсказкой, заданной текстовой строкой <Prompt>, угла (в градусах) с центром в точке <FPoint> или в базовой точке (bpoint) и направлением лучей - первого - вдоль положительного направления оси X видовой системы координат (ВСК), второго - в сторону точки <Point> и помещает его в переменную <VarA>. Запрос осуществляется с помощью "резинового" угла с описанной выше вершиной и лучами. Если указан ключ bpoint, то вершиной "резинового" угла является базовая точка.

Необязательный ключ expand позволяет осуществить возможность отказаться от ввода точки вводом ключевого слова done или выбором пункта "Закончить" в контекстном меню. Остановки макропрограммы при этом не происходит. В переменную <VarA> в этом случае помещается величина 1е35 (1035), которая говорит о том, что от ввода отказались.

Нажатие клавиши Esc отменяет ввод и останавливает выполнение макропрограммы.

Если необходимо, чтобы запрос угла происходил в интерактивном режиме, необходимо вместо координат <Point> и/или <FPoint> ввести выход в интерактивный режим — : (двоеточие).

Запрос имени файла[править | править код]

get <Prompt> filename <TypeMask> <StartPath> {yes | no} <VarF>

Сохранение файла
Открытие файла

Команда запрашивает имя файла в диалоговом окне с заголовком окна <Prompt>, маской типов файлов <TypeMask>, начальным путем для поиска файла <StartPath> и записывает полное имя файла в переменную <VarF>. Ключи yes и no определяют, обязательно или нет должен существовать запрашиваемый файл. В первом случае запрос аналогичен запросу на открытие файла, во втором случае - на запись.

Маска типов файлов <TypeMask> представляет собой строку следующей структуры:

<PromptForExt1>|<Ext1>|<PromptForExt2>|<Ext2>|<PromptForExt3>|<Ext3>

где <PromptForExtN> - подсказка типа файла для маски <ExtN>.

Символ | (вертикальная черта) служит разделителем типов файлов.

Данный пример осуществляет запрос имени файла на сохранение:

get "Имя файла конфигурации:" 
filename 
"Файл умолчаний на материалы (.pkm)|*.pkm|Все файлы|*.*" 
ProtoPath no idcfg ;

А этот пример осуществляет запрос имени файла на открытие:

get "Имя файла конфигурации:" 
filename 
"Файл умолчаний на материалы (.pkm)|*.pkm|Все файлы|*.*" 
ProtoPath yes idcfg ;


Запрос имени папки[править | править код]

Запрос имени папки

get <Prompt> folder <StartFolder> <StartPath> <VarF>

Команда запрашивает имя папки в диалоговом окне с заголовком окна <Prompt>, папкой по умолчанию <StartFolder> и записывает полное имя папки в переменную <VarF>.

Пример:

get "Имя папки проектов:"
folder
"c:\Program Files\Geos\K3-Мебель ПКМ 7.4"
idcfg ;




Диалоговый ввод выражения[править | править код]

Команда getvar осуществляет диалоговый ввод выражения.

getvar <Prompt> [default <DefaultExpression>] <Expression>

Команда осуществляет ввод выражения <Expression> с возможностью задания умолчания <DefaultExpression> и подсказкой <Prompt>. Значение по умолчанию может быть в свою очередь тоже выражением. Выражения могут быть арифметическим, логическим или строковым.

Если необходимо, чтобы запрос выражения происходил в интерактивном режиме, необходимо вместо выражения <Expression> ввести выход в интерактивный режим — : (двоеточие).

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

Пример:

#v1 getvar "Введите высоту" :
Введите высоту:26
=v1
26
#v1 getvar "введите высоту" :
Введите высоту:2+2*2
=v1
6
#v1 getvar "Введите артикул" default "Art" :
Введите артикул:"Art"

Если нажать на Enter, то переменной v1 присвоится значение по умолчанию "Art". Но можно ввести и любое другое значение.

Выбор в диалоговом окне[править | править код]

alternative <Caption> <Style> <Params> done

Команда alternative осуществляет выбор из возможных альтернатив или вывода информационного окна. Команда имеет несколько вариантов работы. Перед вызовом следует описать переменную (с помощью символа #), в которую будет помещен результат выполнения команды. Возможны следующие варианты стиля (<Style>) команды alternative:

  • keys – выбор по ключам
  • list – выбор из списка
  • msgbox – выбор из набора кнопок
  • picbox – выбор из набора картинок
  • info – вывод многострочного информационного окна

В зависимости от выбранного стиля анализируются параметры <Params> команды.

Выбор по ключам[править | править код]

alternative keys
Результат

#<Var> alternative <Prompt> keys [default <DefKeynum>] <Key1> <Key2>...<Key10> done

Команда формирует контекстное меню, возникающее в правом нижнем углу экрана системы (либо, появляющееся по нажатию правой кнопки мыши), из которого возможен выбор нужного ключа. Текстовая строка <Prompt> задает подсказку выбора. Необязательный ключ default <DefKeynum> позволяет задать номер ключа по умолчанию (по нажатию клавиши Enter). Текстовые строки <Key1> <Key2>...<Key10> задают описание ключей. Максимум может быть 24 ключа. Переменная <Var> принимает значение, равное номеру выбранного ключа.

Пример:

#aaa alternative "Выберите ключ" 
keys default 2 
"Ключ1" 
"Ключ2" 
"Ключ" 
"Ни одного ключа" 
done : ;
if (aaa==1)
{
  putmsg("Выбран первый ключ");
}
else
{
  putmsg("Выбран не первый ключ");
}

Выбор по списку[править | править код]

#<Var> alternative <Caption> list [default <DefListnum>] [text [left | right | center] <Str1> <Str2>... <StrN> done] <List1> <List2>...<ListN> done

Команда формирует диалоговое окно с меню с заголовком <Caption>, позволяющее осуществить выбор из списка, представленного строками <List1> <List2>...<ListN>. Необязательный ключ default <DefListnum> позволяет задать номер элемента списка, установленного по умолчанию. Необязательный ключ [text [left | right | center] <Str1> <Str2>... <StrN> done построчно формирует пояснительный текст в диалоговом окне с выравниванием по левом краю (left), по правому краю (right) или по центру (center). Переменная <Var> принимает значение, равное номеру выбранного элемента списка или ноль, если была нажата кнопка "Отмена".

alternative list

Пример:

#aaa alternative 
"Выберите элемент из списка" 
list default 2 
text center 
"Пояснительный текст строка 1" 
"Пояснительный текст строка 2" 
"Пояснительный текст строка 3" 
done 
"Элемент списка 1" 
"Элемент списка 2" 
"Элемент списка 3" 
"Элемент списка 4" 
done;



Выбор из набора кнопок[править | править код]

#<Var> alternative <Caption> msgbox [picture <Pic>] [beep <Beep>] [default <Defnum>] [text [left | right | center] <Str1> <Str2>... <StrN> done] [vertcal] <Button1> <Button2>...<Button10> done

Команда формирует диалоговое окно с кнопками с заголовком <Caption>, позволяющее осуществить выбор нажатием на нужную кнопку из списка названий кнопок, представленного строками <Button1> <Button2>...<Button10>. Можно задавать не более 24-х кнопок. Необязательный ключ default <DefButtonnum> позволяет задать номер кнопки, установленной по умолчанию. Необязательный ключ [text [left | right | center] <Str1> <Str2>... <StrN> done построчно формирует пояснительный текст в диалоговом окне с выравниванием по левом краю (left), по правому краю (right) или по центру (center). Необязательный ключ vertcal указывает на то, что кнопки будут располагаться вертикально, а не горизонтально, как по умолчанию. Переменная <Var> принимает значение, равное номеру выбранной кнопки.

Необязательный ключ picture задает номер картинки <Pic> для диалогового окна. Если номер картинки <Pic> равен нулю, или необязательный ключ picture не использовался, то картинка не выводится.

Возможные значения номера картинок представлены ниже.

Embim1.png <Pic> = 1 Embim2.png <Pic> = 2 Embim3.png <Pic> = 3 Embim4.png <Pic> = 4

Необязательный ключ beep <Beep> при отображении окна сообщения воспроизводит соответствующий системный сигнал (назначенный в Панели Управления, Звуки и аудиоустройства, закладка Звуки). Если ключ не употреблялся или использовался как beep 0, то сигнал не воспроизводится. Значение <Beep> должно быть в пределах от -1 до 4:

alternative msgbox (горизонтальное расположение кнопок)
alternative msgbox (вертикальное расположение кнопок)
  • -1 – сигнал по умолчанию
  • 0 – нет сигнала
  • 1 – сигнал, соответствующий Embim1.png
  • 2 – сигнал, соответствующий Embim2.png
  • 3 – сигнал, соответствующий Embim3.png
  • 4 – сигнал, соответствующий Embim4.png

Пример:

#aaa alternative
"Нажмите нужную кнопку" 
msgbox default 2 
text center 
"Пояснительный текст строка 1" 
"Пояснительный текст строка 2" 
"Пояснительный текст строка 3" 
done 
"Кнопка 1" 
"Кнопка 2" 
"Кнопка 3" 
"Кнопка 4" 
done;

Выбор из набора картинок[править | править код]

#<Var> alternative <Caption> picbox [default <DefPicturenum>] [text [left | right | center] <Str1> <Str2>... <StrN> done] <Caption1> <Picture1> <Caption2> <Picture2>... <CaptionN> <PictureN> done

Команда формирует диалоговое окно с картинками с заголовком <Caption>, позволяющее осуществить выбор из набора картинок с подписями под картинками <Caption1> <Caption2>... <CaptionN>, и файлами картинок <Picture1> <Picture2>... <PictureN> соответственно. Если файла с указанной картинкой не существует, то картинка выводится пустой. Необязательный ключ default <DefPicturenum> позволяет задать номер картинки, установленной по умолчанию. Необязательный ключ [text [left | right | center] <Str1> <Str2>... <Str1> done построчно формирует пояснительный текст в диалоговом окне с выравниванием по левом краю (left), по правому краю (right) или по центру (center). Переменная <Var> принимает значение, равное номеру выбранной картинки или ноль, если была нажата кнопка "Отмена"

Пример:

alternative picbox
defarrays altxt[9],altfl[9];
ProtoPath="C:\\";
altxt[1]="Стол письменный"
altxt[2]="Каркас шкафа"
altxt[3]="Стол компьютерный"
altxt[5]="Стол кухонный"
altxt[4]="Шкаф с наполнением"
altxt[6]="Шкаф c раздвижными дверьми"
altxt[7]="Шкаф угловой"
altxt[8]="Тумба под ТВ"
altxt[9]="Книжный шкаф"

altfl[1]=ProtoPath+"stol1.bmp"
altfl[2]=ProtoPath+"shkaf.bmp"
altfl[3]=ProtoPath+"stol2.bmp"
altfl[5]=ProtoPath+"stolkuh.bmp"
altfl[4]=ProtoPath+"shkaf1.bmp"
altfl[6]=ProtoPath+"cupel.bmp"
altfl[7]=ProtoPath+"qsh.bmp"
altfl[8]=ProtoPath+"Tumb_TV.bmp"
altfl[9]=ProtoPath+"BookCase.jpg"
#altnum
alternative

"Типовые проекты"
picbox
text
center
"Выберите типовой проект"
done
default 1
altxt[1]  altfl[1]
altxt[2]  altfl[2]
altxt[3]  altfl[3]
altxt[4]  altfl[4]
altxt[5]  altfl[5]
altxt[6]  altfl[6]
altxt[7]  altfl[7]
altxt[8]  altfl[8]
altxt[9]  altfl[9]
done;

Вывод многострочного информационного окна[править | править код]

alternative info

#<Var> alternative <Caption> info [captionok <CaptionOk>] [captioncancel <CaptionCancel>] <Str1> <Str2>... <StrN> done

Команда формирует диалоговое окно с заголовком <Caption> для вывода многострочного текста, заданного строками <Str1> <Str2>... <StrN>. Необязательные ключи captionok и captioncancel позволяют задать собственные названия для кнопок "OK" и "Отмена" <CaptionOk> - и <CaptionCancel> соответственно. Переменная <Var> принимает значение, равное единице, если была нажата кнопка "OK" выбранной картинки или ноль, если была нажата кнопка "Отмена".

Данное диалоговое окно позволяет пользователю самостоятельно вводить и/или редактировать текст в окне. Дополнительная кнопка "Сохранить..." является сервисной. Она позволяет сохранить текст в диалоговом окне в текстовый файл и на работу команды никак не влияет.

Пример:

#aaa alternative 
"Пример" 
info 
captionok "Вперед" 
captioncancel "Назад" 
"Куда идти?" 
"Вперед" 
"  или" 
"Назад?" 
done;

Ввод параметров в диалоговом окне[править | править код]

setvar — команда для ввода параметров через диалоговое окно.

setvar <Caption> <PicFile> {left | right | center} <Str1> <Str2>... <StrN> done <Questions> done

Команда формирует диалоговое окно с заголовком <Caption>, файлом иллюстрации <PicFile>, с пояснительным текстом, состоящим из строк <Str1> <Str2>... <StrN> и выравниванием этих строк по левому краю (left), по правому краю (right) или по центру (center) для ввода параметров различных типов <Questions>. Значение <Questions> зависит от типа параметра. Перед вызовом следует описать переменную (с помощью символа #), в которую будет помещен результат выполнения команды - ноль, если была нажата кнопка "Отмена" или единица, если нажали "ОК".

Ниже разобраны способы ввода параметров и формирование диалогового окна. Представленные ниже синтаксические выражения следует подставлять вместо <Questions>.

Ввод числа[править | править код]

real [{auto | size <Size>}] <Enter> <Prompt> <Var>

Ввод числа возможен в нескольких вариантах. Это может быть непосредственный ввод числа в поле, ввод числа в поле с возможностью выбора из списка, только выбор числа из списка. За способ ввода чисел отвечает параметр <Enter>.

Параметры auto и size <Size> определяют размер поля ввода числа: автоматически по максимальному возможному и строго равным <Size> символов соответственно. Текстовая строка <Prompt> задает подсказку к вводимому значению. <Var>имя переменной для введенного значения.

Ниже представлены способы ввода числа.

Непосредственный ввод числа[править | править код]

Ввод числа

real [{auto | size <Size>}] [default <DefVal>] <Prompt> <Var>

Команда формирует строку ввода, в которую нужно ввести число. Необязательный ключ default <DefVal> устанавливает значение по умолчанию .

Пример:

#aaa 
setvar
"Введите параметры" 
"" 
"Параметры:" 
done 
real auto default 100 
"Введите число" var 
done;

Ввод числа с возможностью выбора из списка[править | править код]

Ввод числа с возможностью выбора из списка

real [{auto | size <Size>}] [default <DefVal>] list <Val1> <Val2>... <ValN> done <Prompt> <Var>

Команда формирует строку ввода, в которую нужно ввести число, либо выбрать число из списка, представленного значениями <Val1> <Val2>... <ValN>. Необязательный ключ default <DefVal> устанавливает значение по умолчанию, появляющееся в начале списка.

Пример:

#aaa 
setvar 
"Введите параметры" 
"" 
"Параметры:" 
done 
real auto default 100 
list 
200 
300
done 
"Введите число" var 
done;

Выбор числа из списка[править | править код]

Выбор числа из списка

real [{auto | size <Size>}] listonly <Val1> [current] <Val2>... <ValN> done <Prompt> <Var>

Команда формирует список чисел для выбора, представленный значениями <Val1> <Val2>... <ValN>. Необязательный ключ current установленный перед одним из значений делает это значение текущим значением списка. Команда предусматривает только выбор значений из имеющегося списка. Ввод произвольных значений числа недопустим.

Пример:

#aaa
setvar 
"Введите параметры" 
"" 
"Параметры:" 
done 
real auto 
listonly 
100 
current 200 
300 
done 
"Выберите число" var 
done;

Ввод строки[править | править код]

string [{auto | size <Size>}] <Enter> <Prompt> <Var>

Ввод строки возможен в нескольких вариантах. Это может быть непосредственный ввод строки в поле, ввод строки в поле с возможностью выбора из списка, только выбор строки из списка. За способ ввода строк отвечает параметр <Enter>.

Параметры auto и size <Size> определяют размер поля ввода строки: автоматически по максимальному возможному и строго равным <Size> символов соответственно. Текстовая строка <Prompt> задает подсказку к вводимому значению. <Var> - имя переменной для введенного значения.

Ниже представлены способы ввода строки.

Непосредственный ввод строки[править | править код]

Непосредственный ввод строки

string [{auto | size <Size>}] [default <DefVal>] <Prompt> <Var>

Команда формирует строку ввода, в которую нужно ввести строку. Необязательный ключ default <DefVal> устанавливает значение по умолчанию .

Пример:

#aaa 
setvar 
"Введите параметры" 
"" 
"Параметры:" 
done 
string auto default "Эта строка по умолчанию" 
"Введите строку" var 
done;

Ввод строки с возможностью выбора из списка[править | править код]

Выбор строки из списка

string [{auto | size <Size>}] [default <DefVal>] list <Val1> <Val2>... <ValN> done <Prompt> <Var>

Команда формирует строку ввода, в которую нужно ввести строку, либо выбрать строку из списка, представленного значениями <Val1> <Val2>... <ValN>. Необязательный ключ default <DefVal> устанавливает значение по умолчанию, появляющееся в начале списка.

Пример:

#aaa 
setvar 
"Введите параметры" 
"" 
"Параметры:" 
done 
string auto default "Сто" 
list 
"Двести" 
"Триста" 
done 
"Введите строку" var 
done;

Выбор строки из списка[править | править код]

Выбор строки из списка

string [{auto | size <Size>}] listonly <Val1> [current] <Val2>... <ValN> done <Prompt> <Var>

Команда формирует список строк для выбора, представленный значениями <Val1> <Val2>... <ValN>. Необязательный ключ current установленный перед одним из значений делает это значение текущим значением списка. Команда предусматривает только выбор значений из имеющегося списка. Ввод произвольных значений строки недопустим.

Пример:

#aaa 
setvar 
"Введите параметры" 
"" 
"Параметры:" 
done 
string auto 
listonly 
"Сто" 
current "Двести" 
"Триста" 
done 
"Выберите строку" var 
done;

Ввод логического значения[править | править код]

Ввод логического значения

logical [default <DefVal>] <Prompt> <Var>

Команда формирует строку ввода, в которую нужно ввести логическое значение (да или нет, истина или ложь). Необязательный ключ default <DefVal> устанавливает значение по умолчанию .

Пример:

#aaa 
setvar 
"Введите параметры" 
"" 
"Параметры:" 
done 
logical default 0 
"Введите логическое значение" var 
done;

Ввод разделителя[править | править код]

Разделитель

button <Prompt> <Var>

Команда формирует разделитель. Параметры <Prompt> и <Var> игнорируются.

Пример:

#aaa
setvar
"Введите параметры"
""
"Параметры:"
done
button " " var
done;

Выбор файла для открытия[править | править код]

Имя файла для открытия

string button 1 [{auto | size <Size>}] [default <DefVal>] <Prompt> <Var>

Команда формирует запрос на ввод строки (имени файла) с возможностью выбора файла в диалоговом окне.

Пример:

#aaa
setvar
"Введите параметры"
""
"Параметры:"
done
string button 1 default "d:\\xOpen.txt"
"Имя файла для открытия:" sVal1
done;

Выбор файла для сохранения[править | править код]

string button 2 [{auto | size <Size>}] [default <DefVal>] <Prompt> <Var>

Имя файла для сохранения

Команда формирует запрос на ввод строки (имени файла) с возможностью выбора файла в диалоговом окне.

Пример:

#aaa
setvar
"Введите параметры"
""
"Параметры:"
done
string button 2 default "d:\\xSave.txt"
"Имя файла для сохранения:" sVal1
done;

Выбор папки с возможностью её создания[править | править код]

string button 3 [{auto | size <Size>}] [default <DefVal>] <Prompt> <Var>

Выбор папки с возможностью её создания

Команда формирует запрос на ввод строки (имени папки) с возможностью выбора файла в диалоговом окне.

Пример:

#aaa
setvar
"Введите параметры"
""
"Параметры:"
done
string button 3 default "d:\\!Xlam" 
"Выбор папки:" sVal3
done;

Выбор текстуры[править | править код]

string button 4 [{auto | size <Size>}] [default <DefVal>] <Prompt> <Var>

Выбор текстуры

Команда формирует запрос на ввод строки (имени текстуры) с возможностью выбора в диалоговом окне.

Пример:

#aaa
setvar
"Введите параметры"
""
"Параметры:"
done
string button 4 default "Lb.pkm6_3_iml.#8" 
"Выбор текстуры:" sVal4
done;

Выбор цвета K3[править | править код]

string button 5 [{auto | size <Size>}] [default <DefVal>] <Prompt> <Var>

Выбор цвета K3

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

Пример:

#aaa
setvar
"Введите параметры"
""
"Параметры:"
done
string button 5 default "25" 
"Выбор цвета K3:" sVal5
done;

Выбор из номенклатуры[править | править код]

string button 6 [{auto | size <Size>}] [default <DefVal>] <Prompt> <Var>

Выбор из номенклатуры

Команда формирует запрос на ввод номера материала с возможностью выбора в диалоговом окне. Через разделитель ‘#’ задаются идентификатор протобиблиотеки, подстановка, умолчание, индекс зависимого параметра.

Индекс протобиблиотеки можно не указывать, если надо использовать подстановку протобиблиотеки Shkaf.

Если нужно задать индекс зависимого параметра, то надо обязательно указывать три разделителя #, например "#177#2718#6" или "Shkaf#177#2718#6".

Зависимый параметр может иметь ТОЛЬКО тип string button 7.

В дополнение к этому выводится комбинированный список

Пример выбора материала панели:

#aaa
setvar
"Введите параметры"
""
"Параметры:"
done
string button 6 default "17#353" 
"[6] Номенклатура (mpl):" sVal6b
done;

Результатом выбора в диалоговом окне будет строка вида <Substr>#<ID>, где <Substr> — номер подстановки, из которой выбран материал панели, а <ID> — уникальный идентификатор материала. Например, "17#353". Для работы, как правило, требуется только идентификатор материала и в виде числа, а не строки. Для преобразования удобно использовать функцию разделения строки на подстроки.

Пример выбора типа крепежа:

Выбор типа крепежа
#aaa
setvar
"Введите параметры"
""
"Параметры:"
done
string button 6 default "19#0" 
"Крепёж (mpl):" sVal6b
done;

Результатом выбора в диалоговом окне будет строка вида <Substr>#<ID>, где <Substr> — номер подстановки, из которой выбран Тип Крепежа, а <ID> — уникальный идентификатор Типа Крепежа. Например, "19#153". Для работы, как правило, требуется только идентификатор типа крепежа в виде числа, а не строки. Для преобразования удобно использовать функцию разделения строки на подстроки.

Если требуемая подстановка не принадлежит главной библиотеки прототипов "Shkaf", то значение <DefVal> задается в виде <LibID>#<SubstID>#<CurrID>, где <LibID> - номер библиотеки, <SubstID> номер подстановки в библиотеке, <CurrID> - номер в подстановке по умолчанию.

Пример:

defarr Arr[2];                  //-- Между разделителем 2 элемента - <Subs> и <ID>. Объявляем массив на 2 элемента
splitbydelim(NNoga,"#",Arr);    //-- Разделяем
Noga=Arr[2];                    //-- Берем второе значение

Выбор множественного свойства назначенного сборочной/номенклатурной единице[править | править код]

string button 7 [{auto | size <Size>}] [default <DefVal>] <Prompt> <Var>

В качестве значения <DefVal> используется строка вида “[Property#]GoodsID#DefValue”, где Property - идент множественного свойства, GoodsID - если положительный, то ID сборочной единицы из справочника сборочных единиц, иначе - отрицательный - то ID номенклатурной единицы из справочника номенклатурных единиц и DefValue - значение по умолчанию. Если Property не задано, то используется свойство ListMat

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

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

#aaa
setvar
"Введите параметры"
""
"Параметры:"
done
string button 7 default “ListMat#44#1245” 
“Тип фасада” FasType
done;

Результатом выбора будет строка вида "GoodsID#MatID", где GoodsID - ID сборочной (положительный) или номенклатурной (отрицательный) единицы, а MatID - ID выбранной номенклатурной единицы из указанного множественного свойства, назначенного сборочной единице.

Выбор нескольких файлов для открытия[править | править код]

string button 8 [{auto | size <Size>}] [default <DefVal>] <Prompt> <Array>

Команда формирует запрос на ввод строки (имени файла/файлов) с возможностью выбора одного или несколько файлов в диалоговом окне. При этом в первом элементе массива <Array> будет содержаться равное количество выбранных файлов, а последующие элементы будут содержать имена выбранных файлов.

Пример:

#aaa
setvar
"Введите параметры"
""
"Параметры:"
done
string button 8 default “d:\\xOpen.txt” 
“Имена файлов для открытия:” ManyFiles
done;
Несколько файлов для открытия

Примеры построения диалоговых окон[править | править код]

Комбинированный ввод значений

Пример:

Комбинированный ввод нескольких значений
#aaa
setvar
"Введите параметры"
""
"Параметры:"
done
real auto default 100
"Введите число" var1
real auto default 100
list
200
300
done
"Введите число" var2
real auto
listonly
100 
current 200
300
done
"Выберите число" var3
button " " var0
string auto default "Эта строка по умолчанию"
"Введите строку" var4
string auto default "Сто"
list
"Двести"
"Триста"
done
"Введите строку" var5
string auto
listonly
"Сто"
current "Двести"
"Триста"
done
"Выберите строку" var6
logical default 0
"Введите логическое значение" var7
done;

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

Вывод списка в цикле
#ok_flag 
setvar
"Умолчания на материалы и типы"
""
left
"Определите умолчания на материалы "
done
str listonly 
  let j=1
  LoopJ1:
    if (PrMater==I_PrMat[J]) 
  {
    current
  }
   S_PrMat[j]
   if (j<N_PrMat) { Let j=j+1 goto LoopJ1 }
   done
 "Материал каркаса:"    E_Col1 
done;

В теле выбора строкового значения организован цикл, который подставляет значения в список. Как только встретиться значение, которое установлено в данный момент (оно должно быть текущим), то используется ключ current. Однако следует следить, чтобы данный ключ не использовался в цикле дважды. Текущим может быть только одно значение.

Пример. Вывод диалогового окна с рисунком:

Диалоговое окно с рисунком
#ok_flag 
setvar
"Атрибуты сверловки комплектующих"
ProtoPath+"sverl.wmf"
left
"Определите параметры сверловки"
done
str listonly
  let j=1
  LoopJ1:
   if (fixarr[5]==Fix_ID[j]) 
   {
    current
   }
   Fix_typs[j]
   if (j<N_Fix) { Let j=j+1 goto LoopJ1 }
  done
"Деталь крепежа:" FixDet
real default fixarr[1] "Глубина основного отверстия (h1):" H1
real default fixarr[2] "Диаметр основного отверстия (d1):" D1
real default fixarr[3] "Глубина ответного отверстия (h2):" H2
real default fixarr[4] "Диаметр ответного отверстия (d2):" D2
done;

Диалог выбора материала/сборочной единицы/типа крепежа[править | править код]

RunMatDlg — функция вызова диалога с выбором материала/сборочной единицы/типа крепежа по дереву

Диалог выбора материала

Integer RunMatDlg(string <Prompt>, integer <SubID>, integer <MatID>)

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

Входные параметры:

<SubID> — ID подстановки
<MatID> — ID материала/сборочной единицы/типа крепежа, на который надо поместить фокус после открытия диалога

Выходные параметры:

Функция возвращает ID выбранного материала/сборочной единицы/типа крепежа или -1, если отказались от выбора материала.
Если <SubID> задает не существующую подстановку, то выдаётся сообщение:
RunMatDlg: нет такой подстановки (SubID=<SubID>), диалог не открывается
Если <SubID> задает простую подстановку (не номенклатура, сборочная единица или тип крепежа), то выдаётся сообщение:
RunMatDlg: для простой подстановки (SubID=<SubID>) диалог не открывается.

Макро | Создание макропрограмм | Переменные и выражения | Вызов из ZIP | Типовые параметры | Создание геом. объектов | Буфер обмена | Сценарии | Параметрические библиотеки | Геометрические характеристики | Атрибуты | Структурные объекты | Текстовые файлы | Системные параметры | Работа с файлами | Редактирование объектов | Удаление объектов | Размеры | Штриховка | Объект «Текст» | Камера | Работа с видом | Наборы параметров | Запрос информации у пользователя | Фильтры | Слои | Графы | Универсальные плоские объекты | Функции работы с системой | Функции работы с объектами сцены | Работа с динамически подключаемыми библиотеками | Функции работы с массивами | Работа со строками | Математические функции | Работа с файлами DBF dBASE IV | Унифицированная работа с базами данных | Вычисление выражений | Присвоение имени объекту | Откатка и восстановление команд | Изменение режима трассировки макропрограмм | Вызов внешних приложений и задач | Проверка условия | Проверка типа переменной | Установкв статуса вывода сообщений | Выдача системного сообщения | Выбор объектов | Версия системы | Информация о системе | Проверка принадлежности к списку | Помещение строки в буфер команд | Получение метапути | Установка курсора ожидания | Мебельные команды и функции для макропрограммирования‎