Создание кнопки при помощи графических средств Adobe Flash – это дело нескольких кликов, но когда мне понадобилось сделать тоже самое в чистом ActionScript, то я встал в тупик. Правда ненадолго.
Предлагаю вашему вниманию класс кнопки с текстом и, естественно, действием на клик.
package ui { import flash.display.Shape; import flash.display.SimpleButton; import flash.display.Sprite; import flash.events.Event; import flash.text.TextField; import flash.text.TextFormat; import flash.text.TextFieldAutoSize; import flash.events.MouseEvent; public class Button extends Sprite { private var button_obj : SimpleButton; private var _label : String; private var _width : uint = 100; private var _height : uint = 30; private var upColor : uint = 0xC0C0C0; private var overColor : uint = 0xE2E2E2; private var downColor : uint = 0xFFFFFF; private var _handler : Function; public function set click(handler : Function) : void { _handler = handler; addEventListener(MouseEvent.CLICK, clickHandler); } private function clickHandler(e : MouseEvent) : void { _handler(); } public function Button( width : uint = 0, height : uint = 0, label : String = '') { _label = label; if (width > 0) _width = width if (height > 0) _height = height button_obj = new SimpleButton; button_obj.downState = stateObject(downColor, _width, _height); button_obj.overState = stateObject(overColor, _width, _height); button_obj.upState = stateObject(upColor, _width, _height); button_obj.hitTestState = stateObject(upColor, _width, _height); button_obj.useHandCursor = true; addChild(button_obj); var text_label : TextField = createLabel(); text_label.x = Math.round(width * 0.5 - text_label.width * 0.5); text_label.y = Math.round(height * 0.5 - text_label.height * 0.5); addChild(text_label); } private function stateObject( color : uint, width : uint, height : uint) : Shape { var shape : Shape = new Shape; shape.graphics.beginFill(color); shape.graphics.drawRect(0, 0, width, height); shape.graphics.endFill(); return shape; } private function createLabel() : TextField { var format : TextFormat = new TextFormat('_sans', 11); var text_label : TextField = new TextField(); text_label.selectable = false; text_label.mouseEnabled = false; text_label.autoSize = TextFieldAutoSize.LEFT; text_label.defaultTextFormat = format; text_label.text = _label; return text_label; } } }
По сути это класс SimpleButton, с присоединённым текстом, который выравнен по центру. Использовать его можно, например, так:
// button Hello var butt_hello : Button = new Button(100, 30, 'Hello'); butt_hello.x = 10; butt_hello.y = 210; butt_hello.click = function () : void { trace('Hello!') };
Комментариев нет:
Отправить комментарий