![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Oct 2006
Сообщений: 44
|
Добрый день. Возникла проблема следующего характера: есть несколько Panel. Одна накладывается на другую (при этом они неполностью скрываются друг под другом и есть возможность кликнуть на какую-то Panel-ку находящуюся внизу). Нужно что бы при клике на нижнюю панельку, она всплывала поверх остальных. Как окна в винде ). Подскажите плиз какое свойство за это отвечает. Не могу придумать как это реализовать.
|
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Приведи код, как ты их создаешь. А лучше весь.
|
|
|||||
|
Регистрация: Oct 2006
Сообщений: 44
|
Ну с этим проблемы )) Там килобайты кода. Если в двух словах, то есть функция которая создаёт panel и кладёт их прямо в корень аппликейшена, хотя можно сделать, что бы она кидала их в какой-то контейнер. Не суть. Причём панельки можно ресайзить и перемещать (написан экстенд класса panel, позволяющий это делать). Короче иммитируется работа с окнами в винде. Теоретически я конечно могу просто помещать изначально все панельки в какой то контейнер и при необходимости изменять их порядок. Но это какое то кривое решение, как мне кажется
|
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Копай в сторону PopUpManager.
|
|
|||||
|
Регистрация: Oct 2006
Сообщений: 44
|
Копание отчасти помогло. Днлаю так:
В итоге всё работает как надо. Но! Хочется в определённый момент взять и поменять родителя у окошка. Принцип такой: окна создаются описанным выше способом и кидаются в корень аппликейшена. ещё в корне аппликейшена есть ApplicationControlBar. В определённый момент я хочу перенести одно из окон в ApplicationControlBar, а так не получается. Точнее перенести получается, но после этого, в случае если я пытаюсь создать ещё одно окно или кликнуть по одному из существующих, выдаётся ошибка ArgumentError: Error #2025: The supplied DisplayObject must be a child of the caller. at flash.display::DisplayObjectContainer/getChildIndex() at mx.managers::SystemManager/getChildIndex()[C:\dev\GMC\sdk\frameworks\mx\managers\SystemManager.as:1251] at mx.managers::SystemManager/mx.managers:SystemManager::mouseDownHandler()[C:\dev\GMC\sdk\frameworks\mx\managers\SystemManager.as:2417] если поставить свойство win.isPopUp=false; то у окна действительно пропадают свойства всплывания и перетаскивания, но при этом всёравно выскакивает та же ошибка. Подскажите как это победить. Последний раз редактировалось asuri; 05.04.2007 в 20:27. |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Что-то мне кажется второй параметр неверен. А классы так не называют («_Window»).
|
|
|||||
|
Регистрация: Oct 2006
Сообщений: 44
|
Ну нет же, я просто забыл дописать что _parent ссылается на аппликейшн.
Вот набросал простой пример, как и что я пытаюсь сделать.
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
<![CDATA[
import mx.controls.Button;
import mx.effects.effectClasses.ZoomInstance;
import mx.effects.Effect;
import mx.containers.Panel;
import mx.managers.PopUpManager;
import mx.core.IFlexDisplayObject;
public var i:int=0;
public function cr():void{
var p:Panel=new Panel();
i++;
p.name='window_'+i;
p.title='Lex_'+i;
p.width=150;
p.height=100;
p.x=int(Math.random()*(screen.width-p.width));
p.y=int(Math.random()*(screen.height-p.height));
var b:Button=new Button();
b.label='min';b.name=p.name;
b.addEventListener(MouseEvent.CLICK,min);
p.addChild(b);
PopUpManager.addPopUp(p,this);
//this.addChild(p);
}
public function min(e:Event):void{
var winName:String=e.target.name;
WinBar.addChild(systemManager.getChildByName(winName));
}
]]>
</mx:Script>
<mx:Button x="25" y="22" label="Создать окно" click="cr()"/>
<mx:ApplicationControlBar height="75" id="WinBar" width="80%" horizontalCenter="0" bottom="10">
</mx:ApplicationControlBar>
</mx:Application>
ArgumentError: Error #2025: The supplied DisplayObject must be a child of the caller. at flash.display::DisplayObjectContainer/getChildIndex() at mx.managers::SystemManager/getChildIndex()[C:\dev\GMC\sdk\frameworks\mx\managers\SystemManager.as:1251] at mx.managers::SystemManager/mx.managers:SystemManager::mouseDownHandler()[C:\dev\GMC\sdk\frameworks\mx\managers\SystemManager.as:2417] |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Удалять попап надо. Кстати, описанной ошибки я получить не смог.
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
<![CDATA[
import mx.controls.Button;
import mx.effects.effectClasses.ZoomInstance;
import mx.effects.Effect;
import mx.containers.Panel;
import mx.managers.PopUpManager;
import mx.core.IFlexDisplayObject;
public var i:int=0;
public function cr():void{
var p:Panel=new Panel();
i++;
p.name='window_'+i;
p.title='Lex_'+i;
p.width=150;
p.height=100;
p.x=int(Math.random()*(screen.width-p.width));
p.y=int(Math.random()*(screen.height-p.height));
var b:Button=new Button();
b.label='min';
b.name=p.name;
b.addEventListener(MouseEvent.CLICK,min);
p.addChild(b);
PopUpManager.addPopUp(p,this);
//this.addChild(p);
}
public function min(e:Event):void{
var win:Panel = (e.target as Button).parent as Panel; // :-)
PopUpManager.removePopUp(win);
WinBar.addChild(win);
}
]]>
</mx:Script>
<mx:Button x="25" y="22" label="Создать окно" click="cr()"/>
<mx:ApplicationControlBar height="75" id="WinBar" width="80%" horizontalCenter="0" bottom="10">
</mx:ApplicationControlBar>
</mx:Application>
|
|
|||||
|
Регистрация: Oct 2006
Сообщений: 44
|
Да спасибо. Так работает.
Кстати а почему классы так не называют ? Мне показалось это удобным ) во всплывающей подсказке такие классы всегда сверху. |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Если это ваш такой стандарт именования, то лучше никому свои проекты не показывать. А если показывать, то придерживаться официальных стандартов именования.
|
![]() |
![]() |
Часовой пояс GMT +4, время: 03:52. |
|
|
« Предыдущая тема | Следующая тема » |
|
|