Добавление своей кнопки в системный интерфейс

Программирование на Atlantis: приемы и подходы, обмен опытом

Модераторы: larin, Screw

shplint
корпорация
Сообщения: 14
Зарегистрирован: Вт, 05/05/2009 07:47
Имя Фамилия: Виктор Носов
Откуда: Галактика-Урал

Добавление своей кнопки в системный интерфейс

Сообщение shplint » Пн, 17/10/2011 06:35

Здавствуйте!
Подскажите, как можно добавить свою кнопку в системный интерфейс?

m0p3e
заказчик
Сообщения: 46
Зарегистрирован: Вт, 13/01/2009 10:52
Имя Фамилия: Сергей Головчак
Откуда: Гипротрубопровод

Re: Добавление своей кнопки в системный интерфейс

Сообщение m0p3e » Пн, 17/10/2011 07:51

Функциями конфигуратора:

Код: Выделить всё

  cfsSetCurrentContainer ( 'RECWIN06.SCRAPPBUTTONS1' );

  var iObj : LongInt;
  cfsCreateObject ( 'BUTTON', 'SCRAPPBUTTONS1', 'MakeDogovorReport', false, iObj );
  cfsSetProp ( iObj, cfpOrigin_X, 10 );
  cfsSetProp ( iObj, cfpOrigin_Y, 245 );
  cfsSetProp ( iObj, cfpSize_X, 92 );
  cfsSetProp ( iObj, cfpSize_Y, 25 );
  cfsSetProp ( iObj, cfpCommand, cmValue61 );
  cfsSetProp ( iObj, cfpTitle, 'Договора' );

Аватара пользователя
Screw
корпорация
Сообщения: 73
Зарегистрирован: Пт, 14/09/2007 22:54
Имя Фамилия: Виталий Корзюк
Откуда: ТопСофт
Контактная информация:

Re: Добавление своей кнопки в системный интерфейс

Сообщение Screw » Ср, 19/10/2011 14:36

Атлантис 5.4.37:
Добавлены возможности перекрытия, расширения панелей, добавления закладок.
1. Перекрытие форматов. Синтаксис

OverloadFormats имя-формата, ...;

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

2. Расширение форматов. Синтаксис

ExtendFormats имя-формата, ...;

Работает так - когда начинает компилиться
расширяющий формат, находит и подсовывает компилятору
старый формат. В итоге компилятор в него все и
добавляет. Необходимо оставлять пробелы там, где старые
элементы, иначе наложится новый на старый. Так же
добавляются и колонки в браузер. Удалять лишние
элементы можно стандартными функциями Атлантиса.
Следует учитывать, что при добавлении элементов в
строку к существующим элементам расстояние между новым
и старым может оказаться не таким, каким оно было бы
при компиляции формата целиком. Для придания формату
качественного вида, как обычно, следует воспользоваться
конфигурационным скриптом.

Если указаны координаты проверяет совпадение размеров. Если не указаны, берет от родителя.

3. Добавление закладок. Синтаксис

ExtendTabbedSheet имя-окна, ...;
Для главного окна интерфейса надо указать имя интерфейса.

Работает так - проверяет наличие в указанном окне
закладок. Если есть - разрешает добавлять, если нет -
нет. При этом, если имя окна было указано в секции
ExtendTabbedSheet, то будет работать нормально, если
нет - то выдастся обычное предупреждение.

Если указаны координаты проверяет совпадение размеров. Если не указаны, берет от родителя.

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

Аватара пользователя
poneatovski
корпорация
Сообщения: 40
Зарегистрирован: Чт, 25/06/2009 10:24
Имя Фамилия: Анатолий Понятовский
Откуда: Галактика

Re: Добавление своей кнопки в системный интерфейс

Сообщение poneatovski » Ср, 19/10/2011 17:17

Screw писал(а):Атлантис 5.4.37:
Добавлены возможности перекрытия, расширения панелей, добавления закладок.
1. Перекрытие форматов. Синтаксис

OverloadFormats имя-формата, ...;

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

2. Расширение форматов. Синтаксис

ExtendFormats имя-формата, ...;

