Форум 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)
-   -   Изменение Text-ового поля (http://www.flasher.ru/forum/showthread.php?t=127441)

l576 14.07.2009 09:46

Изменение Text-ового поля
 
Вложений: 1
Здр.
Предположим, существует файл some.fla
вот:

http://www.flasher.ru/forum/attachme...1&d=1247546709

1. Text Input (all text)
2. Text Input (www.something.com)
3. Button (send) <a href=""></a>

Как сделать, чтобы при нажатии на Button(3),
ссылка из text-ового поля(2),
добавлялась в text-ового поле(1) с тегом <a href=""></a>

Жду ответа
С ув. l576

dimarik 14.07.2009 11:56

пр.

Код AS1/AS2:

var app:                Object = this;
 
var outputTextField:        TextField;
var inputTextField:        TextField;
 
this.button.onRelease = function():Void {
        app.outputTextField.text = '<a href="' + app.inputTextField.text + '"></a>';
};


l576 14.07.2009 13:06

Большое спасибо! dimarik

Однако,

1. При добавлении весь текст, который там(1. Text Input (all text)) находится, уходит и остается только ссылка. //текст (вот ссылка) уходит//. Как сделать чтобы ссылка добавлялась к остальному тексту.
2. При следующем добавлении уже другой ссылки она не добавляется, а просто изменяется прошлая. Как сделать, чтобы можно было бы добавлять больше одной ссылки.


Спустя время (1 мин)
Проблему решил немного подредактировав
Код AS1/AS2:

var app:                Object = this;
 
var outputTextField:        TextField;
var inputTextField:        TextField;
 
this.button.onRelease = function():Void {
        app.outputTextField.text = app.outputTextField.text + '<a href="' + app.inputTextField.text + '"></a>';
};


dimarik 14.07.2009 13:45

Код AS1/AS2:

app.outputTextField.text += '<a href="' + app.inputTextField.text + '"></a>';


l576 14.07.2009 13:47

Спасибо
Последний 3 вопрос
Если я добавляю ссылку, то она всегда добавляется в конце всего текста(или др. ссылок)
Так как и
1. Text Input (all text)
2. Text Input (www.something.com)
это Text Input, то я могу ставить курсор в любой области текста 1. Text Input (all text), однако добавляется ссылка все равно в конце.
Как сделать так чтобы ссылка добавляласть там где стоит текстовый курсор.

dimarik 14.07.2009 14:09

Код AS1/AS2:

var app:                Object = this;
 
var outputTextField:        TextField;
var inputTextField:        TextField;
 
this.button.onRelease = function():Void {
        var result:        String;
        var inline:        String = '<a href="' + app.inputTextField.text + '"></a>';
 
        if ( Selection.getFocus() == app.outputTextField ) {
                var index:Number = Selection.getCaretIndex();
                result =
                                app.outputTextField.text.slice(0, index) +
                                inline +
                                app.outputTextField.text.slice(index + 1);
        } else {
                result = app.outputTextField.text + inline;
        }
 
        app.outputTextField.text = result;       
};


l576 14.07.2009 14:23

Что-то все равно, в конце только добавляет
Вот some.fla&some.swf //f8 as2
see swf
some.fla
some.swf

dimarik 14.07.2009 15:31

Я не учел, что фокус перемещается на кнопку. Нужно сохранять caretIndex.

Код AS1/AS2:

var app:                                Object = this;
 
var outputTextField:        TextField;
var inputTextField:                TextField;
var caretIndex:                        Number = -1;
 
Key.addListener(this);
 
this.button.onRelease = function():Void {
        var result:        String;
        var inline:        String = '<a href="' + app.inputTextField.text + '"></a>';
 
        if ( app.caretIndex > -1 ) {
                result =
                                app.outputTextField.text.slice(0, app.caretIndex) +
                                inline +
                                app.outputTextField.text.slice(app.caretIndex + 1);
        } else {
                result = app.outputTextField.text + inline;
        }
 
        app.outputTextField.text = result;       
};
 
function storeCaretIndex():Void {
        if ( Selection.getFocus() !=  String(this.outputTextField) ) return;
        this.caretIndex = Selection.getCaretIndex();
        trace(this.caretIndex);
}
 
//-----------------------------------
//
// Events handlers
//
//-----------------------------------
function onKeyUp():Void {
        this.storeCaretIndex();
}
 
function onMouseDown():Void {
        this.onEnterFrame = this.enterFrameHandler;
}
 
function enterFrameHandler():Void {
        this.onEnterFrame = null;
        this.storeCaretIndex();
}


l576 14.07.2009 15:42

КрасавчеГ nice work

Добавлено через 2 часа 58 минут
Простите за упрямство, а если нужно сделать, так:

[IMG]http://img194.**************/img194/8091/50754297.gif[/IMG]

т. е. если, 2. Text Input, уже не нужен, текс(ссылки) добавляются
непосредственно в 1. Text Input (all text) //ко всему(основному) тексту.

Спасибо.

dimarik 14.07.2009 18:47

Посмотрите, у класса Selection есть методы getBeginIndex() и getEndIndex().

l576 14.07.2009 19:41

Посидел, много error's набрал и понял что пока мозгов моиз не хватает,
поиск много чего дает(кому-то), но изменить, пока тоже не получается.
Вся надежда на тебя !-) Люди, нужна поддержка...


