May 7
继续LCCS的学习
如下图:
点击在新窗口中浏览此图片
选择第一项:Room Console
点击ADD按钮 添加如下信息
点击在新窗口中浏览此图片
完成后点击
点击在新窗口中浏览此图片

就可以进入协作管理界面了
在里面就可以管理用户的权限 以及分配文件 查看流量 访问日志等信息
如图所示:
点击在新窗口中浏览此图片
Tags:
May 7
LCCS全称Adobe LiveCycle Collaboration Service译过来就是Adobe LiveCycle协作服务
LCCS能干什么?

我不介绍些官方说的那些功能了,反正我现在只想把LCCS拿来做个小型聊天室。像某某博客上的那种,但是被加密了,所以自己零开始。

首先得去https://afcs.acrobat.com上注册个帐号
登录后在里面点击下载SDK即可 我装了AIR所以直接被安装了

对 就是LCCS SDK Navigator

LCCS SDK Navigator这玩意很牛逼 几乎把LCCS的所有都做在了里面 但是俺鸟语很烂

直接来连接下刚刚注册的那帐号
LCCS SDK Navigator打开后 点击左侧的选项卡“开发工具”选择3个按钮中的“ROOM Console”

待续……
Jan 12
早就想写篇flex与flash怎样读取sqlite数据库的文章了
网上大多都是flex的AIR中直接使用SQL类去连接的例子
咱做的是RIA
所以我就上这方面的东西

Flex 3.4(4.0其实也差不多),amfphp 1.9(唉,竟然是绝唱了),as3,sqlite 3.0,PHP 5.26

FLEX------------------------------------------------------------------------------------------
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" horizontalAlign="center" initialize="init();" >
<mx:Script>
    <![CDATA[
      import mx.utils.ArrayUtil;
      import mx.collections.ArrayCollection;
      import mx.controls.Alert;
      import flash.events.Event;
      import flash.events.MouseEvent;
      import mx.events.CloseEvent;
      import mx.rpc.events.ResultEvent;
      import mx.rpc.events.FaultEvent;
      import mx.managers.PopUpManager;
      
      [Bindable]
      private var sqlitedata:ArrayCollection;
      [Bindable]
      public var news:News;
      
      private function init():void
      {
        myamf.getNews.send();
      }
      
      private function getData(evt:ResultEvent):void
      {
        sqlitedata = new ArrayCollection(ArrayUtil.toArray(evt.result));
      }
      
      private function onFault(evt:FaultEvent):void
      {
        Alert.show(evt.fault.faultString, evt.fault.faultCode.toString());
      }
      
      private function onSelected(evt:Event):void
      {
        news= News(DataGrid(evt.target).selectedItem);
      }
      
    ]]>
  </mx:Script>
  
  <mx:RemoteObject id="getNews" source="NewsClass"
           destination="AMFPHP" fault="onFault(event)" showBusyCursor="false">
    <mx:method name="getNews" result="getData(event)" fault="onFault(event)" />
  </mx:RemoteObject>
  
  <mx:DataGrid id="dg"
         dataProvider="{sqlitedata}" width="600" height="300" horizontalCenter="0" y="0" editable="false" enabled="true" variableRowHeight="true">
    <mx:columns>
      <mx:DataGridColumn dataField="id" headerText="编号" resizable="false" width="40" textAlign="center"/>
      <mx:DataGridColumn dataField="name" headerText="标题" resizable="false" sortable="false" width="560"/>
    </mx:columns>
  </mx:DataGrid>
  
</mx:Application>


再来创建个类

package
{
  [RemoteClass(alias = "NewsClass")]
  [Bindable]
  public class News
  {
    public var id:String;
    public var name:String;
    
    public function News()
    {
    }
  }
}


基本上完成?no,还要给flex配置个参数,就像c#的config文件一样,这个很重要,不能忘(不过似乎可以用的别的方法)


<?xml version="1.0" encoding="UTF-8"?>
<services-config>
  <services>
    <service id="amfphp-flashremoting-service" class="flex.messaging.services.RemotingService" messageTypes="flex.messaging.messages.RemotingMessage">
      <destination id="AMFPHP">
        <channels>
          <channel ref="my-amfphp"/>
        </channels>
        <properties>
          <source>*</source>
        </properties>
      </destination>
    </service>
  </services>
  <channels>
    <channel-definition id="my-amfphp" class="mx.messaging.channels.AMFChannel">
      <endpoint uri="http://localhost/gateway.php" class="flex.messaging.endpoints.AMFEndpoint"/>
    </channel-definition>
  </channels>
</services-config>


http://localhost/gateway.php的路径必须正确

