OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Вторник, 23 Апрель, 2024 12:15

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
 Заголовок сообщения: Дополнительные команды
СообщениеДобавлено: Воскресенье, 04 Апрель, 2010 15:49 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2935
Откуда: г. Ярославль
Понадобилось указать особый порядок обхода контролов на форме (обход с помощью нажатия TAB), в связи с чем набросал специальную команду. Эта команда сортирует выделенные отображения в порядке их выделения на форме.

Код:
   PROCEDURE SortSelected*;
      VAR c: FormControllers.Controller; sel: FormControllers.List;
   BEGIN
      c := FormControllers.Focus();
      IF (c # NIL) & c.HasSelection() THEN
         sel := c.GetSelection();
         WHILE sel # NIL DO
            IF sel.next # NIL THEN c.form.PutAbove(sel.next.view, sel.view) END;
            sel := sel.next
         END
      END
   END SortSelected;


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Дополнительные команды
СообщениеДобавлено: Воскресенье, 04 Апрель, 2010 23:19 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 10:37
Сообщения: 875
Откуда: Россия, Владивосток
в первой части


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 12 Август, 2010 14:27 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2935
Откуда: г. Ярославль
Простейшая дзынькалка. Команды запуска и останова таймера надо поместить в любое удобное меню.

Интерфейс текстовый - надо написать длительность периода в секундах, выделить и выбрать пункт "Запустить таймер".
Можно и коммандером: ^Q"SternTimer2.Start(5)"

Код:
MODULE SternTimer2;

   IMPORT Dialog, Log := StdLog, Strings, Services, TextControllers, TextModels;

   TYPE
      Action = POINTER TO RECORD (Services.Action)
         period: INTEGER
      END;

   VAR
      a: Action;

   PROCEDURE (a: Action) Do;
   BEGIN
      Dialog.Beep;
      Services.DoLater(a, Services.Ticks()+a.period*Services.resolution);
   END Do;

   PROCEDURE Start (period: INTEGER);
   BEGIN
      ASSERT(period # 0, 20);
      Services.RemoveAction(a);
      NEW(a); a.period := period;
      Services.DoLater(a, Services.Ticks()+period*Services.resolution);
   END Start;

   PROCEDURE ReadPeriod*;
      VAR c: TextControllers.Controller; r: TextModels.Reader; period, res, i, beg, end: INTEGER; ch: CHAR; s: ARRAY 50 OF CHAR;
   BEGIN
      c := TextControllers.Focus();
      IF c # NIL THEN
         c.GetSelection(beg, end);
         IF end > beg THEN
            r := c.text.NewReader(NIL); r.SetPos(beg); s := ''; i := 0;
            r.ReadChar(ch);
            WHILE (r.Pos() <= end) & ~r.eot DO
               s[i] := ch; INC(i);
               r.ReadChar(ch);
            END;
            s[i] := 0X;
            IF s # '' THEN
               Strings.StringToInt(s, period, res);
               IF res = 0 THEN Start(period) END
            END
         END
      END;
   END ReadPeriod;

   PROCEDURE Stop*;
   BEGIN
      Services.RemoveAction(a); a := NIL
   END Stop;

   PROCEDURE StopGuard* (VAR par: Dialog.Par);
   BEGIN
      par.disabled := a = NIL
   END StopGuard;

END SternTimer2.

Меню

   "Запустить таймер"   ""   "SternTimer2.ReadPeriod"   "TextCmds.SelectionGuard"
   "Остановить таймер"   ""   "SternTimer2.Stop"   "SternTimer2.StopGuard"


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 12 Август, 2010 16:44 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Иван Кузьмицкий писал(а):
Простейшая дзынькалка.
У меня похожая штука через заданный интервал че-нить веселенькое играет (Мы красные кавалеристы и т.п.), типа move your ass buddy.

Отдельный маленький ББ-проект в отдельной папке, в ней запускается отдельный ББ с соотв. конфигурацией окон, в которых команды с интервалами и файлами мелодий по погоде.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB