温馨提示:按ctrl+D可将【神途之家】放入IE收藏夹中,方便下次浏览~ 加入收藏设为首页手机版
您现在的位置:首页 > GM手册 > 资源导航 > 正文

form解析创建窗口

更新时间:2014-09-08 23:15:24   点击:

基于form字符串解析创建窗口,并定制窗口的行为,使得创建窗口更简单化,设计者可以像写html网页那样编写form文件。文件使用xml格式,所以首先文件要符合xml格式标准。

程序会根据文件中的内容进行解析并创建相应的窗口,文件内容可分为两部分,定义窗口属性、编写lua功能脚本。
程序解析过程如下:
    1.对文件或字符串进行解密,得到原始内容。
    2.根据定义的窗口类型和属性解析并创建窗口控件,设置好属性,挂接好事件。
    3.将文件中的脚本部分分离出来,加载执行。每次解析都会加载执行定义的所有的lua块,即使之前已经加载过。
内容须符合xml文件标准,根节点名必须为"form",对于根节点可指定一个默认父窗口,如果不指定,默认父窗口为游戏的根窗口(桌面)。默认父窗口值是一个窗口的文本描述,每个窗口都可以通过一个描述文本来指定,规则:描述文本是用窗口id拼接起来的,中间用逗号隔开,基于查找子窗口规则:逗号后面的id是逗号前面的id的子窗口。规定:根窗口(桌面)的描述文本是空串。
示例:假如id为"A"的窗口是桌面的子窗口,那么查找A窗口可以使用描述文本:",A"等价于"A"。假如id为"B"的窗口是A的子窗口,那么查找B窗口可以使用描述文本:",A,B"等价于"A,B"。
以下是每个窗口的属性和事件的定义:
通用标记wnd(所有的窗口都具有的属性和事件):
    id                [属性] 窗口的id,字符串,需要在父窗口范围内唯一,必须设定
    x                 [属性] 窗口的x坐标位置,整型,默认为0
    y                 [属性] 窗口的y坐标位置,整型,默认为0
    w                 [属性] 窗口的宽度,整型,默认为0
    h                 [属性] 窗口的高度,整型,默认为0
    parent            [属性] 父窗口的文本描述,字符串,如果指定,将当前窗口创建为指定窗口的子窗口,如果不指定,根据默认父窗口自动计算然后创建子窗口。
    esc_close         [属性] 窗口是否按下esc键关闭,布尔值,对于对话框窗口默认为true,其它窗口默认为false
    drag              [属性] 窗口是否鼠标左键可拖动,布尔值,对于对话框窗口默认为true,其它窗口默认为false
    revmsg            [属性] 窗口是否可接收消息,布尔值,若不可接收消息,则所有的鼠标键盘事件都不会处理,因此鼠标点上去会点穿。对于image、edit、richedit、static默认为false,其它窗口默认为true
    enable            [属性] 窗口是否可用,布尔值,默认为true
    visible           [属性] 窗口是否可见,布尔值,默认为true
    param             [属性] 用户自定义参数,整型。如果设置此值,在lua脚本中可用获取窗口自定义参数获取。默认为0
    tip               [属性] 简单的tips描述,字符串。默认为空串
    tipex             [属性] 复杂的tips描述,参见:Tips文本格式 ,字符串,默认为空串
    scroll            [属性] 是否是滚动窗口,布尔值,默认为false
    OnInit            [事件] 创建好此窗口的初始化事件,回调函数原型func(this,param)--this:窗口句柄 param:form文件字符串参数(由GenForm传入,比如:GenForm("精炼系统#1#2")此时param值为"1#2")。
    OnLButtonDown     [事件] 鼠标左键点下事件,回调函数原型func(this,param,x,y)--this:窗口句柄 param:可不关心 x:x坐标 y:y坐标
    OnLButtonUp       [事件] 鼠标左键弹起事件,回调函数原型func(this,param,x,y)--this:窗口句柄 param:可不关心 x:x坐标 y:y坐标
    OnLButtonClick    [事件] 鼠标左键点击事件,回调函数原型func(this,param,x,y)--this:窗口句柄 param:可不关心 x:x坐标 y:y坐标
    OnLButtonDbClick  [事件] 鼠标左键双击事件,回调函数原型func(this,param,x,y)--this:窗口句柄 param:可不关心 x:x坐标 y:y坐标
    OnRButtonDown     [事件] 鼠标右键点下事件,回调函数原型func(this,param,x,y)--this:窗口句柄 param:可不关心 x:x坐标 y:y坐标
    OnRButtonUp       [事件] 鼠标右键弹起事件,回调函数原型func(this,param,x,y)--this:窗口句柄 param:可不关心 x:x坐标 y:y坐标
    OnRButtonClick    [事件] 鼠标右键点击事件,回调函数原型func(this,param,x,y)--this:窗口句柄 param:可不关心 x:x坐标 y:y坐标
    OnRButtonDbClick  [事件] 鼠标右键双击事件,回调函数原型func(this,param,x,y)--this:窗口句柄 param:可不关心 x:x坐标 y:y坐标
    OnMouseMove       [事件] 鼠标移动事件,回调函数原型func(this,param,x,y)--this:窗口句柄 param:可不关心 x:x坐标 y:y坐标
    OnMouseWheel      [事件] 鼠标滑轮滑动事件,回调函数原型func(this,param)--this:窗口句柄 param:小于0向上滚动否则向下滚动
    OnKeyDown         [事件] 键盘按下事件,回调函数原型func(this,param)--this:窗口句柄 param:按下的键值
    OnKeyUp           [事件] 键盘弹起事件,回调函数原型func(this,param)--this:窗口句柄 param:按下的键值
    OnMouseIn         [事件] 鼠标进入此窗口事件,回调函数原型func(this)--this:窗口句柄
    OnMouseOut        [事件] 鼠标离开此窗口事件,回调函数原型func(this)--this:窗口句柄
    OnVisible         [事件] 可见状态发生变化事件,回调函数原型func(this,param)--this:窗口句柄 param:当前可见状态,1代表可见0代表隐藏
    OnEnable          [事件] 可用状态发生变化事件,回调函数原型func(this,param)--this:窗口句柄 param:当前可用状态,1代表可用0代表禁用
    OnActive          [事件] 激活状态发生变化事件,回调函数原型func(this,param)--this:窗口句柄 param:当前激活状态,1代表激活0代表未激活
    OnMove            [事件] 窗口位置发生变化事件,回调函数原型func(this)--this:窗口句柄
    OnSizeChange      [事件] 窗口大小发生变化事件,回调函数原型func(this)--this:窗口句柄
    OnClose           [事件] 窗口关闭事件,回调函数原型func(this)--this:窗口句柄
    OnDestroy         [事件] 窗口销毁事件,一个窗口被关闭,OnClose不一定会触发,但OnDestroy肯定会触发 ,回调函数原型func(this)--this:窗口句柄
    OnTipsInit        [事件] 加载Tips函数事件,回调函数原型func(this)--this:窗口句柄
对话框标记dialog
    image             [属性] 对话框的背景图片ID,整型,可以是单张图片,也可以是九张图片中间用逗号隔开(九宫格拼凑)。
    color             [属性] 背景图片的颜色,整型,默认是白色,参见:颜色字符串
    fitsize           [属性] 图片是否自动缩放,布尔值,如果为true,背景图片的大小根据所设定的窗口大小进行缩放,默认为false
    close             [属性] 是否具有关闭按钮,布尔值,默认为false
    title             [属性] 标题文字,字符串,可以通过设置窗口文字内容 动态修改,默认为空串
    title_color       [属性] 标题文字颜色,字符串,颜色字符串,可以通过设置窗口文字颜色 动态修改,默认为橙色
    center            [属性] 是否居中显示,布尔值,默认为false
    savepos           [属性] 是否保存对话框位置下次再打开时使用此位置,布尔值,默认为false。如果使用此标记,center标记将无效。
    magic             [属性] 面板打开或关闭时的动画,整型,默认为0
    npc               [属性] 关联npc的KeyName,字符串,默认无关联。如果该对话框与关联NPC距离超过9个逻辑格,则自动将该对话框关闭。
按钮标记button
    image             [属性] 按钮的图片ID,整型,默认为0
    text              [属性] 按钮上的文字内容,字符串,默认为空串
    text_color        [属性] 按钮上的文字颜色,整型,默认为白色,参见:颜色字符串
    page_btn          [属性] 是否是页签按钮,布尔值,默认为false
    shine             [属性] 是否有闪亮特效,布尔值,默认为false
复选框标记check
    image             [属性] 复选框的图片ID,整型,默认为0
    text              [属性] 复选框的文字内容,字符串,默认为空串
    text_color        [属性] 复选框的文字颜色,整型,默认为0,参见:颜色字符串
    checked           [属性] 复选框的选中初始化状态,布尔值,默认为false,非选中
    auto_change       [属性] 是否自动管理选中状态,布尔值,默认为true
    OnCheckChange     [事件] 选中状态发生变化事件,回调函数原型func(this)--this:窗口句柄
图片控件标记image
    type              [属性] 图片类型,字符串,分为四种:normal普通类型(image须对应单张图片ID),around九宫格类型(image须对应九张图片ID中间用逗号分隔),animate动画类型(image第一项是动画图片起始ID;第二项是播放速度,无此项默认100毫秒;第三项是动画的播放次数,无此项默认为0,代表不限制次数;第四项指定回调脚本函数,无此项默认为空串。每项用逗号隔开,详细参见:设置图片动画Ex ),flat平铺类型(image须对应单张图片ID),默认为normal类型
    image             [属性] 图片ID,根据上面的type类型而异
    image_color       [属性] 图片的颜色,整型,默认为白色,参见:颜色字符串
    fitsize           [属性] 是否自动缩放,布尔值,如果为true则图片会根据窗口大小自动缩放,默认为false
    check_point       [属性] 设置检查点是否在窗口内的规则,整型,0代表根据窗口大小规则 1代表根据窗口大小和点所在的图片像素是否透明,默认为0,一般情况下可不必关心此项属性
    gray              [属性] 是否灰色显示,布尔值,默认为false
编辑框标记edit
    text              [属性] 编辑框中的文字内容,字符串,默认为空串
    text_color        [属性] 编辑框中的文字颜色,整型,默认为白色,参见:颜色字符串
    type              [属性] 编辑框的类型,字符串,normal普通类型,password密码类型,number数字类型,默认为普通类型
    canedit           [属性] 是否可编辑,布尔值,默认为false
    limit             [属性] 设定最大输入文本长度,整型,默认无限制
    align             [属性] 设定编辑框文本的对齐方式,字符串,left左对齐,center居中,right右对齐(暂不支持),默认为左对齐
    OnEditKeyEnter    [事件] 按下回车事件,回调函数原型func(this)--this:窗口句柄
    OnEditStrChange   [事件] 编辑框内容发生变化事件,回调函数原型func(this)--this:窗口句柄
    OnEditLBtnDown    [事件] 鼠标左键点下事件,回调函数原型func(this,param,x,y)--this:窗口句柄 param:可不关心 x:x坐标 y:y坐标
    OnEditMouseIn     [事件] 鼠标进入事件,回调函数原型func(this)--this:窗口句柄
    OnEditMouseOut    [事件] 鼠标离开事件,回调函数原型func(this)--this:窗口句柄
    OnEditKeyDown     [事件] 键盘按下事件,回调函数原型func(this)--this:窗口句柄
    OnEditKeyUp       [事件] 键盘弹起事件,回调函数原型func(this)--this:窗口句柄
多功能编辑框richedit
    text              [属性] 编辑框中的文字内容,字符串,默认为空串
    text_color        [属性] 默认的文字颜色,整型,默认为白色,参见:颜色字符串
    canedit           [属性] 是否可编辑,布尔值,默认为false
    font              [属性] 默认字体名,参见字体,默认为system
    align             [属性] 设定编辑框文本的对齐方式,字符串,left左对齐,center居中,right右对齐(暂不支持),默认为左对齐
静态文本框static
    text              [属性] 编辑框中的文字内容,字符串,默认为空串
    text_color        [属性] 默认的文字颜色,整型,默认为白色,参见:颜色字符串
    font              [属性] 默认字体名,参见字体
物品框标记itemctrl
    auto_manage       [属性] 是否内存自动管理,布尔值,一般情况需要设置为true,默认为true
    rbtn_use          [属性] 鼠标右键是否可使用,布尔值,一般情况需要设置为false,默认为false
    invalid           [属性] 窗口中物品是否有效,布尔值,一般情况需设置为true,默认为true
    count             [属性] 物品框中初始状态物品的数量,整型,默认为1
    is_bound          [属性] 物品框中初始状态物品是否显示绑定,默认为false
    init_item         [属性] 物品框中初始状态要显示的物品,字符串或数字,若为字符串代表物品的KeyName,若为数字代表物品的模版ID
    use_back          [属性] 物品框是否使用背景格子,当使用大图标物品控件时此标记无效 。布尔值,默认为true
    big_icon          [属性] 物品框是否是大图标控件,布尔值,默认为false
    offx              [属性] 设置图标位置的水平偏移量,仅对大图标控件有效。整数,默认为0
    offy              [属性] 设置图标位置的水平偏移量,仅对大图标控件有效 。整数,默认为0
    OnItemMoveIn      [事件] 玩家操作物品进入此物品框事件,回调函数原型func(this, GUIData, DragIn, GUID, ItemId, KeyName, ItemPos, IsBound, Count)--this:窗口句柄 GUIData:参见GUIData句柄 DragIn:true代表鼠标拖动放进来false代表鼠标在包裹右键点击进入 GUID:物品的GUID ItemId:物品的模版ID KeyName:物品的KeyName ItemPos:物品的绝对位置 IsBound:物品是否绑定 Count:物品数量 如果该物品允许进入物品框请返回true,否则请返回false
    OnItemCtrlDbClick [事件] 双击物品事件,回调函数原型func(this)--this:窗口句柄