下面就来弄amfphp那边的东西
NewsClass.php
<?php
include_once ("X.php");
class NewsClass{
public function getNews ()
    {
        $db = new PDO("sqlite:news.db");
        $conn = $db->prepare('select * from news');
        $conn->execute();
        $result = $conn->fetchAll();
        $arr = array();
        for ($i = 0; $i < count($result); $i++)
        {
            $news= new X();
            $news->id = $result[$i][0];
            $news->name = $result[$i][1];
            $arr[] = $tongji;
        }
        $conn = null;
        $db = null;

        return $arr;
    }
}>


X.php
<?php
class X
{
    public $id;
    public $name;
    public $_explicitType = "News";//对应AS中的类名
}



接下来还得创建个SQLITE的数据库才行
不会用命令创建数据库的话可以去下个SQLiteManager,而且支持中文

数据库名:news.db
表名:news
字段:id  name

然后把数据放到和php类相同的目录下就可以了

编译 运行 看到了什么?
对 什么都没有
因为没添加数据的原因……期待下篇的sqlite的写入
Tags: , , , ,
Oct 23
拿着网上一位仁兄的flex3代 改了下

<?xml version="1.0" encoding="utf-8"?>
<s:Application contentCreationComplete="initApp()" xmlns:fx="http://ns.adobe.com/mxml/2009"
         xmlns:s="library://ns.adobe.com/flex/spark"
         xmlns:mx="library://ns.adobe.com/flex/halo" minWidth="1024" minHeight="768">
  <fx:Script>
    <![CDATA[
      import mx.controls.Alert;
      import flash.events.ProgressEvent;
      import flash.events.MouseEvent;
      import flash.geom.Point;
      import mx.controls.Image;
      import mx.graphics.codec.JPEGEncoder;
      import flash.display.BitmapData;
      import flash.display.Bitmap;
      
      private var oldY:Number;//记录 上一次停留的y坐 值
      private var oldX:Number;//记录 上一次停留的x坐 值
      public var ratio:Number;//记录图片的宽高比
      public var oldWidth:Number;//记录放缩前的图片宽
      /*要保证图片在放缩过程之中不会乱跑,就必须锁定图片的中心点*/
      private var newCY:Number;//当对图片进行放大缩小时,记录图片中心点的x坐 值。
      private var newCX:Number;//当对图片进行放大缩小时,记录图片中心点的y坐 值。
      private var cover_X:Number;//当创建一个矩形来截取图片时,此变量表示矩形位置的x坐 值。
      private var cover_Y:Number;//当创建一个矩形来截取图片时,此变量表示矩形位置的y坐 值。
      
      /*创建完程序之后执行的初始化*/
      internal function initApp():void{
        img.source="xxx.jpg";
      }
      
      /*当图片正在 载的时候执行此方法*/
      internal function showProcess(event:ProgressEvent):void{
        var loaded:Number=event.bytesLoaded;
        var total:Number=event.bytesTotal;
        var p:Number=Math.floor(loaded/total*100);
        tip_txt.text="正在 载图片:"+p;
      }
      /*当图片 载完成之后执行此方法*/        
      internal function initImg():void{
        tip_txt.text="图片 载完毕!";
        ratio=img.contentHeight/img.contentWidth;
        oldWidth=img.contentWidth;
        cover_X=cover.x;//把截图的矩形定位到中间,即现在与cover重合
        cover_Y=cover.y;
        newCY=img.contentHeight/2;
        newCX=img.contentWidth/2;
        //drawCover();
      }
      
      /**/
      private function onMouseMove(event:MouseEvent):void{
        if(event.buttonDown){
          var x:Number = event.stageX - oldX;// x轴的偏移量
          var y:Number = event.stageY - oldY;// y轴的偏移量
          oldX = event.stageX;// 现在的x坐 值
          oldY = event.stageY;// 现在的y坐 值                
          img.move(img.x + x,img.y + y);//改变图片的x和y值,实现图片移动
          //由于图片 载进来的时候注册点都是在父层的左上角,这是不会改变的。我们所看到的图片移动只是图片坐 在平移。
          //但是我们创建的矩形框与我们对图片位置的看法是不一 的,在它的眼中看到并不是我们移动后的图片,不管我们怎么移动,它看到的都是在左上角没有动的图片。
          //虽然这 图片在我们看来不存在,但是矩形框会记得这 图片在左上角的 子(如果这 图片被放缩,它也会 据实际比例对它眼中的左上角的图片进行相应的放缩)。
          //当我们移动图片到中间的cover时,矩形框此时的坐 并没有改变,除非我们 据移动的情况,来给矩形框设定相应的值。
          cover_X -= x;//为什么用减号呢,这是 为如果我们把图片从左向右移动到cover中,那么对应的矩形如果想找到和cover中一 的像 集合,就必须向左移动, 为矩形
          //眼中的图片不会跟着我们也向右平移,所以只有矩形向左平移才能找到相应的像 集合。所以x坐 值就得减,而不是 。
          cover_Y -= y;
          newCX=img.x+img.width/2;//当滑动图片到一个位置,计算出此时图片的中心点的x坐 值,如果放缩图片,则让此坐 不变。
          newCY=img.y+img.height/2;//当滑动图片到一个位置,计算出此时图片的中心点的y坐 值,如果放缩图片,则让此坐 不变。
          //drawCover();
        }
      }
      
      private function onMouseDown(event:MouseEvent):void{
        oldX = event.stageX;//在 按下,但未滑动之前记录 的位置坐
        oldY = event.stageY;
      }
      
      internal function hsChange(target:DisplayObject):void{
        
        var xx:Number=img.x;
        var yy:Number=img.y;//这里的xx和yy相当与图片为移动之前的坐
        img.x=newCX-(hsval.value*oldWidth)/2;//图片放缩时,图片的中心点不变,变的是图片的左顶点的坐
        img.y=newCY-(hsval.value*oldWidth*ratio)/2;
        img.width=hsval.value*oldWidth;//图片放缩时改变图片的宽
        img.height=img.width*ratio;
        cover_X = cover_X-(img.x-xx);
        cover_Y = cover_Y-(img.y-yy);//这两句的意思与图片移动一 。                    
        //drawCover();
      }
      
      private function drawCover():void
      {  
        //创建一个矩形区域,来截取相片,在此之前我们已经虚构了一个矩形,现在就相当于把这个虚构的矩形弄成真的。
        var rect:Rectangle = new Rectangle(cover_X,cover_Y,cover.width,cover.height);
        //var bmd:BitmapData = (img.content as Bitmap).bitmapData;
        //创建了一个位图
        var bmd:BitmapData = new BitmapData(img.width,img.height,false,0);
        //把图片在父层的左上角画出来(如果图片已经被放缩,就画放缩之后的,这也就是虚构矩形眼中的那 我们看不见的图片)。
        bmd.draw(img,null,null,null,null,false);
        //创建一个与矩形一 大小的位图            
        var bmd2:BitmapData = new BitmapData(rect.width,rect.height);
        var point:Point = new Point(0,0);
        //从bmd的位图中复制rect位置,rect大小的矩形区域,赋给bmd2,在bmd2中的起始点是point          
        bmd2.copyPixels(bmd,rect,point,null,null,false);
        
        /*cover.graphics.beginBitmapFill(bmd2);
        cover.graphics.drawRect(0,0,rect.width,rect.height);
        cover.graphics.endFill();*/
        
        //将bmd2的像 数据填充到画布can3中。
        can3.graphics.beginBitmapFill(bmd2);
        can3.graphics.drawRect(0,0,rect.width,rect.height);
        can3.graphics.endFill();
      }
      
      /*
      public function takeSnapshot(b:BitmapData) :void
      {
      var jpegenc:JPEGEncoder=new JPEGEncoder(80);
      var imgByteArray:ByteArray=jpegenc.encode(b);
      }*/
    ]]>
  </fx:Script>
  <fx:Declarations>
    <!-- Place non-visual elements (e.g., services, value objects) here -->
  </fx:Declarations>
  <s:Label x="10" y="29" text=" 签" width="291" id="tip_txt" height="17"/>
  <s:HSlider id="hsval" x="21" y="10" minimum="0.1" maximum="2" value="1" liveDragging="true" change="hsChange(img)" snapInterval="0.1"/>
  <s:Group x="260" y="10" width="500" height="500" id="can" mouseMove="onMouseMove(event)" mouseDown="onMouseDown(event)" buttonMode="true" contentBackgroundColor="#000000">
    <s:Rect width="100%" height="100%">
      <s:fill>
        <s:SolidColor color="#000000"/>
      </s:fill>
    </s:Rect>
    <mx:Image x="10" y="10" width="153" height="113" id="img" progress="showProcess(event)" complete="initImg()" alpha="1.0"/>    
    <s:Group x="0" y="0" width="500" height="176" alpha="0.4" contentBackgroundColor="#FFFFFF">
    </s:Group>
    <s:Group x="0" y="176" width="176" height="149" alpha="0.4" contentBackgroundColor="#FFFFFF">
    </s:Group>
    <s:Group x="0" y="325" width="500" height="200" alpha="0.4" contentBackgroundColor="#FFFFFF">
    </s:Group>
    <s:Group x="324" y="176" width="177" height="149" alpha="0.4" contentBackgroundColor="#FFFFFF">
    </s:Group>
    <s:Group width="150" height="150" id="cover" x="175" y="175">
      <s:Rect width="100%" height="100%">
        <s:fill>
          <s:SolidColor color="#ffffff" alpha="0.4"/>
        </s:fill>
      </s:Rect>
    </s:Group>
  </s:Group>
  <s:Button x="10" y="364" label="按钮" id="result" click="drawCover()"/>
  <s:Group x="21" y="174" width="150" height="150" id="can3">
  </s:Group>
