Вверх ↑
Этот топик читают: Гость
Ответов: 36
Рейтинг: 2
#1: 2009-11-03 09:30:01 ЛС | профиль | цитата
Такие компоненты приковывают внимание к экрану. При монотонной работе, самонастройке, медитации, в играх для самых маленьких (с годика) и т.п.
Например, экран, случайно меняющий свой цвет при каждом движении мышки:


Add(MainForm,2953706,55,56)
{
Width=610
Height=497
Caption="Цветопредставление"
BorderStyle=1
Point(onMouseMove)
Point(doColor)
link(onMouseMove,10403690:doRandom,[])
}
Add(Random,10403690,147,77)
{
Max=16777215
link(onRandom,2953706:doColor,[(191,83)(191,87)(43,87)(43,90)])
}

Или кнопка, случайным образом меняющая свой цвет при каждом нажатии


Add(BitBtn,14667551,175,105)
{
Left=175
Top=105
Point(doColor)
link(onClick,2067419:doRandom,[])
}
Add(Random,2067419,245,105)
{
Max=16777215
link(onRandom,14667551:doColor,[(289,111)(291,115)(291,211)(163,211)(163,118)])
}
Другой тип замыкания - матрешка из дочерних форм.
В примере - "обидчивая форма", при закрытии не желающая восстанавливаться:


Add(MainForm,2953706,21,105)
{
Width=132
link(onActivate,3447306:doWork1,[])
}
Add(ChildForm,3447306,147,105)
{
link(onEvent1,2953706:doMinimize,[(191,111)(192,118)(192,178)(9,178)(9,125)])
link(onEvent2,2953706:doCaption,[(191,117)(227,117)(227,67)(9,67)(9,111)])
}
BEGIN_SDK
Add(EditMulti,7135218,21,21)
{
EventCount=2
WorkCount=1
link(doWork1,3940358:doMinimize,[(28,27)(28,125)])
}
Add(MainForm,3940358,35,105)
{
Left=35
Top=105
Height=112
link(onActivate,1879088:doWork1,[])
}
Add(ChildForm,1879088,119,105)
{
link(onEvent1,7135218:onEvent2,[(236,111)(236,34)])
}
BEGIN_SDK
Add(EditMulti,8694868,21,21)
{
EventCount=1
WorkCount=1
link(doWork1,14436555:doMinimize,[(28,27)(28,125)])
}
Add(MainForm,14436555,35,105)
{
Left=35
Top=105
Width=535
Height=458
link(onActivate,10199570:doWork1,[])
}
Add(ChildForm,10199570,119,105)
{
link(onEvent1,8694868:onEvent1,[(236,111)(236,27)])
}
BEGIN_SDK
Add(EditMulti,9475726,21,21)
{
EventCount=1
WorkCount=1
link(doWork1,8755545:doMinimize,[(28,27)(28,125)])
}
Add(MainForm,8755545,35,105)
{
Left=35
Top=105
Width=119
Height=105
link(onActivate,3702579:doWork1,[])
}
Add(ChildForm,3702579,126,105)
{
link(onEvent1,9475726:onEvent1,[(240,111)(240,27)])
}
BEGIN_SDK
Add(EditMulti,16237442,21,21)
{
EventCount=1
WorkCount=1
link(doWork1,13338583:doMinimize,[(28,27)(28,125)])
}
Add(MainForm,13338583,35,105)
{
Left=35
Top=105
Width=219
Height=394
link(onActivate,8241215:doWork1,[])
}
Add(ChildForm,8241215,133,105)
{
link(onEvent1,16237442:onEvent1,[(243,111)(243,27)])
}
BEGIN_SDK
Add(EditMulti,13421699,21,21)
{
EventCount=1
WorkCount=1
link(doWork1,3652007:doMinimize,[(28,27)(28,125)])
}
Add(MainForm,3652007,35,105)
{
Left=35
Top=105
Width=509
Height=85
link(onActivate,13421699:onEvent1,[(194,111)(194,27)])
}
END_SDK
END_SDK
END_SDK
END_SDK
END_SDK

Устное предупреждение: пользуемся тегом Код -- iarspider

В качестве иллюстрации использования таких компонентов - "Зарядка души" с цветной кнопкой

