OberonCore https://forum.oberoncore.ru/ |
|
Дополнительные команды https://forum.oberoncore.ru/viewtopic.php?f=47&t=2524 |
Страница 1 из 1 |
Автор: | Иван Кузьмицкий [ Воскресенье, 04 Апрель, 2010 15:49 ] |
Заголовок сообщения: | Дополнительные команды |
Понадобилось указать особый порядок обхода контролов на форме (обход с помощью нажатия 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; |
Автор: | Иван Горячев [ Воскресенье, 04 Апрель, 2010 23:19 ] |
Заголовок сообщения: | Re: Дополнительные команды |
в первой части |
Автор: | Иван Кузьмицкий [ Четверг, 12 Август, 2010 14:27 ] |
Заголовок сообщения: | Простейший таймер с текстовым интерфейсом |
Простейшая дзынькалка. Команды запуска и останова таймера надо поместить в любое удобное меню. Интерфейс текстовый - надо написать длительность периода в секундах, выделить и выбрать пункт "Запустить таймер". Можно и коммандером: ^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" |
Автор: | Info21 [ Четверг, 12 Август, 2010 16:44 ] |
Заголовок сообщения: | Re: Простейший таймер с текстовым интерфейсом |
Иван Кузьмицкий писал(а): Простейшая дзынькалка. У меня похожая штука через заданный интервал че-нить веселенькое играет (Мы красные кавалеристы и т.п.), типа move your ass buddy.Отдельный маленький ББ-проект в отдельной папке, в ней запускается отдельный ББ с соотв. конфигурацией окон, в которых команды с интервалами и файлами мелодий по погоде. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |