Galera ando meu arrochado tocando o projeto mas assim q vai aparecendo algo vou colocando aqui. Uma coisa q fazia muito na epoca de programação desktop era o auto complete da data, ainda não ta certinho mas ja dar pra ir usando.
package br.com.webinovacoes.componentes.formularios
{
import mx.controls.DateField;
import mx.events.FlexEvent;
import mx.formatters.DateBase;
public class CampoData extends DateField{
// Dias nomes
private const diasNomes:Array = ["D","S","T","Q","Q","S","S"];
// Meses
private const mesesNomes:Array = ["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"];
/* Contrutor */
public function CampoData() {
super();
this.width=95;
dayNames=diasNomes;
monthNames=mesesNomes;
formatString=”DD/MM/YYYY”;
restrict=”0-9″;
editable=true;
addEventListener(FlexEvent.VALUE_COMMIT,completar);
}
/**
* Função para completar
*/
private function completar(event:FlexEvent):void {
var str:String = event.target.text as String;
if ( str.charAt(2) != “/” || str.charAt(5) != “/” ) {
var mask:String;
var dataAtual:Date = new Date();
if ( str.length == 2 ) {
mask = str.substr(0, 2) + “/” + (dataAtual.getMonth()+1).toString() + “/” + dataAtual.getFullYear();
event.target.text = mask;
} else if ( str.length == 4 ) {
mask = str.substr(0, 2) + “/” + str.substr(2,2) + “/” + dataAtual.getFullYear().toString();
event.target.text = mask;
} else if ( str.length == 6 ) {
mask = str.substr(0, 2) + “/” + str.substr(2,2) + “/” + str.substr(4, 4);
event.target.text = mask;
} else if ( str.length == 8 ) {
mask = str.substr(0, 2) + “/” + str.substr(2,2) + “/” + str.substr(4, 4);
event.target.text = mask;
}
}
if ( this.editable == true ) {
// Validar.dataField(event);
}
}
/**
* Tipo para validação
*/
[Inspectable(category="WebInovacoes")]
public function set valor (dataInformada:Date):void{
if (dataInformada!=null){
data=dataInformada;
selectedDate=dataInformada;
//text=dataInformada.getDate().toString()+ “/”+ (dataInformada.getMonth()+1).toString() + “/”+ dataInformada.getFullYear().toString();
var dia:String=dataInformada.getDate().toString();
if (dia.length ==1) dia = “0″+dia;
var mes:String= (dataInformada.getMonth()+01).toString() ;
if (mes.length ==1) mes = “0″+mes;
text=dia + “/”+ mes + “/”+ dataInformada.getFullYear().toString();
}
}
}
}
agora é só mudar o package e pronto.
Cheguei no flex trabalhando de forma errada, totalmente procedural que erdei do velho e bom VB. Minha necessidade era dentro de uma janela MDI chama a função que tava dentro do Menubar para abrir uma janela referente a solicitação. Mas pensando em manutenção e reutilização do código precisei reaproveitar uma rotina. Com isso não queria chapar Application.application no projeto.
Qual foi a solução
1º – Criar um evento personalizado
2º – Disparar o evento no systemManager
3º – Escutar o evento no MenuBar, tambem pelo systemManager
Criando o evento
package br.com.webinovacoes.eventos
{
import flash.events.Event;
import mx.managers.SystemManager;
public class EventMenuJanela extends Event
{
private var _janela:String;
public function get janela():String{
return this._janela;
}
public function set janela ( v:String):void {
this._janela = v;
/**
// Instancia, configura e dispara o ChangeEvent
var evt:EventMenuJanela = new EventMenuJanela(“janela”);
evt.janela= v;
dispatchEvent( evt );
*/
}
/** Construtor */
public function EventMenuJanela(type:String, bubbles:Boolean=false, cancelable:Boolean=false)
{
super(type, bubbles, cancelable);
}
override public function clone():Event {
return new EventMenuJanela ( type );
}
}
}
Disparando o evento
frm.addEventListener(MouseEvent.CLICK,function(event:MouseEvent):void{
// Instancia, configura e dispara o EventMenuJanela
evtMenuJanela = new EventMenuJanela("janela");
evtMenuJanela.janela = _service;
systemManager.dispatchEvent( evtMenuJanela );
});
Escutando o evento dentro do menubar
...
import br.com.webinovacoes.eventos.EventMenuJanela;
...
/**
* Inicia o Form
*/
private function inicia():void{
// Escuta o evento e redireciona para rotina interna do Menu
systemManager.addEventListener("janela",abreJanela);
}
Ta ai galera o arquivo para download
package br.com.webinovacoes.componentes.formularios
{
import mx.collections.ArrayCollection;
import mx.controls.Button;
import mx.controls.ComboBox;
import mx.rpc.events.ResultEvent;
import mx.rpc.remoting.RemoteObject;
public class Combo extends ComboBox
{
/////////////////////////////////////////////////////////////////////////////
// Declarações
/////////////////////////////////////////////////////////////////////////////
/**
* Nome do Servico q vai preencher o combo
*/
[Bindable]
private var lista:ArrayCollection;
private var cnn:RemoteObject ;
private var _service:String;
private var upd:Button;
private var frm:Button;
/////////////////////////////////////////////////////////////////////////////
public function Combo()
{
super();
/* */
cnn= new RemoteObject();
}
override protected function createChildren():void
{
super.createChildren();
if (upd == null)
{
upd = new Button();
upd.focusEnabled = false;
upd.label=”@Embed(‘../assets/Modernos/view-refresh.png’)”;
upd.x= this.width + 2;
upd.y = 2;
upd.toolTip=”Atualizar”;
addChild(upd);
}
if (frm == null)
{
frm = new Button();
frm.focusEnabled = false;
frm.x= this.width + 2;
frm.y =2;
frm.label=”@Embed(‘../assets/Modernos/add_16×16.png’)”;
frm.toolTip=”Abrir cadastro”;
addChild(frm);
}
}
private var _width:Number=new Number();
override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
{
super.updateDisplayList(unscaledWidth, unscaledHeight);
if (_width==0){
_width=width;
}
// it is a little bit hardcoded but I really don’t think this is going to be changed one day
upd.setActualSize(16, 15);
frm.setActualSize(16, 15);
setActualSize(_width , height);
upd.move(_width + 2 , 2);
frm.move(_width + upd.width + 4, 2);
}
/**
* @Selecina ID
* Seleciona ID
*/
[Inspectable(category="WebInovacoes")]
public function SelecionaId(value:Number):void{
//Also ensure it is not there in the dataProvider
var att:Object = new Object();
for ( var i:Number=0;i<=dataProvider.list.length-1;i++){
att=dataProvider.getItemAt(i);
if (att.id == value){
this.selectedIndex=i;
break;
}
}
}
/**
* Função para Buscar dados no servidor
*/
[Inspectable(category="WebInovacoes")]
public function set service (value:String):void{
if(value!=null){
_service=value;
atualiza();
}
}
/**
* Função para Buscar dados no servidor
*/
[Inspectable(category="WebInovacoes")]
public function atualiza ():void{
// Carrega Combo ECF
cnn.destination = _service+”Service”;
cnn.consulta();
/* Adiciona evento */
cnn.addEventListener(
ResultEvent.RESULT,
function(event:ResultEvent):void{
lista = event.result as ArrayCollection;
dataProvider =lista;
}
);
}
}
}
Arquivado em: Componentes Flex
Ainda em fase de construção componentes para formulario
package br.com.webinovacoes.componentes.formularios
{
import flash.events.KeyboardEvent;
import mx.containers.Canvas;
import mx.controls.*;
public class Formulario extends Canvas{
/**
* Constructor
*/
public function Formulario()
{
super();
addEventListener(KeyboardEvent.KEY_DOWN, enterNextFocus);
}
/**
* limpar Form
*/
public function limparForm(): void {
for each(var child:Object in getChildren()){
if (child is Campo){
var campo:Object = child.getChildren();
if (child.tabIndex==1){
var primeiroCampo:Object = campo[0];
}
switch(campo[0].className){
case “TextInput” || “TextArea” :
campo[0].text =”";
break;
case “DateField”:
campo[0].selectedDate=null;
break;
case “ComboBox”:
//campo[0].selected=0;
break;
case “NumericStepper”:
break;
case “RadioButton” || “CheckBox”:
break;
}
}
}
/* primeiro campo */
primeiroCampo.setFocus();
}
/**
* valida Form
*/
public function validaForm():Boolean{
return true;
}
/**
* Ao pressionar ENTER proximo focus
*/
private function enterNextFocus(event:KeyboardEvent) : void {
if (event.keyCode == 13) {
this.focusManager.setFocus(this.focusManager.getNextFocusManagerComponent());
this.focusManager.showFocus();
}
}
}
}