Выделить текст при фокусе на TextArea

Программирование на Юнити.

Выделить текст при фокусе на TextArea

Сообщение jytu 18 фев 2010, 15:36

Парни, перерыл уже все GUILayout options связанные с text , но ни фи га.., :(

говорят, что это точно можно сделать, кто-нибудь сталкивался?

Эта же тема здесь
http://forum.unity3d.com/viewtopic.php?t=44050
jytu
UNец
 
Сообщения: 37
Зарегистрирован: 31 окт 2009, 18:36

Re: Выделить текст при фокусе на TextArea

Сообщение jytu 18 фев 2010, 18:18

Хоть флудите тогда :( шо то совсем тихо
jytu
UNец
 
Сообщения: 37
Зарегистрирован: 31 окт 2009, 18:36

Re: Выделить текст при фокусе на TextArea

Сообщение jytu 18 фев 2010, 18:21

Может я не так вопрос поставил? Неужели раньше такой задачи не было ни у кого?
jytu
UNец
 
Сообщения: 37
Зарегистрирован: 31 окт 2009, 18:36

Re: Выделить текст при фокусе на TextArea

Сообщение Neodrop 18 фев 2010, 18:30

Я не делал и не видел такой возможности. Сомневаюсь, что она есть. :-?
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: Выделить текст при фокусе на TextArea

Сообщение gnoblin 18 фев 2010, 23:51

Не сталкивался, сразу идей как сделать нету :ymalien:
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: Выделить текст при фокусе на TextArea

Сообщение jytu 26 май 2010, 14:04

Я добавил пост в feedback вот здесь

http://feedback.unity3d.com/forums/1579 ... t-on-focus
jytu
UNец
 
Сообщения: 37
Зарегистрирован: 31 окт 2009, 18:36

Re: Выделить текст при фокусе на TextArea

Сообщение Morphine 26 май 2010, 21:43

Вот код. Немного подправил стандартную функцию ГУИ для отрисовки текстареа.
Теперь при клике выделяеться весь текст
Синтаксис:
Используется csharp
using UnityEngine;

public class TextSelect : MonoBehaviour
{
   
    public int curKeyboardControl;
    private GUIContent myText1 = new GUIContent("Test Field");  
       
        void OnGUI()
    {

                int TextField1ID = GUIUtility.GetControlID(FocusType.Keyboard);
        DoTextField(new Rect(20, 20, 200, 20), TextField1ID, myText1, true, 200, "TextField");

        }
       
//функция для создания текстареа
        public static void DoTextField(Rect position, int id, GUIContent content, bool multiline, int maxLength, GUIStyle style)
        {
    if ((maxLength >= 0) && (content.text.Length > maxLength))
    {
        content.text = content.text.Substring(0, maxLength);
    }

    TextEditor stateObject = (TextEditor) GUIUtility.GetStateObject(typeof(TextEditor), id);
    stateObject.content.text = content.text;
    stateObject.SaveBackup();
    stateObject.position = position;
    stateObject.style = style;
    stateObject.multiline = multiline;
    stateObject.controlID = id;
    stateObject.ClampPos();
    Event current = Event.current;
    bool flag = false;

    switch (current.type)
    {
        case EventType.mouseDown:
            if (position.Contains(current.mousePosition))
            {
                GUIUtility.hotControl = id;
                if (GUIUtility.keyboardControl != id)
                {
                    GUIUtility.keyboardControl = id;
                }
                stateObject.MoveCursorToPosition(Event.current.mousePosition);
                                //когда 1 раз кликаем - выделяем весь текст
                                if (Event.current.clickCount == 1)
                                {
                                        stateObject.SelectAll();
                                }
                if ((Event.current.clickCount == 2) && GUI.skin.settings.doubleClickSelectsWord)
                {

                stateObject.SelectCurrentWord();
                    stateObject.DblClickSnap(TextEditor.DblClickSnapping.WORDS);
                    stateObject.MouseDragSelectsWholeWords(true);
                }
                if ((Event.current.clickCount == 3) && GUI.skin.settings.tripleClickSelectsLine)
                {
                    stateObject.SelectCurrentParagraph();
                    stateObject.MouseDragSelectsWholeWords(true);
                    stateObject.DblClickSnap(TextEditor.DblClickSnapping.PARAGRAPHS);
                }
                current.Use();
            }
            goto Label_02CF;

        case EventType.mouseUp:
            if (GUIUtility.hotControl == id)
            {
                stateObject.MouseDragSelectsWholeWords(false);
                GUIUtility.hotControl = 0;
                current.Use();
            }
            goto Label_02CF;

        case EventType.mouseDrag:
            if (GUIUtility.hotControl != id)
            {
                goto Label_02CF;
            }
            if (!current.shift)
            {
                stateObject.SelectToPosition(Event.current.mousePosition);
                break;
            }
            stateObject.MoveCursorToPosition(Event.current.mousePosition);
            break;

        case EventType.keyDown:
            if (GUIUtility.keyboardControl == id)
            {
                if (stateObject.HandleKeyEvent(current))
                {
                    current.Use();
                    flag = true;
                    content.text = stateObject.content.text;
                }
                else
                {
                    if ((current.keyCode == KeyCode.Tab) || (current.character == '\t'))
                    {
                        return;
                    }
                    char character = current.character;
                    if (((character == '\n') && !multiline) && !current.alt)
                    {
                        return;
                    }
                    Font font = style.font;
                    if (font == null)
                    {
                        font = GUI.skin.font;
                    }
                    if (font.HasCharacter(character) || (character == '\n'))
                    {
                        stateObject.Insert(character);
                        flag = true;
                    }
                    else if (character == '\0')
                    {
                        current.Use();
                    }
                }
                goto Label_02CF;
            }
            return;

        case EventType.repaint:
            if (GUIUtility.keyboardControl == id)
            {
                stateObject.DrawCursor(content.text);
            }
            else
            {
                style.Draw(position, content, id, false);
            }
            goto Label_02CF;

        default:
            goto Label_02CF;
    }
    current.Use();
Label_02CF:
    if (flag)
    {
        GUI.changed = true;
        content.text = stateObject.content.text;
        if ((maxLength >= 0) && (content.text.Length > maxLength))
        {
            content.text = content.text.Substring(0, maxLength);
        }
        current.Use();
    }
}


}
 
Morphine
UNец
 
Сообщения: 8
Зарегистрирован: 26 май 2010, 21:35

Re: Выделить текст при фокусе на TextArea

Сообщение gnoblin 26 май 2010, 22:16

Хитрый :thumbup:
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт


Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11