优秀作品

# 例程14:Fine界面函数组应用——editbox控件和listbox文件列表应用示例


gui = GUI()                    

gui.HideConsoleWindow()   

os  = OS() 


dirfile  = "FINEDIRFILE"               # 注意:在Fine中,字符串"FINEDIRFILE"特指文件列表,即,将当前目录下的文件夹内容作为列表项

   

title    = "我的数据录入窗口"   

winSize  = [10,2,120,40]       


menu     = ["文件","menu","新建","打开","保存","退出"]                         # 菜单不接受指定字库,只能使用默认值


# 注意:在一个Fine窗口中,只允许配置一个listbox控件,双击列表项将输出所击中的列表项。

listbox  = ["文件列表","listbox",dirfile,0,0,28,30]     # 参数1是edit控件标题,参数2是edit类控件,参数3指定录入数据的类型(字符串)


# 注意:在一个Fine窗口中,只允许配置一个editbox控件,editbox控件不响应鼠标双击事件。editbox控件上的内容可以编辑

editbox  = ["","editbox",32,1.5,80,30]                 # 参数1是textbox控件标题,可以为空,参数2是textbox类控件,参数3是“N”表明不响应双击事件。

            

list = [title,winSize,menu,listbox,editbox]                 # 将窗口设计元素打包成列表


num = gui.Fine(list)                                   # 创建Fine窗口,并返回窗口资源ID号num

while gui.FineClosed(num) != -1                        # 循环检测窗口关闭消息(返回-1表明窗口已关闭,退出循环)

{

    PowerDown(3)                               # 低功耗设置

    if gui.FineReady(num) == -1 {continue}     # 检测是否准备好数据(-1表明没有数据输出,0表明有数据输出)

    x = gui.FineRead(num)                      # 读取数据(列表),列表的第一项是指令,后面各项分别对应edit\combobox\editbox控件录入的数据


    # 在一个Fine窗口中,通常需要有至少一个menu、button、textbox,listbox控件,只有这些控件才会返回操作指令、和操作数据。

    # 该例程有一个listbox控件,那么输出数据x的第一项可能是双击listbox指令,后面是操作数(击中的列表项)

    # 该例程有一个menu控件,那么输出数据x的第一项也可能是menu菜单指令,后面是操作数(返回的edit、combobox、editbox控件内容)

    # 该例程中,没有edit和combobox控件,只有一个editbox控件,因此,操作数只有一项,即,editbox控件内容


    str0 = x[0]                                   # 取出第一项(指令),可以按照指令去使用录入数据

    str1 = x[1]                                   # 取出第二项(editbox选取的内容)


    if str0 == "listbox"                          # 如果x[0]是双击listbox指令,那么x[1]是击中的列表项

    {

         gui.SendEditbox(num,["FINECLEAR"])       # 清空editbox内容

         gui.SendEditbox(num,[str1])              # 在editbox控件上显示路径、或文件名(包含绝对路径)

         continue

    }


    if str0 == "menu-0-1"                         # 打开文件

    {

        if os.pathisfile(str1)                    # 判断x[1]是否为文件名,如果是文件名,打开文件,并显示到editbox控件上        

        {

            fp = FILEOPEN(str1,"r")              # 打开文件(文本、只写方式),如果文件已经存在,将覆盖源文件

            if fp == False                       # 如果打开文件失败     

            {

              box = gui.MessageBox("打开文件失败!","确定")

              while gui.MessageBoxClosed(box) != -1 {PowerDown(3)}

            }

            else

            {

              str = fp.read()                       # 读取全部文件内容(长度限制在3万字节以内)

              fp.close()                            # 关闭文件

              gui.SendEditbox(num,["FINECLEAR"])    # 清空editbox内容

              gui.SendEditbox(num,[str])            # 将读出的文件内容,显示在editbox控件上

            }

        }

        else                                                    # 如果不是文件,将字符串(路径)显示到editbox控件上

       {

            gui.SendEditbox(num,["FINECLEAR"])                  # 清空editbox内容

            str = str1 + "可能不是文件名,无法打开该文件!\n"

            gui.SendEditbox(num,[str])                          # 在editbox控件上显示路径

        }

    }

    elif str0 == "menu-0-2"                                    # 保存文件    

    {

        # 创建文件名输入窗口,获取文件名

        title   = "文件名输入"

        size    = [40,10,60,10]

        edit    = ["请输入文件名","edit","s",20,2,32,1]

        button  = ["确定","button",40,5,12,1]

        list = [title,size,edit,button]

        num1 = gui.Fine(list)

        while gui.FineClosed(num1) != -1 

        {

          PowerDown(3)

          if gui.FineReady(num1) == -1 {continue}   # 如果没有数据输出,跳转

          x = gui.FineRead(num1)                     # 列表x有两项:指令(button-0)和edit控件上的数据(文件名)

          filename = x[1]                            # 取出文件名

          gui.CloseFine(num1)                        # 关闭窗口

        }

        

        # 检查filename文件是否存在

        fp = FILEOPEN(filename,"r")                 # 尝试以只读方式打开文件filename

        if fp == False                              # 打开文件失败,文件可能不存在,直接写入文件 

        {

          fp = FILEOPEN(filename,"w")                             # 打开文件(文本、只写方式),如果文件已经存在,将覆盖源文件

          fp.write(str1)                                           # 把从editbox控件上读出的数据写入文件copy1001.txt中

          fp.close()                                               # 关闭已经打开的文件

          box = gui.MessageBox(filename+"文件写入成功!","确定")   # 弹出消息提示框

          while gui.MessageBoxClosed(box) != -1 {PowerDown(3)}   # 等待窗口关闭消息

        }

        else     # 如果文件已经存在,弹出消息框,询问是否要覆盖

        {

          box = gui.MessageBox(filename+"文件已经存在,是否要覆盖原文件?","确定|取消")    # 弹出消息提示框

          while gui.MessageBoxClosed(box) != -1 

          {

            PowerDown(3)

            if gui.MessageBoxSelected(box) == -1 {continue}   # 如果没有做出选择,跳转到循环起点

            select = gui.MessageBoxRead(box)                   # 读出选择结果(0——确定,1——取消)

          }

          

          # 根据询问结果,执行操作

          if select == 0                                             # 如果选择确定,覆盖原文件

          {

            fp = FILEOPEN(filename,"w")                             # 打开文件(文本、只写方式),如果文件已经存在,将覆盖源文件

            fp.write(str1)                                           # 把从editbox控件上读出的数据写入文件copy1001.txt中

            fp.close()                                               # 关闭已经打开的文件

            box = gui.MessageBox(filename+"文件写入成功!","确定")   # 弹出消息提示框

            while gui.MessageBoxClosed(box) != -1 {PowerDown(3)}   # 等待窗口关闭消息

          }  

          elif select == 1                                          # 如果选择取消,放弃保存文件

          {

            box = gui.MessageBox("放弃保存文件!","确定")            # 弹出消息提示框

            while gui.MessageBoxClosed(box) != -1 {PowerDown(3)}   # 等待窗口关闭消息

          }

        }

    }

    else    # 其它指令(menu-0-0、menu-0-1、menu-0-3)时,在控制台输出指令和数据

    {

        str = str0 + "菜单功能未实现!"

        box = gui.MessageBox(str,"确定")                           # 弹出消息提示框

        while gui.MessageBoxClosed(box) != -1 {PowerDown(3)}       # 等待窗口关闭消息

    }

 

0