Add(BitBtn,12382016,35,175)
{
Left=80
Top=175
Caption="Ещё"
Point(doColor)
link(onClick,7448418:doFor,[])
}
Add(Message,8456892,147,175)
{
Message="А ты человек, ты сильный и смелый"
link(onMessage,4716745:doMessage,[])
}
Add(Message,4716745,217,175)
{
Message="Своими рукам судьбу свою сделай"
link(onMessage,15991853:doMessage,[])
}
Add(Message,15991853,287,175)
{
Message="Иди против ветра, на месте не стой"
link(onMessage,5895846:doMessage,[])
}
Add(Message,5895846,364,175)
{
Message="Пойми, не бывает дороги простой"
link(onMessage,15624622:doRandom,[])
}
Add(Label,6222629,77,77)
{
Left=115
Top=40
Width=130
Height=28
Font=[MS Sans Serif,14,0,0,1]
Caption="Зарядка души"
}
Add(Label,5269490,147,77)
{
Left=40
Top=100
Width=319
Height=20
Font=[MS Sans Serif,10,0,0,1]
Caption="Повторять до насыщения, но не меньше 7-ми раз"
}
Add(For,7448418,91,175)
{
Start=1
End=7
link(onEvent,8456892:doMessage,[])
}
Add(Random,15624622,427,175)
{
Max=16777215
link(onRandom,12382016:doColor,[(471,181)(471,256)(23,256)(23,188)])
}
Add(Label,8008474,217,77)
{
Left=186
Top=175
Width=119
Height=17
Caption="Цвет - состояние души"
}

А какие эффектные короткие замыкания знаете Вы?
карма: 1

0
Ответов: 409
Рейтинг: 17
#2: 2009-11-03 12:55:48 ЛС | профиль | цитата
Хорошее начало в освоении среды
карма: 0

0
Ответов: 175
Рейтинг: 10
#3: 2009-11-03 19:00:07 ЛС | профиль | цитата
KomKon, ты бы предупреждение написал для страдающих эпилепсией!
карма: 1

0
Ответов: 36
Рейтинг: 2
#4: 2009-11-03 23:01:26 ЛС | профиль | цитата
Есть идея получше - использовать цветопредставление при приеме на работу - для отсева эпилептиков... ;0)

Ну, раз никто о коротких замыканиях не знает и придумать не может, поделюсь еще одной находкой:
КНОПКА, ЛЮБЯЩАЯ ЛАСКУ


Add(BitBtn,11465161,56,154)
{
Left=75
Top=25
Width=155
Color=65535
Caption="Кликни золотую рыбку"
Data=String(Отстань, мне некогда)
Point(onMouseWheel)
link(onClick,2908505:doMessage,[])
link(onMouseWheel,11133775:doMessage,[(156,167)(156,216)])
}
Add(Message,2908505,224,154)
{
Message="Отстань, мне некогда"
Caption="Не теряй надежды..."
link(onMessage,8703876:doData,[])
}
Add(DoData,8703876,301,154)
{
Data=String(Погладь меня колесиком)
link(onEventData,11465161:doCaption,[(345,160)(345,148)(44,148)(44,160)])
}
Add(Message,11133775,224,210)
{
Message="Ну, чего тебе надобно?"
Caption="С лаской больше добьешься"
}

карма: 1

0
файлы: 1code_15527.txt [806B] [145]
Ответов: 4641
Рейтинг: 334
#5: 2009-11-04 09:52:49 ЛС | профиль | цитата
KomKon писал(а):
Ну, раз никто о коротких замыканиях не знает

расскажи... сказал А говори и Б
------------ Дoбавленo в 09.55:
и во еще что! Если мессаге вылетает в центр, то и форма должна быть по центру, а не водить мышкой из верхнего левого угла в центр, чтобы нажать ок!
карма: 1
Время верстки: %cr_time% Текущее время: %time%
0
Ответов: 36
Рейтинг: 2
#6: 2009-11-04 11:51:06 ЛС | профиль | цитата
Спасибо за совет о центровке. Как общее правило - бум следовать. Что до примера с обидчивой формой, то он задумывался как занятие для малышей, осваивающих мышку. Там погоняться по экрану за скачущими окошками - самый раз!
Ravilr писал(а):
расскажи... сказал А говори и Б

