(*~\Глагол\Отделы\Поле\~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
(**)                          ОТДЕЛ Кнопка;
(*============================================================================* 
 * НАЗНАЧЕНИЕ: кнопка
 *============================================================================*)

ИСПОЛЬЗУЕТ 
  Надел,
  Поле,
        (*  \Глагол\               *)
  Ввод    ИЗ "..\..\Отделы\Обмен\";

ВИД
  Доступ- = ДОСТУП К Вид;    (* Кнопка.Доступ <- Надел.Доступ <- Рамка.Доступ *)
                     Вид- =
  НАБОР (Надел.Вид)          (* Кнопка.Вид    <- Надел.Вид    <- Рамка.Вид    *)
    надпись:Надел.РядНадпись;
    буквица:ЦЕЛ;
    действие-:ЦЕЛ
  КОН;
              нПосылка- =
  НАБОР (Ввод.нПосылка)      (* Кнопка.нПосылка <- Ввод.нПосылка = опорный набор Пустой.Вид  *)
    кнопкаД:Кнопка.Доступ
  КОН;

(*-----------------------------------------локальная ЗАДАЧА-------------------*)
ЗАДАЧА                                                          (*(Кнопка.Вид)*)
       Работа(кнопкаД:Кнопка.Доступ);               
ПЕР
  посылка:Кнопка.нПосылка;
  полеД:Поле.Доступ;
УКАЗ                           (*--- обратная связь ---*)
           (* преобразование
                             полеД             из Рамка.Доступ в
                                   Поле.Доступ <- Рамка.Доступ                *)
              полеД:=кнопкаД.полеД(Поле.Доступ);

                    посылка.кнопкаД:=кнопкаД;
  полеД.Приём(полеД,посылка)
КОН Работа;
(*-----------------------------------------локальная ЗАДАЧА-------------------*)
ЗАДАЧА                                            (* (Кнопка.Вид <- Надел.Вид)*)(* приём посылок из вне (снаружи) *)
       Приём(наделД:Надел.Доступ;
           посылка+:Ввод.нПосылка); (* = Пустой.Вид; - абстрактный опорный набор *)
ПЕР
  кнопкаД:Кнопка.Доступ;
УКАЗ                                                        (* преобразование
           наделД                из Надел.Доступ в
                  Кнопка.Доступ  <- Надел.Доступ <- Рамка.Доступ              *)
  кнопкаД:=наделД(Кнопка.Доступ);
                             (* анализ многоформия (полиморфизма) у <посылка> = Пустой.Вид *)
  ДЛЯ      посылка ВИДА
  | Поле.нОтрисовка:
      Надел.ВыводНадписи(кнопкаД,кнопкаД.надпись,0)
  | Ввод.нОтМышки:
      ЕСЛИ
           посылка.события = {}
      ТО                           (* просто нажали кнопку мышки *)
        Работа(кнопкаД)
      КОН
  | Ввод.нОтКлавиш:
      ЕСЛИ
          (посылка.знак = ' ') 
         ИЛИ
          (посылка.знак = 0DX)
      ТО
        Работа(кнопкаД);
           посылка.код:=0
      КОН
  | Поле.нБуквица:
      ЕСЛИ 
           посылка.буквица = кнопкаД.буквица
      ТО
        Работа(кнопкаД);
           посылка.буквица:=0
      КОН
  ИНАЧЕ
  КОН
КОН Приём;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~общедоступная ЗАДАЧА~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА                                                          (*(Кнопка.Вид)*)
       Создать-(верх,лево:ЦЕЛ;
                 надпись-:ЦЕПЬ;
                 действие:ЦЕЛ;
               выбираемая:КЛЮЧ):Кнопка.Доступ;
ПЕР
   колонок:ЦЕЛ;
  признаки:МНОЖ;
                    кнопкаД:Кнопка.Доступ;
УКАЗ
            СОЗДАТЬ(кнопкаД);

       Надел.СчитатьНадпись(надпись,
                    кнопкаД.надпись,
                            колонок,
                    кнопкаД.буквица
                           );
  ЕСЛИ
       выбираемая
  ТО
    признаки:={Надел.признакВыбираемый}
  ИНАЧЕ
    признаки:={}
  КОН;

  Надел.Подготовить(кнопкаД,
                       верх,
                       лево,1,
                    колонок,
                   признаки,
                      Приём   (* посылок для <наделД> *)
                   );
                    кнопкаД.действие:=действие;
                    кнопкаД.цветНадписи[Надел.состВыбран]:=Надел.цветВыбраннойКнопки;
                    кнопкаД.цветБуквицы[Надел.состВыбран]:=Надел.цветБуквицыВыбраннойКнопки;
            ВОЗВРАТ кнопкаД
КОН Создать;

КОН Кнопка.
