100行代码实现简单目录浏览器制作

给大家分享使用Lae软件开发工具开发小应用程序的过程,希望大家喜欢!

界面部分我们用lae软件开发工具实现,无需写代码,业务逻辑部分使用Lae软件开发平台自带的LuaIDE编辑器,使用100行lua代码完成简单目录浏览器的制作。

lae软件下载地址:

https://github.com/ouloba/laetool.git

lae软件下载地址(国内):https://pan.baidu.com/s/1ckMy0Q

相关视频:

http://www.tudou.com/listplay/aly7NDWz_sQ/AaqZ81jIt-k.html

教程:

lae界面开发工具入门介绍之一<新建工程篇>

lae界面开发工具入门之介绍二--<渲染组件篇>

lae界面开发工具入门之介绍三--<布局篇>

lae界面开发工具入门之介绍四-- <秘籍篇-拷贝粘贴>

lae界面开发工具入门之介绍五--<秘籍篇-杂项>

lae界面开发工具入门之介绍六--<秘籍篇-状态篇>

关于lae工具问题单独介绍!

--lua代码

lua编辑器 csdn下载

github下载地址,csdn没有更新版本功能,这里改为git,可实时获得最新的版本下载地址:

--目录浏览器下载地址

https://github.com/ouloba/folder-explorer.git

--辅助接口

LXZDoFile("LXZHelper.lua");

LXZDoFile("serial.lua");

--每帧调用,root窗口status中IsActive设置为true,即可触发OnUpdate事件。local function OnUpdate(window, msg, sender)

UpdateWindow();end

--更新目录子目录或者文件列表local function UpdateDirectry(dir)

local root = HelperGetRoot();

--set current dir.

lfs.chdir(dir);

HelperSetWindowText(root:GetLXZWindow("directry"), dir);

--

local items = root:GetLXZWindow("folders:area:items"); --目录文件容器

local item = root:GetLXZWindow("folders:item"); --目录文件项

local path = lfs.currentdir();

--清除容器中内容

items:ClearChilds();

--遍历该目录下的子目录文件

local cnt = 0;

for file in lfs.dir(lfs.currentdir()) do

local wnd = item:Clone(); --克隆一个目录文件项"folders:item"

wnd:Show(); --显示

HelperSetWindowText(wnd:GetChild("text"), file); --设置目录或者文件名

items:AddChild(wnd); --加入items容器中

local f = path.."\\"..file;

local attr = lfs.attributes(f);

if attr and attr.mode=="directory" then

wnd:GetChild("icon"):SetState(0); --通过0状态设置目录图标

else

wnd:GetChild("icon"):SetState(1);--通过1状态设置文件名图标

end

cnt=cnt+1;

end

--如果无法访问该目录,则添加"."与".."

if cnt==0 then

local wnd = item:Clone();

wnd:Show();

HelperSetWindowText(wnd:GetChild("text"), ".");

items:AddChild(wnd);

local wnd = item:Clone();

wnd:Show();

HelperSetWindowText(wnd:GetChild("text"), "..");

items:AddChild(wnd);

end

--垂直滚动条适应内容大小。

local msg = CLXZMessage:new_local();

local wnd = root:GetLXZWindow("folders:vertical slider");

wnd:ProcMessage("OnReset", msg, wnd);

end

--点击目录或者文件项local function OnClickItem(window, msg, sender)

local file=HelperGetWindowText(sender:GetChild("text"));

local path = lfs.currentdir();

local f = path.."\\"..file;

local attr,err = lfs.attributes (f)

if attr== nil then

LXZMessageBox("error:"..err);

return;

end

-- LXZMessageBox("type(attr)"..type(attr).."f:"..f)

assert (type(attr) == "table");

if attr.mode == "directory" then --如果是目录

UpdateDirectry(f);

end

end

--ui加载时触发该事件local function OnLoad(window, msg, sender)

local root = HelperGetRoot();

--set default.

local default_dir = "c:\\";

HelperSetWindowText(root:GetLXZWindow("directry"), default_dir);

--set folder list.

UpdateDirectry(default_dir);end

--事件与接口绑定local event_callback = {}

event_callback ["OnUpdate"] = OnUpdate;

event_callback ["OnLoad"] = OnLoad;

event_callback ["OnClickItem"] = OnClickItem;

--事件分发器function main_dispacher(window, cmd, msg, sender)--- LXZAPI_OutputDebugStr("cmd 1:"..cmd);

if(event_callback[cmd] ~= nil) then-- LXZAPI_OutputDebugStr("cmd 2:"..cmd);

event_callback[cmd](window, msg, sender);

endend

增加权限、创建时间、修改时间等

--增加lua代码

if attr then

HelperSetWindowText(wnd:GetChild("access time"), os.date("%c", attr.access) );

HelperSetWindowText(wnd:GetChild("modify time"), os.date("%c", attr.modification));

HelperSetWindowText(wnd:GetChild("change time"), os.date("%c", attr.change));

HelperSetWindowText(wnd:GetChild("permissions"), attr.permissions);

end

--界面修改如下

--增加浏览图片的功能

--修改lua代码,增加事件

--获取扩展名 function getextension(filename)

return filename:match(".+%.(%w+)$") end

--鼠标进入local function OnMouseEnterItem(window, msg, sender)

local file=HelperGetWindowText(sender:GetChild("text"));

local path = lfs.currentdir();

local f = path.."\\"..file;

local attr,err = lfs.attributes (f)

if attr== nil then

LXZMessageBox("error:"..err);

return;

end

local root = HelperGetRoot();

assert (type(attr) == "table");

local ext = getextension(file);

LXZAPI_OutputDebugStr("OnMouseEnterItem:"..f.." mode:"..attr.mode);

if attr.mode == "file" and (ext=="png" or ext=="PNG") then --如果是图片文件

