Закладки

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

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

Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Сообщение Алексей »

Alexander
думаю тогда Max_fin прав... только встроенными интерфейсами.
см. код выше.
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5184
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

поищите <лист> - найдете. Можно указать таблу которая будет по умолчанию для всех закладок.
panel не катит - а жаль, так что тока встраиваемые фейсы.
но можно сделать эмуляцию - каталог МЦ посмотрите.
но там фокус в том, что наверху при переходе между закладками переключается формат, а нижняя часть объявленна так
TabbedSheet TOP tshMain
show at (,6,,);
перехватить переход между закладками можно в событии
cmChangeTabbedSheetFormat - в доке пример есть.
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Сообщение Алексей »

В 8.10 ничего не поменялось? По прежнему если объявлен TabbedSheet то на листе нельзя сделать скрин+браузер кроме как встроенным интерфейсом?
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Сообщение Алексей »

Есть три закладки, в каждой кнопка "печать". При обработке события cmPrintDoc в общем HandleEvent к Tabbedsheet - надо знать, какая из закладок активная - есть какой-нибудь оператор? Типа ActiveTab ?

Не хочется заводить переменную и обновлять её при перемещении между закладками запомнить номер закладки....
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5184
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

GetCurrentFormat,CurFormatInArea попробуйте. А дальше по case ловите какой активный.
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Сообщение Алексей »

edward_K - то что надо, но ...
В галактике есть префиксы, напирме tn - для таблиц, tb - для bounds ов, а какой префикс для .... скринов/браузеров, что бы использовать case?

А то функция GetCurrentFormat возращает longint... или так и сравнивать
if GetCurrentFormat = longint(scr1) ?

Вообще, искал документацию по работе с tabbedsheet - почти ничего не нашел, где можно почитать про них? Может у меня asdk.chm устарел?
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5184
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

да просто пишите имя скрина или броуса. Во второй примерчики посмотрите.
ex3em
Новичок
Сообщения: 25
Зарегистрирован: 28 янв 2010, 12:24

Сообщение ex3em »

А как из встроенного интерфейса, взаимодействоватьс с основным интерфейсом?
Согласно примеру описанному выше мы используем конструкцию TE.MsgTest; для вызова процедуры из testemb.vip, а как наоборот из testemb.vip вызывать процедуры находящиеся в "главном" vipе? (((
galover
Местный житель
Сообщения: 794
Зарегистрирован: 16 ноя 2007, 13:52

Сообщение galover »

ex3em
Например, посылом сообщений. Потому как embedded вообще не знает о родителе ничего. Ну или как вариант, передавать ссылку на родительский фейс в embedded, но это увеличит связность системы
Vik
Местный житель
Сообщения: 370
Зарегистрирован: 28 сен 2006, 15:43
Откуда: Санкт-Петербург
Контактная информация:

Сообщение Vik »

А со встраиванием и двумя браузами в разных вкладках можно так извернуться:

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

Interface NameInterface

 Window NameWindow
    browse br1
    browse br2
 end;
 
 tabbedSheet tb
   Screen scName 'Вкладка 1'
   embeded embName 'Вкладка 2' interface
 end;

 HandleEvent
  cmInit : {
     <инициализация>
     BindEmbeddedInterface ( embName, 'NameInterface', 'NameWindow');
  }
 end;
end.
Будет интерфейс встроен сам в себя))
ex3em
Новичок
Сообщения: 25
Зарегистрирован: 28 янв 2010, 12:24

Сообщение ex3em »

galover писал(а):ex3em
Например, посылом сообщений. Потому как embedded вообще не знает о родителе ничего. Ну или как вариант, передавать ссылку на родительский фейс в embedded, но это увеличит связность системы
А можно пример кода отправки сообщений родителю или как передавать ссылку на родительский интерфейс. Пожалуйста.
LaaLaa

Сообщение LaaLaa »

Есть ключевое слово SELF.
galover
Местный житель
Сообщения: 794
Зарегистрирован: 16 ноя 2007, 13:52

Сообщение galover »

ex3em
Не компилил, но идея, думаю, будет понятна
1) Посылка сообщения

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

#component "Test"

//------------------ Child (embedded) ------------------------
objInterface IChild;
   public event procedure OnSomeActionEvent; // Объявляем событие
end;

vipInterface Child implements IChild;

interface Child;
  handleEvent
     // Где-то инициируем событие
     cmSomeCommand: OnSomeActionEvent();
  end;
end.

//------------------ Parent ------------------------
interface Parent
    var _child : Test::Child new;  
 
   // Описание embedded области
   embedded embName interface _child;
   end;

   // Описываем обработчик события
   private procedure OnSomeActionEventHandler;
   {
      Message('Пришло событие из встроенного интерфейса!');
   }

  handleEvent
     cmInit:
     {
        // Подписываемся на событие embedded интерфейса
        BindEvent(OnSomeActionEventHandler, _child.OnSomeActionEvent);
     }
  end;
end.
2) Передача ссылки на родительский интерфейс

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

#component "Test"

//------------------ Parent ------------------------
objInterface IParent;
   public procedure CallParent;
end;

vipInterface Parent implements IParent;

//------------------ Child (embedded) ------------------------
vipInterface Child;
  public:
     constructor Init;
     constructor InitWithParent(IParent parent);
end;

interface Child
   var _parent : Test::IParent; 
  
   constructor Init;
   {
      result := true;
   }
   constructor InitWithParent(IParent parent);
   {
      _parent := parent;
      result := (_parent <> nullRef);         
   } 

   handleEvent:
       // Где-то вызываем родительскую процедуру
       cmSomeCommand: _parent.CallParent();
   end;
end.

interface Parent
   var _child : Test::Child noauto;  
 
   // Описание embedded области
   embedded embName interface _child;
   end;

   public procedure IParent.CallParent;
   {
      Message('Вызвали родительский интерфейс!');
   }
  
   handleEvent
      cmInit:
      { 
         /* Вот тут х.з. нужно ли делать приведение типа, в нормальных языках наследование работает без приведения, в общем нужно проверять */
         _child := new(Test::Child, InitWithParent(Test::IParent(self)));
      } 
   end;
end.
ex3em
Новичок
Сообщения: 25
Зарегистрирован: 28 янв 2010, 12:24

Сообщение ex3em »

LaaLaa, galover Спасибо, вам, большое за ответы :)
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Re: Закладки

Сообщение Алексей »

Есть 5 закладок в tabbedsheet, в каждой что-то нарисовано, но единовременно должна активной быть одна! Выбрать активную я смогу а можно как то скрыть остальные, чтобы пользователи даже зайти туда не смогли?

Ну или подкиньте идею как сделать так, чтобы на одном и том же месте в интерфейсе могли открываться разные встроенные интерфейсы... по нужному мне условию.
Ответить