Страница 2 из 3

Добавлено: 05 дек 2006, 08:31
Алексей
Alexander
думаю тогда Max_fin прав... только встроенными интерфейсами.
см. код выше.

Добавлено: 05 дек 2006, 10:32
edward_K
поищите <лист> - найдете. Можно указать таблу которая будет по умолчанию для всех закладок.
panel не катит - а жаль, так что тока встраиваемые фейсы.
но можно сделать эмуляцию - каталог МЦ посмотрите.
но там фокус в том, что наверху при переходе между закладками переключается формат, а нижняя часть объявленна так
TabbedSheet TOP tshMain
show at (,6,,);
перехватить переход между закладками можно в событии
cmChangeTabbedSheetFormat - в доке пример есть.

Добавлено: 28 май 2008, 12:23
Алексей
В 8.10 ничего не поменялось? По прежнему если объявлен TabbedSheet то на листе нельзя сделать скрин+браузер кроме как встроенным интерфейсом?

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

Не хочется заводить переменную и обновлять её при перемещении между закладками запомнить номер закладки....

Добавлено: 16 июн 2008, 10:32
edward_K
GetCurrentFormat,CurFormatInArea попробуйте. А дальше по case ловите какой активный.

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

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

Вообще, искал документацию по работе с tabbedsheet - почти ничего не нашел, где можно почитать про них? Может у меня asdk.chm устарел?

Добавлено: 16 июн 2008, 12:19
edward_K
да просто пишите имя скрина или броуса. Во второй примерчики посмотрите.

Добавлено: 13 апр 2010, 19:47
ex3em
А как из встроенного интерфейса, взаимодействоватьс с основным интерфейсом?
Согласно примеру описанному выше мы используем конструкцию TE.MsgTest; для вызова процедуры из testemb.vip, а как наоборот из testemb.vip вызывать процедуры находящиеся в "главном" vipе? (((

Добавлено: 13 апр 2010, 20:09
galover
ex3em
Например, посылом сообщений. Потому как embedded вообще не знает о родителе ничего. Ну или как вариант, передавать ссылку на родительский фейс в embedded, но это увеличит связность системы

Добавлено: 14 апр 2010, 11:00
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.
Будет интерфейс встроен сам в себя))

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

Добавлено: 14 апр 2010, 12:04
LaaLaa
Есть ключевое слово SELF.

Добавлено: 14 апр 2010, 12:16
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.

Добавлено: 14 апр 2010, 13:28
ex3em
LaaLaa, galover Спасибо, вам, большое за ответы :)

Re: Закладки

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

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