Nuva 示例代码(每日一帖)之 简单浏览器

<..========================================================
==                                                       ==
==                Macrobject Nuva Samples                ==
==                                                       ==
==      Copyright (c) 2004-2006 Macrobject Software      ==
==                                                       ==
==                  ALL RIGHTS RESERVED                  ==
==                                                       ==
==               http://www.macrobject.com               ==
==                                                       ==
========================================================..>
<.
  class MainForm = System.UI.LayoutForm()
    Caption = '世界上最简单的浏览器'
    function Create().>
    <Layout Direction="V" Resizable="true" Width="800" Height="600">
      <Panel Name="Toolbar" Resizable="True" Size="60" />
      <Panel Name="Browser" Resizable="True" Size="*" />
    </Layout>
  <.end function
  end class

  class Toolbar = System.UI.HtmlForm()
    Scroll = false
    var url = 'http://www.macrobject.com'

    function CreateBody().>
    <table width="100%"><tr>
      <td width="20">Url:</td><td><input type="text" style="width:100%" 
        mo:binddata="[.=this.@url.]" mo:bindattr="value"></td>
      <td width="40"><input type="button" value=" GO " mo:onclick="Go"></td>
    </tr></table>
  <.end function

    function Go()
      this.SaveBindData()
      browser.Navigate(url)
    end function
  end class

  var main = MainForm()
  main.Show()

  var tool = Toolbar()
  tool.DockTo(main, 'Toolbar')
  tool.LoadBindData()

  var browser = System.UI.HtmlForm()
  browser.DockTo(main, 'Browser')
  tool.Go()

  System.App.Run()
.>

<..
【简介】
    本例是一简单的浏览器程序,根据输入的 url 地址,点击 go 按钮,能够浏览相应的网页。

【看点】
    1、本例演示了 Nuva 语言的 GUI 应用
       Nuva 语言支持基于 Html/Xml 的界面引擎,如果需要编写 GUI 应用,仅需熟悉 Html/Xml 语言即可。

       为了便于 GUI 的编写,Nuva 提供了一个 UI 的库(位于 Library\System.UI),本例中使用了其中的两个类:System.UI.LayoutForm,System.UI.HtmlForm。具体信息请参考 System.UI.nuva。

       System.UI.LayoutForm 是一个框架窗口,可以将其他窗口 dock 在其上,本例中的 MainForm 类就是一个框架窗口。
       MainForm 重载了基类的 Create 函数,这个函数的目的是创建窗口的内容,在框架窗口中则是创建一个框架。
       Nuva UI 中的框架采用横竖两种布局,分别用“H”和“V”表示,布局可以相互嵌套,布局内可以放置多个 Panel,每个分别命名,指出其相应属性,如 Size 等。参见本例中 MainForm 的 Create 函数代码。

       System.UI.HtmlForm 是一个 Html/Xml 窗口,可以在其上放入 Html/Xml 代码,从而生成窗口的内容。
       本例中的 Toolbar 就是一个 HtmlForm,重载了基类的 CreateBody 函数,该函数创建 Html 窗口的 Body。

       本例中的 UI 类还在构造函数中对基类的某些属性进行初始化,如 MainForm 初始化了 Caption 属性,Toolbar 初始化了 Scroll 属性。

    2、本例演示了 Nuva 语言面向对象编程的方法
       在 Nuva 语言中,可以支持面向对象编程,目前 Nuva 语言的面向对象具体采用了类继承的组织方式。

       本例中的两个类分别继承 UI 库中的两个类,并且都重载了其基类的一些方法。

       在 Nuva 语言中,类体就是构造函数,在每个类对象构造的时候将执行类体的 Nuva 代码(这有点类似 JavaScript)。在本例中的两个类,分别在其构造函数中初始化了基类的某些属性。

       Nuva 语言中的类属性和成员函数目前都没有访问修饰符,即所有属性和方法都可以访问,子类也可以重载基类的所有方法,不加以限制。

    3、本例也演示了事件驱动的编程方法
       Toolbar 类的 CreateBody 函数在创建 Go 按钮的时候,给其增加了一个 mo:onclick 属性,该属性声明了一个 Nuva 事件,并且指定其执行 Go 函数。

    4、本例也演示了 Nuva 语言中的数据绑定实现
       Toolbar 类的 CreateBody 函数在创建 Url 输入框的时候,给其增加了 mo:binddata="[.=this.@url.]" mo:bindattr="value" 的两个属性,这两个属性一起声明了一个数据绑定接口,即将 binddata 的 Nuva 属性绑定到 bindattr 的 Html/Xml 元素属性上。

       本例中绑定了 this.@url,@ 是绑定用语法。

       另外 Nuva 语言的 UI 库也提供了多种绑定操作接口,本例中用到了 LoadBindData 和 SaveBindData 两个函数,分别表示加载绑定数据和保存绑定数据。

    5、本例最后的 System.App.Run() 执行一个消息循环,这是 Nuva 事件驱动编程的起点。

【扩展】
    本例可以进一步扩展以增强其实用性,比如可以增加收藏夹、Tab 分页等,从而实现一个真正的浏览器。
..> 

注:本例的程序运行如下:(需要最新的 Nuva 虚拟机或者开发环境, 请到网站上下载)

posted on 2006-08-26 17:52  Wisdom-zh  阅读(428)  评论(0编辑  收藏  举报

导航