Calendario

Posted in: ActionScript- jun 24, 2004 16 Comments

Como alguno de ustedes saben, estoy trabajando en “mini-blog” en Flash, el cual esta un poco olvidado.. :( .
Para tener un Blog es esencial tener un calendario, Flash tiene el Componente DateChooser, pero en lo personal ocupo los componentes muy rara vez..
Esto dio como resultado un esto:

[FLASH]http://www.tmeister.net/archivos/calendario.swf ,160, 150 [/FLASH]

Es el tipico Calendario el cual marca por default el dia actual. El Calendario esta creado en su totalidad con ActionScript excepto los botones y el campo del mes. (no los hice por flojera.. jeje), tal vez despues cree una Clase de esto..

En fin aqui les dejo los archivos para su deleite. :D

Por cierto el SWF solo pesa 2Kb.

Descargar

  • http://www.nodani.com NODANI

    Oye muy bien! Pero te tengo que decir un par de cosillas, en primer lugar podrias comentar el FLA que no se entiende nada y explikar un pokillo su funcionamiento para que nos maravillemos aun mas!! Otra cosilla es que al llegar a ENERO 2005 se para! no sigue avanzando y para atras pues llegue hasta el 2000 ypodia haber seguido asi que no se como esta la cosa por ahi, eso si muy cool. Tambien falto una “mega-funcion” para señalar dias en los que haya post y/u otras cosillas, aunque kreo que eso ya nos toka mas a nosotros y por eso estoy trabajando alli desde ahora mismo! Por lo demas un gran trabajo! y si puedes echarle un vistazo a los del enero 2005 mejor que mejor! saludetes!

  • http://www.tmeister.net Tmeister

    Wenas
    Lo de los comentarios al Fla y la “Mega-Funcion” cuando tenga un tiempo lo hago.. :D

    En cuanto a que solo llega al mes de Enero del 2005 es una validacion que se me olvido quitar.. jejeje

    solo cambia esto

    sig_mc.onRelease = function() {
    	if (anioActual<=anioReal) {
    		if (mesActual<11) {
    			verMes(++mesActual, anioActual);
    		} else {
    			mesActual = 0;
    			verMes(mesActual, ++anioActual);
    		}
    	}
    };
    

    Por esto.

    sig_mc.onRelease = function() {
    	if (mesActual<11) {
    		verMes(++mesActual, anioActual);
    	} else {
    		mesActual = 0;
    		verMes(mesActual, ++anioActual);
    	}
    };
    

    Lo de los cometarios es un mal habito casi no los uso.. pero prometo que empezare a hacerlo…

    Saludos!! 8)

  • http://www.nodani.com NODANI

    Bueno yo tampoko suelo usar muchos los comentarios, la verdad es que esta bastante bien el code, ya “hice” lo del boton mi codigo es jodidamente cutre [poko elavorado] de todas formas te dejo el FLA, en http://www.nodani.com/calendar.fla y el codigo aki

    _lockroot = true;
    dia_array = ["Do", "Lu", "Ma", "Mi", "Ju", "Vi", "Sa"];
    mes_array = ["Ene", "Feb", "Mar", "Abr", "May", "Jun", "Jul", "Ago", "Sep", "Oct", "Nov", "Dic"];
    mesII_array = ["Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"];
    dias_activos = ["14/5/2004", "30/6/2004", "15/7/2004", "30/7/2004"];
    acciones = ["ir a la playa", "comer chino", "comprar coche", "visitar padres"];
    function init(pos_x, pos_y) {
    	f_date = new Date();
    	anioReal = anioActual=f_date.getYear();
    	anio = (f_date.getYear()+1900);
    	mesReal = mesActual=mes=f_date.getMonth();
    	mes_txt.text = mesII_array[mes]+" "+Number(anioActual+1900);
    	dia = f_date.getDate();
    	diaName = f_date.getDay();
    	big = makeSquare(this, 154, 119, 151, "0xffffff", "");
    	big._y = pos_x;
    	big._x = pos_y;
    	for (var a in dia_array) {
    		clip = makeSquare(big, 22, 17, a, "0xEBEBEB", dia_array[a]);
    		clip._x = a*22;
    	}
    	mes_temp = (Number(mesReal)<10) ? "0"+(Number(mesReal+1)) : Number(mesReal+1);
    	creaDias();
    }
    function makeDate(te) {
    	te = te.split(" ");
    	te_fe = te[0].split("-");
    	te_anio = te_fe[0];
    	te_mes = (Number(te_fe[1])<10) ? te_fe[1].substr(1, 1) : te_fe[1];
    	te_dia = (Number(te_fe[2])<10) ? te_fe[2].substr(1, 1) : te_fe[2];
    	te_hora = te[1].substr(0, te[1].length-3);
    	te_fecha = te_dia+" de "+mesII_array[te_mes-1]+" del "+te_anio+" @ "+te_hora;
    	return te_fecha;
    }
    function verMes(mesV, anio) {
    	for (nodani=250; nodani<300; nodani++) {
    		_root["tempo"+nodani].removeMovieClip();
    	}
    	trace(mes+" "+anio);
    	f_date = new Date();
    	if (mesV == mesReal) {
    		dia = f_date.getDate();
    		diaName = f_date.getDay();
    	} else {
    		dia = null;
    		diaName = null;
    	}
    	f_date.setYear(anio);
    	anio = (f_date.getYear()+1900);
    	f_date.setMonth(mesV);
    	mes = f_date.getMonth();
    	mes_txt.text = mesII_array[mesV]+" "+Number(anio+1900);
    	big = makeSquare(this, 154, 119, 151, "0xffffff", "");
    	big._y = 0;
    	big._x = 0;
    	for (var a in dia_array) {
    		clip = makeSquare(big, 22, 17, a, "0xEBEBEB", dia_array[a]);
    		clip._x = a*22;
    	}
    	mes_temp = (Number(mes)<10) ? "0"+(Number(mes+1)) : Number(mes+1);
    	creaDias();
    }
    function makeSquare(tmp_mc, ancho, largo, p, col, label) {
    	var tm_mc = tmp_mc.createEmptyMovieClip("tempo"+p, p);
    	tm_mc.beginFill(col);
    	tm_mc.lineStyle(1, 0xffffff);
    	tm_mc.lineTo(0, 0);
    	tm_mc.lineTo(0+ancho, 0);
    	tm_mc.lineTo(0+ancho, 0+largo);
    	tm_mc.lineTo(0, 0+largo);
    	tm_mc.lineTo(0, 0);
    	format = new TextFormat();
    	format.font = "Verdana";
    	format.size = 10;
    	format.bold = true;
    	format.color = 0x990000;
    	tm_mc.createTextField("label_txt", p+100, 2, 0, 0, 0);
    	tm_mc.label_txt.selectable = false;
    	tm_mc.label_txt.html = true;
    	tm_mc.label_txt.text = label;
    	tm_mc.label_txt.autoSize = true;
    	tm_mc.label_txt.setTextFormat(format);
    	return tm_mc;
    }
    function creaDias() {
    	var d = b=0;
    	var c = 1;
    	var t_date = new Date();
    	var ya = false;
    	var prof = 0;
    	for (var a = 0; a<=31; a++) {
    		t_date.setYear(anio, mes, a);
    		if (t_date.getMonth() == mes) {
    			if (!ya) {
    				t_dateb = new Date();
    				t_dateb.setYear(anio, mes, 1);
    				ini = t_dateb.getDay();
    				c = (ini == 0) ? 0 : c;
    				b = ini-1;
    				ya = true;
    			}
    			hecho = 0;
    			for (kil=0; kil<dias_activos.length; kil++) {
    				prof = big.getNextHighestDepth();
    				trace(prof);
    				amparo = new Array();
    				amparo = dias_activos[kil].split("/");
    				if (amparo[1] == (mes+1) && amparo[2] == anio) {
    					dia = amparo[0];
    				} else {
    					dia = 400;
    				}
    				if (t_date.getDate() == dia) {
    					dia_mc = makeBoton(prof, ++d, acciones[kil]);
    					hecho = 1;
    				}
    			}
    			//end del for
    			if (hecho == 0) {
    				dia_mc = makeSquare(big, 22, 17, prof, "0xffffff", ++d);
    			}
    			b = (ini%7 == 0) ? 0 : ++b;
    			c = (ini%7 == 0) ? ++c : c;
    			dia_mc._x = b*22;
    			dia_mc._y = c*17;
    			ini++;
    		}
    	}
    }
    ant_mc.onRelease = function() {
    	if (mesActual>0) {
    		verMes(--mesActual, anioActual);
    	} else {
    		mesActual = 11;
    		verMes(mesActual, --anioActual);
    	}
    };
    sig_mc.onRelease = function() {
    	if (mesActual<11) {
    		verMes(++mesActual, anioActual);
    	} else {
    		mesActual = 0;
    		verMes(mesActual, ++anioActual);
    	}
    };
    function makeBoton(p, label, accion) {
    	var tm_mc = activo.duplicateMovieClip("tempo"+p, p);
    	format = new TextFormat();
    	format.font = "Verdana";
    	format.size = 10;
    	format.bold = true;
    	format.color = 0x990000;
    	tm_mc.createTextField("label_txt", p+100, 2, 0, 0, 0);
    	tm_mc.label_txt.selectable = false;
    	tm_mc.label_txt.html = true;
    	tm_mc.label_txt.text = label;
    	tm_mc.label_txt.autoSize = true;
    	tm_mc.label_txt.setTextFormat(format);
    	tm_mc.bt.onRelease = function() {
    		trace(accion);
    	};
    	return tm_mc;
    }
    init(0, 0);
    

    he REUTILIZADO lo que teniais en cuanto a lo del boton y tal , en definitiva que como no lo entendia muy bien pues he tokado el menos codigo posible, y usado variables “estranbotikas a fin de no meterme con ninguna tuya” lo uniko que necesitas es añadir a tu fla un MC [llamado "activo" que contenga a un boton llamado "bt" de 22x17 color 0xCCCCCC] o bajarse el fla que puse,usa unos arrays uno de fechas dd/mm/aaaa y otro de acciones, por el momento son traces normales. En fin si ustedes me lo permiten pues lo usare en algun site ok? saludetes

  • http://www.nodani.com NODANI

    oups! se me corto el post a mitad, bueno mejor bajate el fla, y solo que usa esos dos arrays del principio y un par de comprobaciones despues, tb uso un MC llamado “activo” que contiene a un boton “bt” de 22×17 de color gris, en fin saludetes

  • http://www.tmeister.net Tmeister

    Umm nice…

    Por cierto lo del post fue por que hay un pequeño bug al insertar codigo no parsea bien los < y los >

    Ya lo arreglare…

    Saludos!! 8)

  • http://www.therror.uni.cc THERROR

    otro pequeño bug… para atrás, después del 2001 sigue el 3899

    muy bueno, saludos

  • NibblesMX

    yo habia hecho un calendario hace tiempo. los campos no los generaba con AS, pero que yo recuerde, no era tanto codigo como el de nodani.

    http://www.danov.com/~evilnibble/calendario.html

  • http://www.tmeister.net Tmeister

    Bueno, aqui las funciones mas “grandes” son makeSquare que genera los cuadros de los dias y la funcion creaDias que crea y acomoda los dias segun el mes, por lo demas el codigo es similar al tuyo. Pero siempre es bueno tener varias opciones :D

    Saludos!! 8)

  • http://www.nodani.com NODANI

    bueno el codigo no es mio, Nibbles, sino del maestro Tmeister, yo solo añadi lo que se pudieran señalar diferentes dias con diferentes acciones, por lo demas el tuyo tambien esta muy bien, solo un pekeño error, selecciona el dia en todos los meses, es decir, si estamos en 4 de julio , tb señalas el 4 d agosto, d septiembre etc etc, saludetees!

  • alfge

    qe tal,,,baje el calendario.fla el de tmeister pero no lo abre…..dice “formato de archivo no esperado” y el .swf al ejecutarlo solo sale la parte del mes ,,pero no sirve los botones,,solo esta estatico,,,,
    estoy utilizando flaxh mx, no se si tenga qe ver la version,,,,alguien podria despejar la duda..gracias

    • http://Web yesid valencia

      seria buen un video turorial mostrando los pasos para crear el calendario en flash.

  • Pingback: .:: klr20mg ::. Una dosis diaria de …. » Blog Archive » Un poco de decencia por favor :)

  • Pingback: sum

  • Víctor

    Y como se insertaria las acciones para los dias?,por ejemplo, que el 25 de diciembre te lo marque como Navidad.

  • Pingback: bentley

  • Jack7

    a veces lo simple es suficiente por bueno
    grax mil