Как же надо изменить КОД, на что-то типа этого?
(Помогите, я только начал изучать AS (10 дней назад, сразу как закрыл сессию и перешел на 2 курс))
Код AS1/AS2:

...
 
var outputTextField:        TextField;
var caretIndex:        Number = -1;
        a=Selection.getBeginIndex();
        b=Selection.getEndIndex();
 
 
Key.addListener(this);
 
this.button.onRelease = function():Void {
        var result:        String;
        var inline:        String = '<a href="' + tf_txt.getTextFormat(a,b) + '"></a>';
 
...


codfelix 15.07.2009 06:43

Присоединяюсь к вопросу.
Кто-нибудь может помочь.

KiL33 15.07.2009 08:40

Можешь так попробовать.
Код AS1/AS2:

var outputTextField:TextField;
var startIndex:Number;
var endIndex:Number;
var txt:String;
btn.onPress = rep_select;
function rep_select():Void {
        startIndex = Selection.getBeginIndex();
        endIndex = Selection.getEndIndex();
        txt = outputTextField.text.substring(startIndex, endIndex);
        trace(txt);
        outputTextField.replaceText(startIndex,endIndex,'<a href="'+txt+'"></a>');
}


codfelix 15.07.2009 12:14

// Как должен выглядеть КОД полностью, так не срабатывает,
Код AS1/AS2:

var caretIndex:                        Number = -1;
var outputTextField:TextField;
var startIndex:Number;
var endIndex:Number;
var result:String;
 
 
Key.addListener(this);
 
this.btn.onRelease = function():Void {
        startIndex = Selection.getBeginIndex();
        endIndex = Selection.getEndIndex();
        txt = outputTextField.text.substring(startIndex, endIndex);       
};
 
function storeCaretIndex():Void {
        if ( Selection.getFocus() !=  String(this.outputTextField) ) return;
        this.caretIndex = Selection.getCaretIndex();
        trace(this.caretIndex);
}
 
//-----------------------------------
//
// Events handlers
//
//-----------------------------------
function onKeyUp():Void {
        this.storeCaretIndex();
}
 
function onMouseDown():Void {
        this.onEnterFrame = this.enterFrameHandler;
}
 
function enterFrameHandler():Void {
        this.onEnterFrame = null;
        this.storeCaretIndex();
}

// КОД dimarik-а работает, как его изменить.
Код AS1/AS2:

var app:                                Object = this;
 
var outputTextField:        TextField;
var inputTextField:                TextField;
var caretIndex:                        Number = -1;
 
Key.addListener(this);
 
this.button.onRelease = function():Void {
        var result:        String;
        var inline:        String = '<a href="' + app.inputTextField.text + '"></a>';
 
        if ( app.caretIndex > -1 ) {
                result =
                                app.outputTextField.text.slice(0, app.caretIndex) +
                                inline +
                                app.outputTextField.text.slice(app.caretIndex + 1);
        } else {
                result = app.outputTextField.text + inline;
        }
 
        app.outputTextField.text = result;       
};
 
function storeCaretIndex():Void {
        if ( Selection.getFocus() !=  String(this.outputTextField) ) return;
        this.caretIndex = Selection.getCaretIndex();
        trace(this.caretIndex);
}
 
//-----------------------------------
//
// Events handlers
//
//-----------------------------------
function onKeyUp():Void {
        this.storeCaretIndex();
}
 
function onMouseDown():Void {
        this.onEnterFrame = this.enterFrameHandler;
}
 
function enterFrameHandler():Void {
        this.onEnterFrame = null;
        this.storeCaretIndex();
}


dimarik 15.07.2009 12:25

кат-то так можно

Код AS1/AS2:

var app:                                Object = this;
var pattern:                        String = '<a href="{s}"></a>';
 
var outputTextField:        TextField;
 
var beginIndex:                        Number = -1;
var endIndex:                        Number = -1;
 
 
this.button.onRelease = function():Void {
        if (app.beginIndex == -1 ||
            app.endIndex <= app.beginIndex
        ) return;
 
        Selection.setFocus( String(app.outputTextField) );
    Selection.setSelection(app.beginIndex, app.endIndex);
 
        var inline:        String = app.substitute
                        (
                                        pattern,
                                        app.outputTextField.text.slice(app.beginIndex, app.endIndex)
                        );
 
        app.outputTextField.replaceSel(inline);
};
 
this.outputTextField.onMouseUp =
this.outputTextField.onKeyUp = function():Void {
        app.beginIndex = Selection.getBeginIndex();
        app.endIndex  = Selection.getEndIndex();
};
 
this.outputTextField.onSetFocus = function():Void {
        Key.addListener(this);
        Mouse.addListener(this);
};
 
this.outputTextField.onKillFocus = function():Void {
        Key.removeListener(this);
        Mouse.removeListener(this);
};
 
function substitute():String {
        var temp:        Array = arguments[0].split('{s}');
        var i:                Number = temp.length;
        if (i-- > 1) while (i--) temp[i] += arguments[i + 1];
        return temp.join('');
}



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

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