Показать сообщение отдельно
Старый 12.10.2010, 14:20
KiL33 вне форума Посмотреть профиль Отправить личное сообщение для KiL33 Найти все сообщения от KiL33
  № 7  
Ответить с цитированием
KiL33
 
Аватар для KiL33

Регистрация: Jul 2007
Адрес: Гражданин Российской Федерации
Сообщений: 1,122
Отправить сообщение для KiL33 с помощью ICQ
Вдохновившись сообщением от Wolsh, сваял вот такой примерчик

Main
Код AS3:
package {
 
    import components.ManagerObjects;
 
    import flash.display.Sprite;
 
    [SWF(backgroundColor="0xFFFFFF", width="800", height="600", frameRate="30")]
 
    public class Main extends Sprite {
 
        private const PAD:uint = 10;
 
        //CONSTRUCTOR
        public function Main() {
            init();
        }
 
        private function init():void {
 
 
            //                 сообщение по дифолту | высота текстФилда | имя кнопок | кол.во | сдвиг
            var managerObject:ManagerObjects = new ManagerObjects("ТЫЦ", 100, "Button", 5, PAD);
            addChild(managerObject);
            managerObject.y = PAD
            managerObject.x = PAD
 
        }
 
    }//class
}//package
ManagerObjects, здесь тусят все объекты, которые у нас есть(кнопки, текстФиелд)
Код AS3:
package components {
 
	import components.ManagerButton;
	import components.ManagerText;
 
	import events.CommonEvent;
 
	import flash.display.Sprite;
 
	public class ManagerObjects extends Sprite {
 
		//VARIABLES
		private var mButton:ManagerButton;
		private var mText:ManagerText;
 
		//CONSTRUCTOR
		public function ManagerObjects(name:String, heightText:uint, nameButton:String, numButton:uint, PAD:uint){
 
			init(name, heightText, nameButton, numButton, PAD)
 
		}
 
		private function init(name:String, heightText:uint, nameButton:String, numButton:uint, PAD:uint):void {
 
			mText = new ManagerText("ТЫЦ", 100)//дали первоначальное сообщение текст фиелду, задали высоту текст фиелду
			addChild(mText);
 
			//добавили кнопки
			mButton = new ManagerButton("Button", 5, PAD);// имя кнопок | кол.во | сдвиг
			addChild(mButton);
			mButton.y = mText.height+PAD; // выровняли кнопки по высоте с текст филдом
			mText.width = mButton.width; // выровняли текст фиелд по соотношению с кол.вом кнопок 
 
			mButton.addEventListener(CommonEvent.MESSAGES, setupMes); // получаем события при нажатии на кнопки
		}
 
		private function setupMes(e:CommonEvent):void{
 
			mText.sendMessage(e.txtMessage); //отправили данные манагерТексту
 
		}
	}
}
ManagerButton, здесь тусят только кнопки
Код AS3:
package components {
	import controls.SingleButton;
 
	import events.CommonEvent;
 
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
 
	public class ManagerButton extends Sprite {
		//VARIABLES
		private var button:SingleButton;
 
		//CONSTRUCTOR	
		public function ManagerButton(name:String, num:uint, PAD:uint) {
 
			init(name, num, PAD);
		}
 
		private function init(name:String, num:uint, PAD:uint):void {
 
			for(var i:uint = 0; i < num; i++){
			button = new SingleButton(name+ " - "+i);
			button.x = Number(button.width+PAD)*i;
			button.name = name+i;	
			button.addEventListener(MouseEvent.MOUSE_DOWN, mouseDown);
			addChild(button);
 
			}
		}
		private function mouseDown(e:MouseEvent):void{
 
			var txtMessage:String = e.currentTarget.name;
 
			dispatchEvent(new CommonEvent(CommonEvent.MESSAGES, txtMessage));
			//trace(e.currentTarget.name+"")
 
		}
 
	}//class
}//package
ManagerText, здесь основная цель манагера заключается в получении и отправке обновленных данных самому текстФиелду, но по сути в данном примере, можно было и без него обойтись, и отправлять данные на прямую.
Код AS3:
package components {
	import events.TextFieldEvent;
 
	import flash.display.Sprite;
 
	public class ManagerText extends Sprite {
 
		//VARIABLES
		private var textInput:TextInput;
 
		//CONSTRUCTOR
		public function ManagerText(message:String, heightNum:uint){
 
			init(message, heightNum);
 
		}
 
		private function init(message:String, heightNum:uint):void{
 
			textInput =	new TextInput(message, heightNum);
			addChild(textInput);
 
		}
		public function sendMessage(txt:String):void {
 
			textInput.replaceMessage(txt);
 
		}
 
	}//class
}//package
TextInput, собственно сам текстФиелд.
Код AS3:
package components {
 
	import flash.display.Sprite;
	import flash.text.TextField;
	import flash.text.TextFieldType;
 
 
	public class TextInput  extends Sprite {
 
		//VARIABLES
		private var txt:TextField;
 
 
		//CONSTRUCTOR
		public function TextInput(message:String, heightNum:uint){
 
			init(message, heightNum);
 
		}
 
		private function init(message:String, heightNum:uint):void{
 
			txt = new TextField();
			txt.type = TextFieldType.INPUT;
			txt.height = heightNum;
			txt.width = 400;
			txt.border = true;
			txt.multiline = true;
			txt.wordWrap = true;
			txt.text = message;
			addChild(txt);	
		}
 
		public function replaceMessage(_txt:String):void {
 
			txt.text = _txt;
 
		}
 
	}//class
}//package
SingleButton, класс реализует кнопку с текстфилдом.
Код AS3:
package controls {
 
	import flash.display.Sprite;
	import flash.events.MouseEvent;
	import flash.text.TextField;
	import flash.text.TextFormat;
	import flash.text.TextFieldAutoSize;
 
	public class SingleButton extends Sprite {
 
		private var txt:TextField;
		private var label:String;
		private const WIDTH:uint = 50;
		public const HEIGHT:uint = 30;
		private var	sprite:Sprite;
		private var format:TextFormat;
 
		//CONSTRUCTOR
		public function SingleButton(name:String) {
 
			label = name;
			init(label);
		}
 
		private function init(label:String):void {
 
			format = new TextFormat();
			txt = new TextField;
			addChild(txt);
			txt.text = label
			txt.autoSize = TextFieldAutoSize.LEFT;
			//format
			format.font = "Verdana";
                        format.color = 0x000000;
                        format.size = 20;
 
                        txt.height = HEIGHT;
 
			txt.setTextFormat(format);  			
                        txt.defaultTextFormat = format;
                        txt.selectable = false;
 
			addEventListener(MouseEvent.ROLL_OVER, onRollOver);
			addEventListener(MouseEvent.ROLL_OUT, onRollOut);
 
			sprite = new Sprite();
			sprite.graphics.beginFill(0xFFFFFF);
			sprite.graphics.drawRoundRect(0, 0, txt.width, HEIGHT, 10, 10);
			sprite.graphics.endFill();
			addChild(sprite);
			sprite.addChild(txt);
		}
 
		private function onRollOver(event:MouseEvent):void {
			updateGraphics(0x000000);
		}
 
		private function onRollOut(event:MouseEvent):void {
			updateGraphics(0xFFFFFF);
			format.color = 0x000000;
			txt.setTextFormat(format);  
		}
		private function updateGraphics(color:uint):void {
			graphics.clear();
 
			sprite.graphics.beginFill(color);
			sprite.graphics.drawRoundRect(0, 0, txt.width, HEIGHT, 10, 10);
			sprite.graphics.endFill();
			format.color = 0xFFFFFF;
			txt.setTextFormat(format);  			
		}
 
 
	}//class
}//package
В проектировании приложений очень помогает создание схем классов, их взаимодействие. Не ленитесь чертить схемки. Даже если вы один задействованы в проекте. В последствии, если придется вернуться к проекту, вспомнить, как в нем всё устроено, благодаря схемам, будет на много проще.
..и конечно же
Почаще слушайте человека с ником Wolsh, плохого никогда не посоветует
Вложения
Тип файла: zip src.zip (8.5 Кб, 49 просмотров)


Последний раз редактировалось KiL33; 12.10.2010 в 14:34.