Flash Ripper RSS Readers

SmartRestrict -- класс для контроля ввода пользователя

Класс SmartRestrict предназначен для обслуживания тех случаев, когда необходимо заставить пользователя ввести в определенное текстовое поле определенную строку и для контроля этого процесса. Подобные задачи возникают, например, в интерактивных презентациях и обучающих приложениях. Преставьте, что вам нужно научить пользователя вводить правильный логин и пароль при входе в систему:

Пример использования:

import com.flashripper.utils.SmartRestrict;

function onTextResult(res){
trace("Success:" + res);
}

// создаем экземпляр класса SmartRestrict,
// в качестве параметров указывая текстовое поле,
// строку, которую необходимо заставить ввести пользователя,
// функцию-обработчик результата
// и максимально допустимое кол-во неудачных попыток,
// после совершения которых приложение само
// заполнит текcтовое поле нужным значением

sr=new SmartRestrict(txtLogin, "login", onTextResult,5);

Исходный код класса:

// SmartRestrict class v 0.5.0.1 by Rostislav Siryk
// Usage: new SmartRestrict(txtFieldToRestrict:TextField, strToBeEntered:String, fncOnResult:Function, numErrorsMaxCount:Number)

import mx.utils.Delegate;

class com.flashripper.utils.SmartRestrict {

static private var dc=Delegate.create;

private var txtField:TextField;
private var strToEnter:String=String("Unknown");
private var strInProgress:String=String("");
private var numCharIndex:Number=Number(0);
private var numAttempts:Number=Number(0);
private var numAttemptsMax:Number=Number(24);
private var fncOnResponse:Function;

public function SmartRestrict(txtFieldToRestrict:TextField, strToBeEntered:String, fncOnResult:Function, numErrorsMaxCount:Number)
{
strToEnter=strToBeEntered;
txtField=txtFieldToRestrict;
fncOnResponse=fncOnResult;
if(numErrorsMaxCount) numAttemptsMax=numErrorsMaxCount;
//txtField.restrict=strToEnter;
txtField.onChanged=dc(this,onRestricted);
Selection.setFocus(txtField);
}

private function onRestricted()
{
var numCharEntered=Key.getAscii();
var numCharNeeded=strToEnter.charCodeAt(numCharIndex);
trace(numCharEntered + "-" + numCharNeeded + "/"+numAttempts);
if(numCharEntered==numCharNeeded)
{
strInProgress+=strToEnter.charAt(numCharIndex);
numCharIndex++;
}else{
numAttempts++;
}
txtField.text=strInProgress;
if(numAttempts>numAttemptsMax || strToEnter==strInProgress)
{
doFinalize();
}
}

private function doFinalize()
{
txtField.text=strToEnter;
txtField.onChanged=null;
txtField.type="dynamic";
fncOnResponse(strToEnter==strInProgress);
delete this;
}
}

Писал Rost, 17 Июнь 2005 21:10

Найдены баги:

Рост такой вопрос, ты использовал import для сокращения, или просто чтобы знать какой/какие классы были использованны в классе?

Nirth - 18 Июнь 2005 3:26

под IE под Firefox выглядит почему-то по разному... под Firefox 1.0 вообще не работает.

Alex - 18 Июнь 2005 23:45

у меня FF 1.04 все работает.

Nirth - 19 Июнь 2005 3:13

Обычно для реализации таких вещей на Flash (заполнение различных полей) используют локальный коллективный доступ к данным.

Belka - 20 Июнь 2005 13:45

Чего то не очень врублюсь -
и где бы оно пригодилось....

Штрек - 20 Июнь 2005 14:33

различный обучающий контент

Nirth - 20 Июнь 2005 21:58

короче говоря, все по прежнему.
данное решение предлагается вместо обычного метода onChanged состоящего из трех строк.
Очень хорошо подходит для программеров сидящих на построчной оплате.
Для желающих приобрасти автомобиль могу предложить написать пару-тройку подклассов на эту же тему :)

Iv - 21 Июнь 2005 11:58

и за что я так не люблю AS2?

Iv - 21 Июнь 2005 12:01