LXZAPI_OutputDebugStr("OnMouseEnterItem:"..f.." ext:"..ext.." mode:"..attr.mode);

local wnd = root:GetLXZWindow ("folders:show picture");

HelperSetWindowPictureFile(wnd,f);

wnd:Show();

HelperCoroutine(function(thread)

AddWndUpdateFunc(wnd, EffectFaceOut, {from=255, End=200,step=3, old=255, hide=true}, thread);

coroutine.yield();

local texture = ILXZTexture:GetTexture(f);

if texture then

texture:RemoveTexture();

end

end);

endend

表现如下

时间: 2024-10-29 22:52:03

100行代码实现简单目录浏览器制作的相关文章

100行代码实现最简单的基于FFMPEG+SDL的视频播放器(SDL1.x)【转】

转自:http://blog.csdn.net/leixiaohua1020/article/details/8652605 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] 简介 流程图 simplest_ffmpeg_player标准版代码 simplest_ffmpeg_player_suSU版代码 结果 FFMPEG相关学习资料 补充问题 ===================================================== 最简单的基于FFmp

用JavaCV改写“100行代码实现最简单的基于FFMPEG+SDL的视频播放器 ”

FFMPEG的文档少,JavaCV的文档就更少了.从网上找到这篇100行代码实现最简单的基于FFMPEG+SDL的视频播放器.地址是http://blog.csdn.net/leixiaohua1020/article/details/8652605. 用JavaCV重新实现并使用opencv_highgui进行显示. 1 import com.googlecode.javacpp.IntPointer; 2 import com.googlecode.javacpp.Pointer; 3 im

不到100行代码实现一个简单的推荐系统

似乎咱的产品七,八年前就想做个推荐系统的,就是类似根据用户的喜好,自动的找到用户喜欢的电影或者节目,给用户做推荐.可是这么多年过去了,不知道是领导忘记了还是怎么了,连个影子还没见到. 而市场上各种产品的都有了推荐系统了.比如常见的各种购物网站京东,亚马逊,淘宝之类的商品推荐,视频网站优酷的的类似影片推荐,豆瓣音乐的音乐推荐...... 一个好的推荐系统推荐的精度必然很高,能够真的发现用户的潜在需求或喜好,提高购物网詀的销量,让视频网站发现用户喜欢的收费电影... 可是要实现一个高精度的推荐系统不

不到100行代码实现一个推荐系统

似乎咱的产品七,八年前就想做个推荐系统的,就是类似根据用户的喜好,自动的找到用户喜欢的电影或者节目,给用户做推荐.可是这么多年过去了,不知道是领导忘记了还是怎么了,连个影子还没见到. 而市场上各种产品的都有了推荐系统了.比如常见的各种购物网站京东,亚马逊,淘宝之类的商品推荐,视频网站优酷的的类似影片推荐,豆瓣音乐的音乐推荐...... 一个好的推荐系统推荐的精度必然很高,能够真的发现用户的潜在需求或喜好,提高购物网詀的销量,让视频网站发现用户喜欢的收费电影... 可是要实现一个高精度的推荐系统不

100行代码教你教务系统自动抢课!

帮助广大学生解决抢课问题!自动抢课!! 100行代码帮你实现抢课! ? 本项目使用了python中splinter的API接口用来操作页面交互,用了twilio用来给手机发送短信通知抢课成功. ? 欢迎大家来全球最大同性交友网站Github:https://github.com/xubin97 来fork我的菜鸡代码,希望你能来继续增加更多功能,我也会不定期更新功能! ? 其中splinter API文档链接:https://splinter.readthedocs.io/en/latest/m

GameBuilder开发游戏应用系列之100行代码实现贪吃蛇

在线预览:http://osgames.duapp.com/apprun.html?appid=osgames1-801422234293697 在线编辑:http://osgames.duapp.com/gamebuilder.php?appid=osgames1-801422234293697 微信扫描: 运行截图: 除了重力感应游戏,GameBuilder开发传统的游戏也毫不逊色,作为一个怀旧的人,总是对这类游戏情有独钟. 贪吃蛇主要靠一个[UICanvas]来实现,前面一片博客GameB

Python实现3行代码解简单的一元一次方程

Python实现3行代码解简单的一元一次方程 class Solution(object): def exec(self, equation): vars = None eqList = list(equation) denth = 0 for i,each in enumerate(equation): if each in "abcdefghijklmnopqrstuvwxyz": vars = each if i == 0: continue if equation[i-1] i

100 行代码实现的 JavaScript MVC 样式框架

介绍 使用过 JavaScript框架(如 AngularJS, Backbone 或者Ember)的人都很熟悉在UI(用户界面,前端)中mvc的工作机理.这些框架实现了MVC,使得在一个单页面中实现根据需要变化视图时更加轻松,而模型-视图-控制器(mvc)的核心概念就是:处理传入请求的控制器.显示信息的视图.表示业务规则和数据访问的模型. 因此,当需要创建这样一个需要在单个页面中实现切换出不同内容的应用时,我们通常选择使用上述框架之一.但是,如果我们仅仅需要一个在一个url中实现视图切换的框架

基于zbus网络通讯模块实现的MySQL透明代理(&lt;100行代码)

项目地址 https://git.oschina.net/rushmore/zbus 我们上次讲到zbus网络通讯的核心API: Dispatcher -- 负责-NIO网络事件Selector引擎的管理,对Selector引擎负载均衡 IoAdaptor -- 网络事件的处理,服务器与客户端共用,负责读写,消息分包组包等 Session -- 代表网络链接,可以读写消息 实际的应用,我们几乎只需要做IoAdaptor的个性化实现就能完成高效的网络通讯服务,今天我们将举例说明如何个性化这个IoA