组合框标记combobox
    image             [属性] 组合框右边下拉按钮的图片ID,整型,默认为0
    fill_image        [属性] 下拉背景图片ID,整型,默认为0
    text              [属性] 组合框中文本内容,字符串,默认为空串
    text_color        [属性] 组合框中文本颜色,整型,默认为白色,参见:颜色字符串
    length            [属性] 下拉框背景高度,整型,默认为150
    content           [属性] 下拉框文本内容,字符串,默认为空串。可以是多项,中间用分好隔开,每项由三个部分组成,文本内容(字符串)、唯一标识(整型)、文本颜色(颜色字符串,中间用逗号隔开。例如:文本[,id[,颜色]]; 其中第二项和第三项可以省略
    OnComboStrChange  [事件] 下拉框选择文字改变事件,回调函数原型func(this)--this:窗口句柄


举例:
    设置VIP按钮为禁用灰色状态,则只需加载执行下面内容:
 
    <form>

        <button parent="GameMainInterface,LittleMap" id="Vip" enable="false" />
    </form>
举例:
    当点开VIP面板的时候同时打开包裹,则只需加载执行下面内容:
    <form>
        <button parent="GameMainInterface,LittleMap" id="Vip" OnLButtonClick="open" />
        <script><![CDATA[
            function open(this)
                local pack_btn = GetWindow("GameMainInterface,GameMainBar,Pakage")
                WndClick(pack_btn, nil)
            end
        ]]></script>
    </form>
举例:
    修改VIP面板上的说明文字内容,并当VIP面板关闭的时候提交表单,则只需要加载执行下面内容:
    <form default_parent="VipWnd">
        <script><![CDATA[
            function close(this)
                UI:Lua_SubmitForm("文件名", "main", "玩家关闭VIP面板")
            end
        ]]></script>
        <richedit id="Desc" text="自定义的VIP面板描述内容" />
        <dialog parent="" id="VipWnd" OnClose="close" />
    </form>

举例:
    创建一个新的对话框,里面有一个物品框,一个编辑框,一个按钮,物品框只接收"断空"武器,点击按钮,把物品的位置提交表单。标题为:断空换神器
    <form>
        <script><![CDATA[
                function ItemIn(this, GUIData, DragIn, GUID, ItemId, KeyName, ItemPos, IsBound, Count)
                        if KeyName == "断空" then return true end
                        if DragIn then
                                MessageBox(0, "请放入断空物品")
                        end
                        return false
                end
                function Tijiao(this)
                        local Item = GetWindow(this, "parent,item")
                        local site = RDItemCtrlGetGUIDataPropByType(Item, nil, ITEMGUIDATA_ITEMPOS)
                        UI:Lua_SubmitForm("文件名", "main", tostring(site))
                end
        ]]></script>
        <dialog id="对话框1" x="220" y="20" w="500" h="300" image="1904400001,1904400002,1904400003,1904400004,1904400006,1904400005,1904400007,1904400008,1904400009" title="断空换神器" close="true" center="true" >
                <richedit id="richeidt" x="50" y="100" w="400" h="100" text="#COLORCOLOR_BROWN#断空兑换神器啦!\n便宜啦快来看看。。。" />
                <button id="button" x="220" y="250" w="50" h="50" image="1903400035" text="确  认" text_color="4288676000" OnLButtonClick="Tijiao" />
                <itemctrl id="item" x="250" y="180" w="35" h="35" init_item="断空" count="0" OnItemMoveIn="ItemIn" />
        </dialog>
    </form>

    \

 

现已将form的功能集成到NpcTalk中,NpcTalk还正常兼容之前的版本,如果要使用新功能,传过来的字符串须是xml格式,默认父窗口须指定为:"NpcTalk,Container",之前编辑框的内容须用text段来标记,例如:
    <form default_parent="NpcTalk,Container">
        <script>
        <![CDATA[
                function main2()
                        msg("点击事件")
                end
                function item_move_in(this, GUIData, DragIn, GUID, ItemId, KeyName, ItemPos, IsBound, Count)
                        if KeyName == "审判" then return true end
                        if DragIn then
                                msg("需要放入审判")
                        end
                        return false
                end
        ]]>
        </script>
        <button id="对战" x="220" y="20" w="50" h="50" image="1903400035" text="确  认" text_color="4288676000" OnLButtonClick="main2" />
        <itemctrl id="item" x="300" y="80" w="35" h="35" init_item="审判" count="0" is_bound="true" use_back="true" OnItemMoveIn="item_move_in" />
        <edit id="edit" x="200" y="100" w="100" h="20" text="hello world!" />
        <text>
        <![CDATA[#COLORCOLOR_BROWN#483902警方扣留的时间里\nj飞机开绿灯赛季阿里\n\n\n\n分居两地撒酒疯\n\n\n\n飞机昆仑山大家来\n\n\n\n\n\n\n\n]]>
        </text>
    </form>



上一篇:Tips文本格式
下一篇:颜色字符串

随机推送文章

频道月排行

本神途发布网发布的所有神途开区资讯都经过严格测试,本站只推送人气好、散人多、版本好的神途,力争打早业界最出色的神途开服表。

神途开服表_神途传奇_神途发布网_神途之家官网 - www.shentuzhijia.com

CopyRight 2006 - 2015 神途之家 版权所有. 网站备案号:湘ICP备14005290号-1