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

Приемы и подходы, обмен опытом

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

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

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

Сообщение shplint »

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

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

Сообщение m0p3e »

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

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

  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 »

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

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

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

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

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

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

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

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

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

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

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

Для окон исторически можно было добавлять закладки. Это было из-за ошибки в коде.
Эта особенность оставлена, на нее выдается соответствующее предупреждение.
Аватара пользователя
poneatovski
топ-софт
Сообщения: 40
Зарегистрирован: Чт, 25/06/2009 10:24
Имя Фамилия: Анатолий Понятовский
Откуда: Галактика

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

Сообщение poneatovski »

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

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

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

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

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

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

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

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

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

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

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

Для окон исторически можно было добавлять закладки. Это было из-за ошибки в коде.
Эта особенность оставлена, на нее выдается соответствующее предупреждение.
Как это можно использовать в конфигурировании и где можно об этом почитать?
shplint
топ-софт
Сообщения: 14
Зарегистрирован: Вт, 05/05/2009 07:47
Имя Фамилия: Виктор Носов
Откуда: Галактика-Урал

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

Сообщение shplint »

Что-то не получается добавить кнопку функциями конфигуратора. Пытаюсь докомпилировать интерфейс 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 »

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

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

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

Сообщение Screw »

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