---
title: "ksDeleteAttrRow - Удалить строку табличного атрибута"
type: guide
api: [api7]
tags: [guide, api7, ksdeleteattrrow]
sources:
  - ksdeleteattrrow.html
---

*API экспортных функций > Функции работы с прикладной библиотекой  > Функции работы с атрибутами *


## ksDeleteAttrRow - Удалить строку табличного атрибута

Пример...
Аналог данной функции при использовании Automation - метод ksAttributeObject::ksDeleteAttrRow.
Синтаксис:
```
int ksDeleteAttrRow (reference pAttr, unsigned int rowNumb, char * password);
Входные параметры:
pAttr    - указатель на атрибут,
rowNumb    - номер строки,
password    - пароль атрибута.
Возвращаемое значение:
1    - в случае удачного завершения,
0    - в случае неудачи.
```
Примечание:
1. Указатель на атрибут reference pAttr может быть получен следующими способами:
– с помощью функций итератора CreateAttrIterator, MoveAttrIterator,
– с помощью функций создания атрибутов ksCreateAttr или выбора атрибутов ChoiceAttr.


## ksDeleteAttrRow, ksAddAttrRow - Пример использования

//создадим атрибут для табличного типа неопределенной длины, тип содержит три колонки
//DOUBLE_ATTR_TYPE(double),STRING_ATTR_TYPE(строка),LINT_ATTR_TYPE(long int).
// Атрибут создадим для внутреннего объекта macro.
// Macro на момент создания атрибута временный, т.е. не в модели чертежа.
// Отредактируем атрибут - в диалоге редактирования атрибута, добавим строку, удалим
Attribute attrPar;
struct TypeStr
{
double a;
char c[MAX_TEXT_LENGTH];
long b;
} ;
static TypeStr arrBuf[3] =
{
{187654321.0, "1 строка", 19999l},
{287654321.0, "2 строка", 29999l},
{387654321.0, "3 строка", 39999l}
};
//массив, определяющий для каждой колонки видимость-невидимость
// (вторая колонка выключена)
unsigned char fV[3]= {1,0,1};
attrPar.key1 = 1; // рекоменд. как код разработчика
attrPar.key2 = 10; // рекоменд. как код атрибута
attrPar.key3 = 100; // рекоменд. как код разработчика
attrPar.key4 = 0; // системный код атрибута
// значения от 0 до 1000 зарезервированы
// за АО "АСКОН"
attrPar.flagVisible = fV; // массив, определяющий для каждой колонки атрибута
// видимость-невидимость
// 0 -видимое поле 1- невидимое поле
attrPar.values = &arrBuf ; // массив значений ячеек таблицы атрибутов
// сначала все значения для 1-ой строки,
// затем все значения для 2-ой строки и т.д.
attrPar.valSize = sizeof(TypeStr)*3;
strcpy (attrPar.password,"111"); // пароль, если не пустая строка
// - защищает от несанкционированного
// изменения информации в атрибуте
reference pObj;
char nameFile[128];
if (!ChoiceFile ("*.lat",NULL, nameFile, 128))
nameFile[0]='\0'; //будем искать в документе
//номер типа атрибута (тип создан ранее, если nameFile пустое - ищем тип атрибута в документе)
double numb;
int j = ReadDouble ("Ввести номер типа атрибута", 1000.,0, 1e12,&numb);
if (j)
{
//временная группа
reference g = NewGroup (1);
//создадим пустой macro
Macro (0);
reference m = EndObj ();
pObj = LineSeg (10, 10, 20, 20, 1);
//добавим отрезок в macro
ksAddObjectToMacro (m, //указатель на макроэлемент
pObj); //указатель на добавляемый объект
//создадим для отрезка, который принадлежит macro, атрибут
reference attr= CreateAttr (pObj, &attrPar, numb, nameFile);
if (!attr)
MessageBoxResult(); // неудачное завершение - выдадим результат работы
// нашей функции
else
{
//вызываем диалог для редактирования атрибута
ViewEditAttr (attr, 2, "111"); // пароль атрибута для просмотра 0
TypeStr arrBuf1 = { 222222222222.0, "NEW строка", 4444444l} ;
//добавим в конец атрибута еще одну строку
ksAddAttrRow (attr, // указатель атрибута
-1, // вставлять строку в конец
fV, // указатель на массив флагов
// видимости ячеек строки
&arrBuf1, // указатель на память пользователя,
// откуда копируются данные
sizeof (TypeStr),// размер выделенной памяти под value
"111"); // пароль атрибута
//удалим первую строку
ksDeleteAttrRow (attr, // указатель атрибута
0, "111"); // номер строки и пароль
//узнаем количество колонок и строк в атрибуте
unsigned int rowsCount, columnsCount;
GetAttrTabInfo (attr, // указатель атрибута
&rowsCount, // количество строк
&columnsCount);// количество столбцов
char buf[250];
sprintf (buf, "rowsCount = %d columnsCount = %d",rowsCount,columnsCount);
//выведем количество колонок и строк в атрибуте на экран
Message (buf);
}
//закроем временную группу
EndGroup();
//поставим все объекты временной группы в модель чертежа
StoreTmpGroup(g);
}
