Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Сортировка массива через текстовое поле (http://www.flasher.ru/forum/showthread.php?t=103629)

AlliAS 08.11.2007 22:16

Сортировка массива через текстовое поле
 
Здравствуйте.
Мне хотелось бы сделать осуществить следующее:
Чтобы в при вводе некоего текста в текстовое поле на сцене (начиная с первой буквы) под ним (полем) появлялись-бы слова, содержащие в начале те буквы, что введены в текстовое поле.
Мои скромные знания возможностей AS, и еще более скромное знание самого кода, позволили мне осуществить задуманное след. образом:
1. Должен быть массив со всеми используемыми во флешке словами (к примеру kwArray:Array());
2. должен быть некий код, сортирующий данный массив по алфавиту (наверное цикл);
3. Внизу, под гл. текстовым полем должно быть текстовых полей столько-же, сколько и слов в Массиве (все поля должны бать невидимыми), мне промто нужно, чтоб на каждое слово под гл. полем, можно было нажать, и попасть в соответствующую категорию
4. Ну и должен быть код, позволяющий показывать эти самые невидимые поля в опред. порядке.

Но вся проблема в том, что ни с массивами ни с циклами я работать толком не умею.:confused: . И вот в чем состоит моя просьба:

Если ктото знает как это сделать попроще, и если это вообще осуществимо (наверно всетаки осуществимо) Не моглибы Вы создать самый примитивный исходничек, который способен выполнить подобное.
Или хотябы посоветуйте, ЧТО МНЕ ДЕЛАТЬ?
Заранее ОЧЕНЬ БЛАГОДАРЕН за любую оказанную помощь

Molecula 08.11.2007 22:37

Цитата:

Чтобы в при вводе некоего текста в текстовое поле на сцене (начиная с первой буквы) под ним (полем) появлялись-бы слова, содержащие в начале те буквы, что введены в текстовое поле.
Вот это не понятно, под текстовым полем должно быть ещё одно текстовое поле, которое копирует (повторяет) текст верхнего, так что ли?

AlliAS 08.11.2007 22:43

Цитата:

Сообщение от Molecula
Вот это не понятно, под текстовым полем должно быть ещё одно текстовое поле, которое копирует (повторяет) текст верхнего, так что ли?

Нет, не копирует, а выводит похожие слова, м вя фишка в том, что эти слова должны являться кнопками.

aksios 08.11.2007 22:58

AlliAS, познакомьтесь с методами класса String.

udaaff 08.11.2007 23:02

Цитата:

Сообщение от aksios
AlliAS, познакомьтесь с методами класса String.

И с возможностями текстовых полей тоже.

alexcon314 09.11.2007 01:15

Код:

var autoCombo = this.createClassObject(mx.controls.ComboBox, "autoCombo", 0, {_x:50, _y:50, _width:120, editable:true});
var words:Array = [];// массив слов
var wData:Array = [];
this.keyUp = function(eo:Object) {
        var obj = eo.target;
        var cbtext = obj.text;
        obj.close();
        wData.splice(0);
        var i = 0;
        while (words[i]) {
                var w = words[i];
                if (w.indexOf(cbtext, 0) == 0) {
                        wData.push({label:w});
                }
                i++;
        }
        wData.sortOn("label");
        obj.dataProvider = wData;
        obj.open();
        obj.text = cbtext;
};
autoCombo.addEventListener("keyUp", this);

работает, в принципе, но надо еще поработать...это для комбобокса. может пригодится... а мож. и нет.

screamge 09.11.2007 03:28

Для сортивки масиива есть метод sort и то что вам нужно называется
Код:

Array.DESCENDING

AlliAS 09.11.2007 12:40

незнаю, чтото я непонял как работает код, который дал alexcon314:) .
Люди, а нельзя чуть попроще? а то мне наверно такую простую вещь нужно сделать, а я даже не понимаю как.
все что у меня есть: это 2 текстовых поля на сцене (input и dynamic); первое зовут in_txt, а второе dyn_txt.
и есть такой код:
Код:

var key:Array = new Array("картошечка", "веревка", "картошка", "карусель", "карина", "карта", "картинка", "шахматы");
in_txt.onChanged = function(){
        //ну что тут надо добавить, подскажите =)
}

подскажите пожалуйста: что нужно добавить в код, чтобы при вводе в in_txt слова "кар" в поле dyn_txt отображались все слова начинающиеся с "кар" (желательно в алфавитном порядке.:)

alexcon314 09.11.2007 13:12

Код:

this.createTextField("in_txt", 5, 50, 50, 150, 20);
in_txt.type = "input";
in_txt.border = true;
in_txt.multiline = false;
this.createTextField("dyn_txt", 10, 50, 80, 150, 200);
dyn_txt.type = "dynamic";
dyn_txt.border = true;
dyn_txt.multiline = true;
// если текстовые поля уже есть строки выше не нужны. в них поля создаются динамически
var key:Array = new Array("картошечка", "веревка", "картошка", "карусель", "карина", "карта", "картинка", "шахматы");
var wData:Array = new Array();
in_txt.onChanged = function() {
        var intext = in_txt.text;
        wData.splice(0);
        var i = 0;
        while (key[i]) {
                var w = key[i];
                if (w.indexOf(intext, 0) == 0) {
                        wData.push({label:w});
                }
                i++;
        }
        wData.sortOn("label");
        var match = "";
        var i = 0;
        while (wData[i].label) {
                match += wData[i].label + newline;
                i++;
        }
        dyn_txt.text = (match) ? (match) : ("-");
};

"-" в dyn_txt выводится, если среди слов массива key не встречается слов, начинающихся с введенных в in_txt букв. попробуйте вводить слова из массива и посмотрите. только dyn_txt надо сделать побольше размером, чтобы все найденные слова отобразились.

udaaff 09.11.2007 16:09

Код:

var key_array = new Array("картошечка", "веревка", "картошка", "карусель", "карина", "карта", "картинка", "шахматы");

var in_txt = this.createTextField("input_txt", this.getNextHighestDepth(), 10, 10, 200, 100);
in_txt.type = "input";
in_txt.border = true;

var out_txt = this.createTextField("dinamic_txt", this.getNextHighestDepth(), 10, 120, 200, 200);
out_txt.border = true;
out_txt.multiline = true;
out_txt.wordWrap = true;
out_txt.html = true;

in_txt.onChanged = function()
{
        if (this.length > 0) {
                var str = "";
                for (var i = 0; i < key_array.length; i++) {
                        if (this.text == key_array[i].substr(0, this.length)) {
                                str += "<a href='' target='_blank'>" + key_array[i] + " </a>";
                        }
                }
                out_txt.htmlText = str;
        }
};



Часовой пояс GMT +4, время: 06:09.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.