</s:Application>


下篇文 flex4与sqlite的交互
Sep 20
我的一个小CASE主要是以flash来做表现 flex做逻辑
所以在flash中画些按钮啊 之类的
但是遇到了一点小问题
就是远程打开该CASE的第一次 flex会接受不到flash 过来的值
flash代 如下:
v1.addEventListener(MouseEvent.CLICK,b1);
v2.addEventListener(MouseEvent.CLICK,b2);
v3.addEventListener(MouseEvent.CLICK,b3);

function b1(event:MouseEvent):void{
  trace("clickAdmin");
  }
function b2(event:MouseEvent):void{
  trace("clickGbook");
  }
function b3(event:MouseEvent):void{
  trace("clickAbout");
  }

flex代 如下:
<mx:SWFLoader source="swf/nav.swf" height="245.1" width="254.1" id="bearflash" y="0"/>

<mx:Script>
<![CDATA[
       import mx.managers.PopUpManager;
       import mx.controls.Alert;
       import com.bear.jia.caringorm.view.login;              
      internal function init():void{
         var obj:Object=bearflash.content;
         obj.v3.addEventListener(MouseEvent.CLICK,clickAbout);
         obj.v2.addEventListener(MouseEvent.CLICK,clickGbook);
         obj.v1.addEventListener(MouseEvent.CLICK,clickAdmin);       
       }
      public function clickAbout(event:MouseEvent):void{
        var _about:about = new about()
        _about.x = 250;
        _about.y = 120;
        PopUpManager.addPopUp(_about, this, true);
       }
       public function clickGbook(event:MouseEvent):void{
        var gbook:guestBook = new guestBook();
        gbook.x = 250;
        gbook.y = 120;
        PopUpManager.addPopUp(gbook, this, true);

       }
       public function clickAdmin(event:MouseEvent):void{
       var adminLogin:login = new login();  
       adminLogin.x = 350;
    adminLogin.y = 250;
    PopUpManager.addPopUp(adminLogin, this, true);
       }
       ]]>
</mx:Script>


改动后如下
flash代 :
v1.addEventListener(MouseEvent.CLICK,b1);
v2.addEventListener(MouseEvent.CLICK,b2);
v3.addEventListener(MouseEvent.CLICK,b3);

function b1(event:MouseEvent):void{
  dispatchEvent(new Event("clickAdmin"));
  }
function b2(event:MouseEvent):void{
  dispatchEvent(new Event("clickGbook"));
  }
function b3(event:MouseEvent):void{
  dispatchEvent(new Event("clickAbout"));
  }


flex代 :
<mx:SWFLoader source="swf/nav.swf" height="245.1" width="254.1" y="0" complete="Flash(event)" id="flashContent"/>

<mx:Script>
<![CDATA[
       import mx.managers.PopUpManager;
       import mx.controls.Alert;
       import com.bear.jia.caringorm.view.login;
       var flashMc:MovieClip;            
      internal function Flash(event):void{
        flashMc=flashContent.content as MovieClip;
        flashMc.addEventListener("clickAbout",clickAbout);
        flashMc.addEventListener("clickGbook",clickGbook);
        flashMc.addEventListener("clickAdmin",clickAdmin);
       }
      public function clickAbout(event:Event):void{
        var _about:about = new about()
        _about.x = 250;
        _about.y = 120;
        PopUpManager.addPopUp(_about, this, true);
       }
       public function clickGbook(event:Event):void{
        var gbook:guestBook = new guestBook();
        gbook.x = 250;
        gbook.y = 120;
        PopUpManager.addPopUp(gbook, this, true);

       }
       public function clickAdmin(event:Event):void{
       var adminLogin:login = new login();  
       adminLogin.x = 350;
    adminLogin.y = 250;
    PopUpManager.addPopUp(adminLogin, this, true);
       }
       ]]>
</mx:Script>


总结了一下
自己想得过于简单了,原本以为把flash产生的数据转换一下数据类型就可以万事大吉。唉,还是时间广播比较好啊,不再取巧了。
分页: 2/3 第一页 上页 1 2 3 下页 最后页 [ 显示模式: 摘要 | 列表 ]