Как добавить кнопку в стандартный интерфейс

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

savov
Местный житель
Сообщения: 589
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Воронеж ОАО Верофарм. Воронеж

Re: Как добавить кнопку в стандартный интерфейс

Сообщение savov »

Вопрос решен ( в частном случае :) .
Например, уменьшаем размеры броузера и в образовавшееся пространство лепим свой скрин с кнопкой.
Код

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

    HandleEvent
    cmInit:
    {
    inherited::handleEvent(cmInit);       
    cfsSetCurrentContainer('L_ADVREP::DOGURGENT');

       cfsSetProp('BRURGENTM', cfpRectB_Y ,17); // было 20
       cfsCreateObject('screen', 'L_ADVREP::DOGURGENT', 'scrPrint', FALSE, scrPrint); // создали скрин с нужными размерами
       cfsSetProp ( scrPrint, cfpRectA_X, 1 );
       cfsSetProp ( scrPrint, cfpRectA_Y, 18 );
         cfsSetProp ( scrPrint, cfpRectB_X, 115 );
       cfsSetProp ( scrPrint, cfpRectB_Y, 19);
       cfsSetProp ( scrPrint, cfpVisible,TRUE);       

       cfsCreateObject('button', 'scrPrint', 'ButPrint', FALSE, ButPrint);//создали кнопку 
       cfsSetProp ( ButPrint, cfpOrigin_X, 17 );
       cfsSetProp ( ButPrint, cfpOrigin_Y, 10 );
       cfsSetProp ( ButPrint, cfpSize_X, 119 );
       cfsSetProp ( ButPrint, cfpSize_Y, 29 );

       cfsSetProp ( ButPrint, cfpCommand, cmPrintMes );
       cfsSetProp ( ButPrint, cfpTitle, 'ПЕЧАТЬ' );

    }
    cmPrintMes:
    {
      Message('Print?',0);
    }
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5185
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: Как добавить кнопку в стандартный интерфейс

Сообщение edward_K »

Для броуса проще в локальное меню добавить
savov
Местный житель
Сообщения: 589
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Воронеж ОАО Верофарм. Воронеж

Re: Как добавить кнопку в стандартный интерфейс

Сообщение savov »

edward_K писал(а):Для броуса проще в локальное меню добавить
А как имя этого меню вычислить, не имея в саппорте соответствующего ПО? У меня не получилось через конфигуратор.
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5185
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: Как добавить кнопку в стандартный интерфейс

Сообщение edward_K »

Ну найти то можно. Самый простой способ спросить на этом форуме указав, что вернет getifccurrentfieldname в месте вызова.
Чуть сложнее покопавшись в консоли управления - но придется сравнивать все меню компоненты с тем, что видите в галке.
zna
Местный житель
Сообщения: 552
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Челябинск
Контактная информация:

Re: Как добавить кнопку в стандартный интерфейс

Сообщение zna »

Здравствуйте, коллеги. Пытаюсь и я повторить по данному примеру добавление кнопки в интерфейсе редактирования производственного заказа: "Планирование производства" -> "Документы" -> "Производственные заказы". Делаю в viper'e, подключил ресурс M_MnPlan.

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

#component 'm_mnplan'
  const
    cmMyTestButton = 9987;
  end;