Ага, корову ловят за рога, а человека за язык... ;0) Плавали - знаем...
Короткое замыкание - удачный лейбл для программных миниатюр, открывающих необычные свойства компонентов.
Возможно, для зубров с капиталом в 627 млрд. ничего необычного в компонентах не существует, а вот для шустрых босяков с капиталом 0,0 млрд. кое-что и отыщется.
Кнопка, любящая ласку, - намек на многофункциональные кнопки.
Или вот еще пример короткого замыкания: блокировка буфера, позволяющая узнать, что компьютер думает о Вас



Add(ClipboardHook,11673663,133,154)
{
link(onChange,10773141:doEvent1,[])
link(onBitmap,10773141:doEvent2,[])
}
Add(Hub,10773141,196,154)
{
InCount=2
OutCount=1
link(onEvent1,9063447:doData,[])
}
Add(DoData,9063447,231,154)
{
Data=String(Срочно нужен апгрейд. Я устал уже работать на таком старье (Ваш компьютер))
link(onEventData,11673663:doSetText,[(275,160)(275,148)(121,148)(121,160)])
}
Add(Memo,6300862,133,217)
{
Left=20
Top=20
Width=270
Height=155
}
Add(Label,3542578,126,77)
{
Left=20
Top=210
Width=287
Height=17
Caption="Напишите выше, что Вы думаете о своем компьютере. "
}
Add(Label,2551767,175,77)
{
Left=20
Top=227
Width=259
Height=17
Caption="Выделите текст и скопируйте его в буфер (ctrl + c)"
}
Add(Label,4686854,224,77)
{
Left=20
Top=244
Width=324
Height=17
Caption="Вставьте текст из буфера (ctrl + v) - узнаете ответ компьютера"
}


карма: 1

0
Ответов: 36
Рейтинг: 2
#7: 2009-11-08 21:35:29 ЛС | профиль | цитата
Короткие замыкания - варианты введения обратной связи на параметры компонента в программе.
Простейшая их задача (1) - увеличение богатства возможностей компонентов.
Но есть задачи посложнее. Вот 2 заманчивые задачи:
(2) Вариация программы в зависимости от действий пользователя и складывающейся ситуации.
Возьмем, к примеру, Тетрис. В обычной его версии сложность задачи (темп поступления новых блоков) постепенно нарастает, что в итоге приводит к завершению игры. Если бы был реализован адаптивный алгоритм, то сложность по умолчанию возрастала, но уменьшалась бы по мере заполнения стакана блоками. Такой алгоритм сильнее бы удерживал пользователя у экрана.
(3) Создание программ, обладающих сознанием. Несмотря на то, что этот термин является табу для программистов, за ним скрывается простая идея. Отражение работы программы на втором уровне, отвечающем за вариацию программы и переключение на другие программы. Если это отражение задублировать и связать перекрестной сверкой, как в RAID-массивах, то получим самосознание. И такие программы есть у комаров, дождевых червей и т.п. живности.
карма: 1

0
Администрация
Ответов: 15295
Рейтинг: 1519
#8: 2009-11-09 00:14:05 ЛС | профиль | цитата
почему это табу хорошо демонстрируется следующей схемой
Add(CheckBox,16228966,259,119)
{
Left=210
Top=140
link(onCheck,16228966:doCheck,[(303,125)(303,113)(247,113)(247,125)])
}


карма: 27
0
Ответов: 36
Рейтинг: 2
#9: 2009-11-09 08:10:32 ЛС | профиль | цитата
Ну, понятно, что столб перепрыгуть нельзя. А если обойти?


Add(CheckBox,16228966,133,175)
{
Left=200
Top=140
Width=140
Caption="Ставь птицу, не боись"
link(onCheck,2466478:doMessage,[])
}
Add(Message,2466478,210,175)
{
Message="Нам Runtime Errrror нипочем, нипочем, нипочем. Мы Runtime Error кирпичом, кирпичом, кирпичом... ;0)"
Point(onCANCEL)
link(Caption,16228966:Checked,[(223,163)(181,163)(181,219)(139,219)])
link(onCANCEL,16228966:doCheck,[(254,188)(254,142)(121,142)(121,181)])
}



карма: 1

