Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   глобальный запрет табуляции (http://www.flasher.ru/forum/showthread.php?t=123010)

loover 23.03.2009 01:56

глобальный запрет табуляции
 
как запретить табуляцию для всех объектов сразу? есть свойство tabEnabled, но оно действует если его вызвать у конкретного объекта.

wvxvw 23.03.2009 02:33

Положить спрайт где-нибудь на сцене, поставить ему самый маленький таб индекс, ну и когда на него перейдет фокус увеличить индекс в нем на единицу :) Не знаю, звучит не ахти, но по-другому - вряд ли :)

etc 23.03.2009 08:20

Выключите tabEnabled и tabChildren у рута.

loover 23.03.2009 21:53

не удается выключить. выключаю в подключаемом классе. в него передана ссылка на root из основного. пишет:
Код AS3:

1119: Access of possibly undefined property tabEnabled through a reference with static type flash.display:DisplayObject.

в основном классе:
Код AS3:

public var zzz:SecondClass;
zzz = new SecondClass(root);
addChild(zzz);

в подключаемом классе:
Код AS3:

private var roots:DisplayObject;
...
public function SecondClass(root_ref:DisplayObject):void
{
  roots = root_ref;
  roots.tabEnabled = false;
}

wvxvw, я сделал так:
Код AS3:

up_btn.addEventListener(FocusEvent.FOCUS_IN, lockTab);//up_btn первой получает фокус
...
private function lockTab(e:FocusEvent):void
        {
                up_btn.tabIndex ++;
        }

но фокус все равно передается и табуляция работает. что не так?

wvxvw 24.03.2009 02:47

Вам нужно привести DisplayObject к InteractiveObject (это к варианту __etc). Мой вариант - хуже, не делайте так.
Если захочется поэксперементировать - такой вариант :)
Код AS3:

var button0:Sprite = drawSprite();
button0.tabIndex = int.MAX_VALUE;
var button1:Sprite = drawSprite();
 
button0.addEventListener(FocusEvent.FOCUS_IN, lockTab);
 
function lockTab(event:FocusEvent):void { }
 
function drawSprite():Sprite
{
        var sprite:Sprite = new Sprite();
        with (sprite.graphics)
        {
                beginFill(Math.random() * 0xFFFFFF);
                drawRect(-50, -50, 100, 100);
                endFill();
        }
        sprite.x = stage.stageWidth * Math.random();
        sprite.y = stage.stageHeight * Math.random();
        sprite.buttonMode = true;
        return addChild(sprite) as Sprite;
}


loover 24.03.2009 18:13

спасибо, приведение типов сработало. но теперь ругается на tabChildren:
Код AS3:

private var roots:DisplayObject;
private var rootss:InteractiveObject;
...
rootss = roots as InteractiveObject;
...
rootss.tabEnabled = false;
rootss.tabChildren = false;
...
1119: Access of possibly undefined property tabChildren through a reference with static type flash.display:InteractiveObject.


litebox 24.03.2009 19:12

А теперь заведите переменную rootsss и приведите rootss к MovieClip :)
Но лучше давать переменным осознанные имена, или приводить типы на лету:
Код AS3:

(roots as MovieClip).tabEnabled = false;
(roots as MovieClip).tabChildren = false;


loover 24.03.2009 22:45

я совсем запутался с этим приведением типов. теперь другая ошибка:
Код AS3:

Error #1009: Cannot access a property or method of a null object reference.


Яски 24.03.2009 22:56

Какой нафиг MovieClip, если это не Мувиклип?
Приводи к DisplayObjectContainer

loover 24.03.2009 23:04

да! теперь все работает. спасибо Яски и другим участникам обсуждения.


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

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