
esteeee!!!! como lo publico

Tutorial de Manejo de archivos en APOLLO con editor HTML (primera parte)
Ya sabemos que con Apollo podemos usar tecnologia Flash/Flex/Ajax y demas ( http://www.cristalab.com/blog/33654/adobe-apollo-programas-de-escritorio-con-flash-pdf-o-ajax ) para poder desarrollar aplicaciones de escritorios, casi un sueño hecho realidad para los que trabajamos en web, al fin podremos hacer cosas con un diseño realmente interesante, ademas de la funcionalidad y todo eso q la gente quiere para sus aplicaciones.
En este tutorial veremos las formas como abrir y cerrar documentos de manera BASICA, para mas detalles veremos en otro tutorial los tan famosos componentes Apollo
ahora si al codigo, basandonos en el tutorial de Zguillez
http://www.cristalab.com/tutoriales/217/guia-de-adobe-apollo-para-principiantes
empezamos aqui:
declaro mis variables
Código :
private var desk:File; private var file:File; private var fs:FileStream;
desk, nos almacenará la ruta donde vamos a trabajar, en este caso el ESCRITORIO
file, nos dira el nombre del archivo a abrir o grabar
fs, nos dará los metodos necesarios para abrir o grabar el archivo
pasamos a nuestros DOS metodos básicos, veamos uno por uno:
Código :
private function save():void{ file = desk.resolve(txt_file.text); fs.open(file, FileMode.WRITE); fs.writeUTFBytes(campo.text); fs.close(); }
bueno, mas facil imposible
file = desk.resolve(txt_file.text);
le decimos que nombre tendra nuestro archivo, en este caso lo colocaremos en un TextInput
fs.open(file, FileMode.WRITE);
llamamos a nuestro metodo open y le decimos que queremos hacer, el primer parametro es para decirle el nombre del archivo y el segundo es QUE queremos hacer, en este caso, escribir
fs.writeUTFBytes(campo.text); //**lineas abajo hablo de esto
aqui le mandamos el texto o contenido a grabar
fs.close();
y cerramos nuestro archivito
nuestro otro metodo porfavor:
Código :
private function open():void{ file = desk.resolve(txt_file.text); fs.open(file, FileMode.READ); var str:String = fs.readMultiByte(file.size, File.systemCharset); html.htmlText=str; campo.text=str; fs.close(); }
aqui lo unico distinto y que interesa para explicar es:
var str:String = fs.readMultiByte(file.size, File.systemCharset);
pues, lee el contenido del archivo y
html.htmlText=str;
campo.text=str;
esto nos lo muestra en nuestro diseño
hasta aqui considero que nada dificil, para hacerlo mas interesante aplique nuestro pequeño tutorial en un editor HTML basico, es la version inicial, asi que no sean muy exigentes:
nuestro diseño en flex

Código :
<?xml version="1.0" encoding="utf-8"?> <mx:ApolloApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="520" height="362" initialize="init()"> <mx:Script source="metodos.as" /> <mx:HTML width="240" id="html" right="10" bottom="39" top="56"/> <mx:TextArea width="240" id="campo" textInput="convierte()" left="10" bottom="39" top="56"/> <mx:TextInput width="178" id="txt_file" bottom="10" right="268" text="test.html"/> <mx:Button label="Open" click="open()" left="10" bottom="10"/> <mx:Button x="70" y="1" label="B" width="30" id="btn_B" click="negrita()"/> <mx:Button label="U" width="30" id="btn_U" click="subrayado()" x="99" y="1"/> <mx:Button x="128" y="1" label="I" width="30" id="btn_I" click="cursiva()"/> <mx:Button label="Save" bottom="10" right="196" click="save()"/> <mx:Button x="10" y="1" label="New" click="nuevo()"/> <mx:Button x="354.5" y="26" label="Refresh" click="actualizar()"/> <mx:Button x="10" y="26" label="Table" width="54" id="btn_table" click="miTabla()"/> <mx:Button x="194" y="1" label="link" width="33" id="btn_link" click="link()"/> <mx:NumericStepper x="85" y="26" id="col" minimum="1" maximum="5" value="1" width="40"/> <mx:NumericStepper x="148" y="26" id="row" minimum="1" maximum="5" value="1" width="38"/> <mx:Label x="132" y="28" text="C:" width="18"/> <mx:Label x="68" y="28" text="R:" width="18"/> <mx:HRule x="10" y="46" width="498" height="5"/> <mx:ColorPicker id="cp" x="194" y="26"/> <mx:ColorPicker x="158" y="2" id="cpFont" change="color()"/> <mx:TextInput x="227" y="1" text="http://" id="txt_link" width="120"/> <mx:Button x="357" y="1" label="img" width="33" id="btn_img" click="img()"/> <mx:TextInput x="391" y="1" width="117" id="txt_img"/> </mx:ApolloApplication>
como veran llamo aqui
<mx:Script source="metodos.as" />
a mis metodos y demas AS usado, un poco para ordenar nuestro trabajo
aqui esta señores:
Código :
// ActionScript file import flash.filesystem.FileMode; import flash.filesystem.File; import flash.filesystem.FileStream; import mx.controls.textClasses.TextRange; // private var desk:File; private var file:File; private var fs:FileStream; private function init():void{ desk = File.desktopDirectory; fs = new FileStream(); } private function convierte():void{ html.htmlText = campo.text; } //---------------------------solo esto es APOLLO private function save():void{ file = desk.resolve(txt_file.text); fs.open(file, FileMode.WRITE); fs.writeUTFBytes(campo.text); fs.close(); } private function open():void{ file = desk.resolve(txt_file.text); fs.open(file, FileMode.READ); var str:String = fs.readMultiByte(file.size, File.systemCharset); html.htmlText=str; campo.text=str; fs.close(); } //------------------------- fin de APOLLO private function actualizar():void{ html.htmlText = campo.text; } private function miSeleccion(que:String, action:int):void{ var b :int = campo.selectionBeginIndex; var e :int = campo.selectionEndIndex; if ( b != e ){ var str:String = campo.text; var par:String = str.substring(0, b); var part:String = str.substring(b, e); var parte:String = str.substring(e, campo.length); switch(action){ case 0: campo.text = par+"<"+que+">"+part+"</"+que+">"+parte; break; case 1: campo.text = par+"<font color=' "+que+" '>"+part+"</font>"+parte; break; case 2: campo.text = par+"<a href=' "+que+" '>"+part+"</a>"+parte; break; case 3: campo.text = par+"<img src='"+que+"'>"+part+"</img>"+parte; break; } } } //FORMAT TEXT private function negrita():void{ miSeleccion("b",0); } private function cursiva():void{ miSeleccion("i",0); } private function subrayado():void{ miSeleccion("u",0); } private function color():void{ miSeleccion(cpFont.selectedColor.toString(16),1); } private function link():void{ miSeleccion(txt_link.text,2); } private function img():void{ miSeleccion(txt_img.text,3); } private function miTabla():void{ var Col:int= col.value; var Row:int= row.value; var miT:String="<table border='1' width='100%' bgcolor='#"+cp.selectedColor.toString(16)+"'> \n"; var miC:String=""; for(var i:int=0; i<Col; i++){ miT += " <TR>\n"; for(var j:int=0; j<Row; j++){ miT += " <TD>texto</TD>\n"; } miT += " </TR>"; miT += "\n"; } miT += "</table>"; campo.text = miT; } private function nuevo():void{ campo.text = "<html>\n"; campo.text += " <body>\n"; campo.text += " <p>\n\n\n\n\n\n </p>\n"; campo.text += " </body>\n"; campo.text += "</html>\n"; }
los demas metodos que ven no los explico porq es programacion con flex, y ese no es el tutorial, solo es un ejemplo basico.
Listo, eso es todo, como nota importante, los archivos que van a grabar seran en el Escritorio porque use:
desk = File.desktopDirectory;
y obviamente para abrir un archivo HTML, tiene que existir primero en el escritorio, sino les sale un error (no es parte del tutorial)
Para la gente que esta esperando la explicacion del
fs.writeUTFBytes(campo.text);
var str:String = fs.readMultiByte(file.size, File.systemCharset);
pues aqui va:
en apollo, nos da metodos de la clase FileStream, que nospermite grabar y leer, pero no solo texto, sino una serie de datos distintos, claro, optimizar tiempos seria la explicacion aca, ademas de tener un mejor manejo de data, aqui les detallo algunos
empezamos con READ:
readByte():int
readBytes(bytes:ByteArray, offset:uint = 0, length:uint = 0):void
readDouble():Number
readFloat():Number
readInt():int
readMultiByte(length:uint, charSet:String):String
readObject():*
readShort():int
readUnsignedByte():uint
readUnsignedInt():uint
readUnsignedShort():uint
readUTF():String
readUTFBytes(length:uint):String
esos son, creo q si se entienden casi todos, lee los distintos tipos de datos segun los necesitemos, como vieron deje el object resaltado pues este para los amantes de remoting y amf nos levanta un objecto traido desde AMF
ahora WRITE:
writeBoolean(value:Boolean):void
writeByte(value:int):void
writeBytes(bytes:ByteArray, offset:uint = 0, length:uint = 0):void
writeDouble(value:Number):void
writeFloat(value:Number):void
writeInt(value:int):void
writeMultiByte(value:String, charSet:String):void
writeObject(object:):void
writeShort(value:int):void
writeUnsignedInt(value:uint):void
writeUTF(value:String):void
writeUTFBytes(value:String):void
bueno, creo q el nombre del metodo lo dice todo, lo bueno es que podemos manejar todo tipo de dato sin complicaciones
entonces señores, realmente el uso de Apollo en este tutorial es minimo, pero de lo mas interesante, con unas pocas horas hice este editor, espero que les sirva de guia.
[ Archivos del tutorial ]