Работает так - когда начинает компилиться
расширяющий формат, находит и подсовывает компилятору
старый формат. В итоге компилятор в него все и
добавляет. Необходимо оставлять пробелы там, где старые
элементы, иначе наложится новый на старый. Так же
добавляются и колонки в браузер. Удалять лишние
элементы можно стандартными функциями Атлантиса.
Следует учитывать, что при добавлении элементов в
строку к существующим элементам расстояние между новым
и старым может оказаться не таким, каким оно было бы
при компиляции формата целиком. Для придания формату
качественного вида, как обычно, следует воспользоваться
конфигурационным скриптом.

Если указаны координаты проверяет совпадение размеров. Если не указаны, берет от родителя.

3. Добавление закладок. Синтаксис

ExtendTabbedSheet имя-окна, ...;
Для главного окна интерфейса надо указать имя интерфейса.

Работает так - проверяет наличие в указанном окне
закладок. Если есть - разрешает добавлять, если нет -
нет. При этом, если имя окна было указано в секции
ExtendTabbedSheet, то будет работать нормально, если
нет - то выдастся обычное предупреждение.

Если указаны координаты проверяет совпадение размеров. Если не указаны, берет от родителя.

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

Как это можно использовать в конфигурировании и где можно об этом почитать?

shplint
корпорация
Сообщения: 14
Зарегистрирован: Вт, 05/05/2009 07:47
Имя Фамилия: Виктор Носов
Откуда: Галактика-Урал

Re: Добавление своей кнопки в системный интерфейс

Сообщение shplint » Пн, 14/11/2011 07:07

Что-то не получается добавить кнопку функциями конфигуратора. Пытаюсь докомпилировать интерфейс PLATVED_KASSA (платежные ведомости в модуле Касса), пытаюсь создать объект функцией cfsCreateObject, указываю контейнер и по имени и по коду, но все равно объект не создается, возвращает ошибку - CfErrCantCreateObject -12
В чем может быть проблема?


alter interface "PLATVED_KASSA";
Overload
end;

Window wiPlatVed '' EscClose;
Show at (0, 1, 82, 30);
Panel pPlatVed;
Show at (, , , 12);
end;

handleEvent
cmInit:{
var iObj, res : LongInt;
res:=cfsGetCurrentContainerSelf
message( 'CurrentContainer '+ res );

res:= cfsCreateObject ( 'BUTTON', cfsGetCurrentContainerSelf, '777', false, iObj );

message( '1 '+ res );
res:= cfsSetProp ( iObj, 'cfpOrigin_X', 10 );
message( '2 '+ res );
res:= cfsSetProp ( iObj, 'cfpOrigin_Y', 245 );
message( '3 '+ res );
res:= cfsSetProp ( iObj, 'cfpSize_X', 92 );
message( '4 '+ res );
res:= cfsSetProp ( iObj, 'cfpSize_Y', 25 );
message( '5 '+ res );
res:= cfsSetProp ( iObj, 'cfpCommand', cmValue61);
message( '6 '+ res );
res:= cfsSetProp ( iObj, 'cfpTitle', '-----------' );
message( '7 '+ res );
inherited :: handleEvent (cmInit);
}
end;
end;
handleEvent
cmValue61:{
message('cmButton1 работает');
}
end;

end.

den
заказчик
Сообщения: 117
Зарегистрирован: Пт, 26/10/2007 14:16
Имя Фамилия: Денис Кучин
Откуда: Геомостпроект НПО

Re: Добавление своей кнопки в системный интерфейс

Сообщение den » Пн, 14/11/2011 08:54

Кнопка принадлежит конкретному скрину просто. Например, пост LaaLaa в теме
viewtopic.php?t=455

демонстрирует сей момент.

Аватара пользователя
Screw
корпорация
Сообщения: 73
Зарегистрирован: Пт, 14/09/2007 22:54
Имя Фамилия: Виталий Корзюк
Откуда: ТопСофт
Контактная информация:

Re: Добавление своей кнопки в системный интерфейс

Сообщение Screw » Вт, 15/11/2011 15:18

К вопросу poneatovski: упомянутая доработка касается только докомпиляции интерфейсов, и к их конфигурированию отношения не имеет.


Вернуться в «Программирование»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя