Farseer

导航

添加图片

系统提供了用文档处理为系统中记录添加文档,这样每条记录可以附加一份说明文档,这个功能用起来比较方便,可是有时候遇到的用户比较不够勤劳,他于是希望不点那个工具栏上的图标,直接就可以看到一些东西,比如产品的图片说明。这个时候就需要添加图片。
系统是通过window控件来添加图片的,我们有几种方式可以为Widow控件来指定数据来源。
1.直接指定ImageName或者ImageResource属性,其中ImageName只能指定一个物理路径上的文件,ImageResource只能指定AOT上Resource某个节点的ID,其中第一个属性缺乏灵活性,第二个还真没找到办法得到Resources节点下图片的ID,这两个属性俺是不怎么喜欢用的。
2.通过DataSource和DataField两个属性,在DataField属性中指定一个类型为Container的字段,当然图片就保存到该字段下了。
3.通过SysResource这个类读取AOT 中Resoures中的数据,然后通过Window的Imaga()方法赋值到控件上.
综上,Window控件展现的图片可以存放在文件系统中,AOT的Resource(当然这也是存放在文件系统中),数据库中.
下面介绍一下如何将图片存放在AOT中和数据库中.
废话不说了,看代码吧:
1.存放到Resources中
static void ImportImgToAOTResource(Args _args)
{
    BinData binData 
= new BinData();
    Container c;
    str filePath 
= @"E:\Personal\Picture\2006-09-08-00.bmp";
    ;
    binData.loadFile(filePath);
    c 
= binData.getData();
    SysResource::saveResource(
"ResourceName","MyPicture.bmp",c);
}
至于SysResource类中的方法,看一下源代码就一目了然了,这里不赘述.
2.存放到数据库中
首先表中要有个Container类型的字段用来存放图片.
static void InsertImaToTable(Args _args)
{
    ImageTable imageTable;
    BinData binData 
= new BinData();
    Container c;
    str filePath 
= @"E:\Personal\Picture\2006-09-02-01.bmp";
    ;
    binData.loadFile(filePath);
    c 
= binData.getData();
    ttsbegin;
        imageTable.Image 
= c;
        imageTable.insert();
    ttscommit;
}
上面介绍了如何存入图片,下面说一下如何读取:
1.如何从AOT的Resources节点中读取
void ReadImgFromAOTResource()
{
    TreeNode    resourceNode;
    Image img;
    Container c;
    ;
    resourceNode 
= SysResource::getResourceNode("ResourceName");
    
if(resourceNode)
    
{
        c 
= SysResource::getResourceNodeData(resourceNode);

        img 
= new Image();
        img.setData(c);
        WindowControl.image(img);
        WindowControl.height(img.height());
        WindowControl.width(img.width());


    }

    
else
        WindowControl.image(
null);


}
其中WindowControl是Window控件的名字.
2.   从数据库中读取
void ReadImgFromTable()
{
    ImageTable imageTable;
    Image img;
    Container c;
    ;
    select Image from imageTable
    where imageTable.RecId 
== 5637144576;

    
if(imageTable)
    
{
        img 
= new Image();
        img.setData(imageTable.Image);

        WindowControl.image(img);
        WindowControl.height(img.height());
        WindowControl.width(img.width());
    }

    
else
        WindowControl.image(
null);


}
嗯,差不多就这些了.

posted on 2007-04-17 23:12  佛西亚  阅读(1851)  评论(4编辑  收藏  举报