fin吧 关注:135贴子:227
  • 0回复贴,共1

fine语言写的——文件列表例程

只看楼主收藏回复

# 例程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)} # 等待窗口关闭消息
}
}


IP属地:河北1楼2025-01-25 11:21回复