0
Администрация
Ответов: 15295
Рейтинг: 1519
#10: 2009-11-09 09:51:48 ЛС | профиль | цитата
это не обход, а отложенное возмездие - через некоторое время стек все равно переполнится и вылетит ошибка.
карма: 27
0
Ответов: 36
Рейтинг: 2
#11: 2009-11-09 10:34:52 ЛС | профиль | цитата
Dilma писал(а):
это не обход, а отложенное возмездие - через некоторое время стек все равно переполнится и вылетит ошибка.


Какое время? Я включил секундомер и с упорством голодного дятла долбил по кнопкам 5 минут - никаких ошибок.
Да и переполнение буфера, оказывается, можно использовать с пользой. Открываем Википедию и читаем:
"Иногда, переполнение буфера намеренно используется системными программами для обхода ограничений в существующих программных или программно-аппаратных средствах. Например, операционная система iS-DOS (для компьютеров ZX Spectrum) использует возможность переполнения буфера встроенной TR-DOS для запуска своего загрузчика в машинных кодах (что штатными средствами в TR-DOS сделать невозможно)".
http://ru.wikipedia.org/wiki/Переполнение буфера
карма: 1

0
Администрация
Ответов: 15295
Рейтинг: 1519
#12: 2009-11-09 15:46:36 ЛС | профиль | цитата
KomKon писал(а):
Какое время? Я включил секундомер и с упорством голодного дятла долбил по кнопкам 5 минут - никаких ошибок.

время зависит от количества замкнутых циклов в секунду и максимального размера стека для данной программы в данной ОС.
карма: 27
0
Ответов: 16884
Рейтинг: 1239
#13: 2009-11-09 19:08:12 ЛС | профиль | цитата
KomKon писал(а):
Ну, понятно, что столб перепрыгуть нельзя. А если обойти?
А если повалить и переступить ?
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 36
Рейтинг: 2
#14: 2009-11-09 19:37:07 ЛС | профиль | цитата
Tad писал(а):
А если повалить и переступить ?

Дык на ем же провода под напряжением... ;0)

Лучший ответ изобретателя скептикам - демонстрация работающего прототипа.
Дивись народ на живое поле сознания:

Add(BitBtn,6497875,105,105)
{
Left=140
Top=10
Width=115
Caption="Проснись и пой!"
Data=Integer(0)
Point(doColor)
link(onClick,9107322:doTimer,[])
}
Add(Random,8575930,238,21)
{
Max=16777215
link(onRandom,6497875:doColor,[(308,27)(308,72)(93,72)(93,118)])
}
Add(Timer,9107322,175,105)
{
Enable=1
Point(onStop)
link(onTimer,1552003:doEvent1,[(233,111)(233,104)])
link(onStop,7998520:doClear,[])
}
Add(BitBtn,10824934,105,154)
{
Left=140
Top=230
Width=135
Caption="Спи, моя радость, усни..."
Point(doColor)
link(onClick,9107322:doStop,[(156,160)(156,118)])
}
Add(Hub,1552003,245,98)
{
OutCount=4
link(onEvent1,8575930:doRandom,[(271,104)(271,66)(226,66)(226,27)])
link(onEvent2,2798284:doRandom,[(271,111)(271,135)(226,135)(226,160)])
link(onEvent3,8575930:doRandomize,[(271,118)(271,76)(226,76)(226,34)])
link(onEvent4,11373885:doData,[(287,125)(287,111)])
}
Add(DoData,11373885,315,105)
{
link(onEventData,7998520:doAdd,[])
link(Data,11293625:Value,[])
}
Add(Memory,11293625,315,49)
{
Default=String(Cogito ergo sum)
}
Add(Random,2798284,238,154)
{
Max=16777215
link(onRandom,10824934:doColor,[(281,160)(281,207)(93,207)(93,167)])
}
Add(Memo,7998520,413,105)
{
Left=60
Top=45
Width=290
Height=170
}


карма: 1

0
файлы: 1code_15597.txt [1.2KB] [152]
Администрация
Ответов: 15295
Рейтинг: 1519
#15: 2009-11-09 19:58:54 ЛС | профиль | цитата
KomKon, советую вам почитать что-нибудь о фракталах и посмотреть пример mandelbrot.sha из пакета - это как раз то, что идеально воплощает принцип "Получить бесконечно многое из бесконечно малого"
карма: 27
0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)