---
title: "ksOpenMacro - Открыть макроэлемент для редактирования"
type: guide
api: [api7]
tags: [guide, api7, ksopenmacro]
sources:
  - ksopenmacro.html
---

*API экспортных функций > Функции работы с графическим документом  > Создание графических объектов  > Работа с макроэлементами и библиотечными макроэлементами  > Функции работы с макроэлементами и библиотечными макроэлементами *


## ksOpenMacro - Открыть макроэлемент для редактирования

Пример...
Аналог данной функции при использовании Automation - метод ksDocument2D::ksOpenMacro.
Синтаксис:
```
int ksOpenMacro(reference macro);
Входной параметр:
macro    - указатель на макроэлемент.
Возвращаемое значение:
1    - в случае успешного завершения,
0    - в случае неудачи.
```
Примечание:
1. После вызова функции можно добавлять в macro новые объекты вида, использовать функцию FindObj; режим закрывается функцией EndObj();
2. Открыт доступ к внутренним объектам макроэлементов. Теперь при создании макроэлемента или при добавлении к макроэлементу новых объектов вида, на внутренние объекты выдается указатель (reference), как и на самостоятельные объекты вида.
Пример....
3. Допускается вводить пустой макроэлемент. Пустой макроэлемент является вырожденным объектом. Он живет только в период редактирования документа. После записи документа, в котором находился пустой макро, этот макро будет удален. Макроэлемент считается нормальным, если в нем находится хотя бы один внутренний объект.
Пример…
4. Функции работы с указателями на объекты допускают работу с внутренними объектами
макроэлемента. К ним относятся:
– CopyObj
– DecomposeObj
– DeleteObj
– GetObjGabaritRect
– GetObjParam
– ksEditViewObject
– LightObj
– MoveObj
– RotateObj
– SetObjParam
– SymmetryObj
– TransformObj


## ksOpenMacro - пример использования

Macro (0);
LineSeg(50,100, 100, 150, 1);
reference p = EndObj();
Message("Создан макроэлемент");
ksOpenMacro (p);
Macro (0);
reference cir = Circle(50, 50, 20, 1);
reference p1 = EndObj();
EndObj();
Message("Макроэлемент отредактирован");


## ksOpenMacro - пример использования

//самостоятельный объект вида
reference l = LineSeg(10, 10, 20, 20, 1);
Macro(0);
//внутренний объект макроэлемента
reference l1 = LineSeg(50,100, 100, 150, 1);
reference p = EndObj();
ksOpenMacro (p);
//внутренний объет макроэлемента
Macro(0);
reference cir = Circle(50, 50, 20, 1);
reference p1 = EndObj();
EndObj();


## ksOpenMacro - пример использования

Macro(0);
reference p = EndObj();
ksOpenMacro (p);
//внутренний объет макроэлемента
Macro(0);
reference cir = Circle(50, 50, 20, 1);
reference p1 = EndObj();
EndObj();