alter interface irmnplan;
overload end;
HandleEvent
  cmInit: {
    inherited::handleevent(cmInit);
    Message('cfsGetCurrentContainerSelf = '+cfsGetCurrentContainerSelf);
   if (cfsSetCurrentContainer('M_MNPLAN::IRMNPLAN') <> cfOk) {                  // <- Здесь ошибка!!!
     Message(''#3'Ошибка установки корневого контейнера', Error);
     Exit;}
    var l: longint;
    if ( cfsCreateObject('Button', 'IRMNPLAN', 'cmMyTestButton', False, l) = cfErrCreateObjectError) {
    Message(''#3'Ошибка создания объекта', Error);
    Exit;
    }
    cfsSetProp(l, cfpOrigin_X, 5);
    cfsSetProp(l, cfpOrigin_Y, 110);
    cfsSetProp(l, cfpSize_X, 140);
    cfsSetProp(l, cfpSize_Y, 25);
    cfsSetProp(l, cfpTitle, 'TestButton');
    cfsSetProp(l, 'Command', cmMyTestButton);

  }
  cmMyTestButton: {message('gotcha!');
  }
  end;
end.
Получаю ошибку:
"Нет такой функции, поля или метода : CFOK IRMNPLAN.vip(стр. 11, поз. 60)"
Похоже, что я что-то недоподключил..
savov
Местный житель
Сообщения: 589
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Воронеж ОАО Верофарм. Воронеж

Re: Как добавить кнопку в стандартный интерфейс

Сообщение savov »

Возможно, что cfOK описана в cfg_all.inc. У меня не было полной версии этого файла, а только часть констант, я обошелся без cfOK ( см. выше в теме).
zna
Местный житель
Сообщения: 552
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Челябинск
Контактная информация:

Re: Как добавить кнопку в стандартный интерфейс

Сообщение zna »

Да, у меня тоже урезанный cfg_all.inc, в котором нет cfOK (может, кто поделится?). Попробовал добавить screen по идее savov для своего случая. Вот фото подключенных интерфейсов, модифицирую интерфейс M_MNPLAN::IRSPMNPLAN, контейнер, в который вставляется screen- SCRMNPLAN:
Изображение

Код:

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

#component 'm_mnplan'
  const
    cmMyTestButton = 9987;
  end;
alter interface IRSPMNPLAN;
overload end;
HandleEvent
  cmInit: {
    inherited::handleEvent(cmInit);
    cfsSetCurrentContainer('M_MNPLAN::IRSPMNPLAN');

       cfsSetProp('SCRMNPLAN', cfpRectB_X ,100); // было 111  < - Здесь ошибка!!
       cfsCreateObject('screen', 'M_MNPLAN::IMNPLANEDIT', 'scrPrint', FALSE, scrPrint); // создали скрин с нужными размерами
       cfsSetProp ( scrPrint, cfpRectA_X, 101 );
       cfsSetProp ( scrPrint, cfpRectA_Y, 1 );
       cfsSetProp ( scrPrint, cfpRectB_X, 110 );
       cfsSetProp ( scrPrint, cfpRectB_Y, 6);
       cfsSetProp ( scrPrint, cfpVisible,TRUE);

       cfsCreateObject('button', 'scrPrint', 'ButPrint', FALSE, ButPrint);//создали кнопку
       cfsSetProp ( ButPrint, cfpOrigin_X, 17 );
       cfsSetProp ( ButPrint, cfpOrigin_Y, 2 );
       cfsSetProp ( ButPrint, cfpSize_X, 109 );
       cfsSetProp ( ButPrint, cfpSize_Y, 5 );

       cfsSetProp ( ButPrint, cfpCommand, cmPrintMes );
       cfsSetProp ( ButPrint, cfpTitle, 'ПЕЧАТЬ' );
  }
  cmMyTestButton: {message('gotcha!');
  }
  end;
end.
При компиляции получаю:
Нет такой функции, поля или метода : CFPRECTB_X IRMNPLAN.vip(стр. 12, поз. 43) :eek:
Dmitry_Sol
Постоянный гость
Сообщения: 76
Зарегистрирован: 07 июн 2007, 12:32
Откуда: Витебск
Контактная информация:

Re: Как добавить кнопку в стандартный интерфейс

Сообщение Dmitry_Sol »

Мне кажется вы допустили при докомпиляции две ошибки:
1. Этот интерфейс вызывается как embedded, поэтому докомпилировать лучше не cmInit, а функцию InitVidWindow
2. При работе с дизайнером интерфейсов лучше пользоваться именами параметров в кавычках.
Вот мой работающий код :-)

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

#component "M_MNPLAN"
const
 cmButSP1=121129;
end;
alter interface IRSPMNPLAN;
var ButSP1: longint;
overload Function InitVidWindow : Boolean; end;
   Function InitVidWindow : Boolean; {
      inherited::InitVidWindow;
      if PWORKTYPE=17
	  {
		cfsSetCurrentContainer('SCRMNPLAN');
   	  if  cfsCreateObject ('button','SCRMNPLAN','ButSP1',true,ButSP1)=0
              {
 	    cfsCreateObject ('button','SCRMNPLAN','ButSP1',false,ButSP1)
	    cfsSetProp('ButSP1','Origin_X',950);
	    cfsSetProp('ButSP1','Origin_Y',3);
	    cfsSetProp('ButSP1','Size_X',185);
	    cfsSetProp('ButSP1','Size_Y',25);
	    cfsSetProp('ButSP1','Title','Текст кнопки');
	    cfsSetProp('ButSP1','StatusCtx',sci13Esc);
	    cfsSetProp('ButSP1','Command',cmButSP1);
            }
         }
     }
handleevent
 cmButSP1:{
                   message('Надавили на батон :-)')
		}

	end;
end.


zna
Местный житель
Сообщения: 552
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Челябинск
Контактная информация:

Re: Как добавить кнопку в стандартный интерфейс

Сообщение zna »

Что-то скомпилилось, благодарю, Дмитрий. Я только начинаю в это тему вникать..
savov
Местный житель
Сообщения: 589
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Воронеж ОАО Верофарм. Воронеж

Re: Как добавить кнопку в стандартный интерфейс

Сообщение savov »

При компиляции получаю:
Нет такой функции, поля или метода : CFPRECTB_X IRMNPLAN.vip(стр. 12, поз. 43) :eek:
Так это свойство все в том же файлике сидит :smile:
include в vip или в проекте дадут счастье, или как написал Dmitry_Sol
zna
Местный житель
Сообщения: 552
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Челябинск
Контактная информация:

Re: Как добавить кнопку в стандартный интерфейс

Сообщение zna »

Да, инслудники нужны.. Теперь вот константу "sci13Esc" не находит. Без неё компилится.
savov
Местный житель
Сообщения: 589
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Воронеж ОАО Верофарм. Воронеж

Re: Как добавить кнопку в стандартный интерфейс

Сообщение savov »

zna писал(а):Да, инслудники нужны.. Теперь вот константу "sci13Esc" не находит. Без неё компилится.
Указанная константа сидит в galnet.csc, который прописан в глобальном galnet.inc ( там этих констант туча :smile: ). Данный файл имеется в поставке Гал-ки в отчетах.
zna
Местный житель
Сообщения: 552
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Челябинск
Контактная информация:

Re: Как добавить кнопку в стандартный интерфейс

Сообщение zna »

Вернулся к теме добавления визуальных элементов в интерфейсы. Все инклудники нашлись но, есть пара вопросов:
1. С интерфейсом irSpMnPlan чудеса: в результате одной из попыток кнопка добавилась, но потом, в последующих компиляциях перестала вызываться функция InitVidWindow.. :???:
2. Благодаря примеру mwoland в первом посте по аналогии легко добавилась кнопка в интерфейс приходных ДО L_BaseDoc::LSchetb, за что ему +1. Интересует ещё добавление в этот интерфейс поля с выбором, в конфигураторе такое поле описывается как PanelInputLine. Попытался так:

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

#Component "L_BASEDOC"
#include Galnet.inc
alter interface VSCHETB;
window WVSCHET;
  const
    cmBut = 9987;
    cmPanelInput = 11111;
  end;
  HandleEvent
  cmInit:
  {
    inherited::handleEvent(cmInit);
    if (cfsSetCurrentContainer('L_BASEDOC::vschetb') <> cfOk) {                 
    Message(''#3'Ошибка установки контейнера L_BASEDOC::vschetb', Error);
    Exit;}
    var l1, l2: longint;
    cfsCreateObject('Button', 'SCVSCHET', 'cmMnPlan', False, l1);
    cfsSetProp(l1, cfpOrigin_X, 278);
    cfsSetProp(l1, cfpOrigin_Y, 201);
    cfsSetProp(l1, cfpSize_X, 77);
    cfsSetProp(l1, cfpSize_Y, 19);
    cfsSetProp(l1, cfpTitle, 'Кнопка');
    cfsSetProp(l1, 'Command', cmBut);
   if cfsCreateObject('PanelInputLine', 'SCVSCHET', 'cmPanelInput', FALSE, l2) = cfErrCreateObjectError
     {
        Message(''#3'Ошибка создания cPanelInput, cfErrCreateObjectError = '+cfErrCreateObjectError, Error);
     }
   cfsSetProp(l2,'Size_X',179);
   cfsSetProp(l2,'Size_Y',12);
   cfsSetProp(l2,'Origin_X', 359);
   cfsSetProp(l2,'Origin_Y', 204);
   if cfsSetProp(l2, 'StatusCtx', sci1378Esc) <> cfOk then message(''#3'Ошибка StatusCtx', Error);
   if cfsSetProp(l2, 'pickButton', cmPick)    <> cfOk then message(''#3'Ошибка pickButton', Error); ;
  }
  cmBut:
  {
    message('gotcha!');
   }
  cmPanelInput:
  {
  }
  end;
end;
end.          
но не катит, творческий тупик..
Den
Местный житель
Сообщения: 1842
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Re: Как добавить кнопку в стандартный интерфейс

Сообщение Den »

Обратите внимание на 3-й параметр
cfsCreateObject('PanelInputLine', 'SCVSCHET', 'cmPanelInput', FALSE, l2)
zna
Местный житель
Сообщения: 552
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Челябинск
Контактная информация:

Re: Как добавить кнопку в стандартный интерфейс

Сообщение zna »

Дак я и спрашиваю про правильность описания этого объекта
Ответить