По-моему проще заюзать регулярные выражения для таких случаев. А то что-то там ожидается конкретное... Нужно ведь по шаблону, чтобы только цифры, или только буквы, или телефон какой или ещё что. А движка регэкспов для флэша ещё нет, вот и приходится использовать JS для этих целей. Мотай на ус.

Vitas - 21 Июнь 2005 12:29

Iv всегда все что в ас1 можно сделать в 3 строчки в ас2 можно в 3+4
class Name //+1
function name // +1
} //+1
} //+1
Но пишеться больше ведь не для фана, а чтобы потом было легче это дело использовать, и расширять.

Nirth - 21 Июнь 2005 12:40

Nirth, использую import в первую очередь для наглядности, чтобы было видно, на какие внешние классы ссылается код. Сокращение кода -- на втором месте по приоритету: люблю читать и писать код, максимально близкий к человеческой речи. Поэтому комментариии использую редко.

Belka, давай ссылки.

Штрек, мне это пригодилось в пяти местах при создании программы-обучалки. Вот решил поделиться.

Iv, твой подход - более "хакерский", ты умеешь в одну строку уместить десять. Но у меня оч. плохая память, поэтому приходится разжевывать себе будущему. За это я люблю AS2 и наверное за это ты его же не любишь.

Vitas, спасибо!

Рост - 21 Июнь 2005 16:55

я же говорил что для обучающего контента.
да я тоже часто пишу в заголовке все классы которые импортирую, и еще в тэгах [Event()] прописываю события, чтоб точно знать какие есть, практического толку мало, но зато сразу видно.

Nirth - 21 Июнь 2005 18:33



Это запись из категории 'Classes'. 10 еще cвежих:

Архивы по категориям:

3D-18, Adobe AIR-30, Animation-1, Apache Ant-1, Architecture-1, ARP-1, Art-25, Articles-26, AS3-52, Books-7, Business-3, Cairngorm-2, CI-1, Classes-10, Coding-30, Community-113, Components-19, Contests-28, Cool-Job-5, Debug-18, Design-26, Development-84, EMO-1, Events-13, Extensions-2, FAQ-8, FDS-1, Flash and html-5, Flash Player-35, Flash Updates-8, Flash-scene-1, flash10-4, FlashLite-2, Flex-30, Flex 2-80, Flickr-1, FMS-1, FPUG-46, frameworks-1, Games-11, Good Job!-35, HaXe-14, Health-2, Humor-10, Ideas-13, JavaScript-1, Job-26, JSFL-8, Links-2, Linux-1, Maps-1, Math-8, Money-11, MXML-1, Open Source-15, Optimization-2, Patterns-2, Personalities-27, Politics-1, Preloading-3, Productivity-9, PureMVC-10, Pv3d-1, Rafpug-4, Red5-3, Remoting-11, Resources-21, Ruby-6, SAAS-1, Security-11, SEO-8, Silverlight-5, Sound-3, Strategy-120, Tamarin-1, Tools-113, Training-2, Trash-8, URAFPUG-13, Urgent-1, Usability-6, Video-6, VoIP-5, Wallop-1, Wishlist-2, Архив всех записей (большой)

За последние месяцы:

Июл 2008: Международная встреча разработчиков URAFPUG завершена, URAFPUG - трансляция студии Flex-фреймворка Mate, весь Июл

Июн 2008: Попытка предварительных выводов о встрече аниматоров, Онлайн трансляция встречи аниматоров в Донецке, весь Июн

Май 2008: Если 3D, то по-взрослому: официальный запрос в Adobe по поводу контроля над мип-маппингом. Нужна ваша поддержка!, В этом году «Russian Flash Awards» пройдет в «космическом стиле», весь Май

Апр 2008: Программирование под флэш платформу. Cтатья (местами спорная), Advanced Flash Components бесплатно раздает все свои AS2-компоненты, весь Апр

Мар 2008: Зарплаты программистов в 2007 году, FlashPhone как технология года? Технология года? В Рунете?, весь Мар

Фев 2008: ЙА ФПУГ — регистрация на первую встречу UAFPUG продолжается, Закулисы Flex и секрет успеха опенсорс-проекта, весь Фев





Примечания:
Статус документа
: в процессе
   2002-2007 Производство: Рост Прибыли · О проекте · Подписка на новости (RSS)