示例#1
0
文件: window.c 项目: matao1314/UOS3
//创建窗口
//top,left,width,height:坐标及尺寸.
//id:window的ID
//type:window类型
//[7]:0,没有关闭按钮.1,有关闭按钮
//[6]:0,不读取背景色.1,读取背景色.
//[5]:0,标题靠左.1,标题居中.
//[4:2]:保留
//[1:0]:0,标准的窗口(仿XP);1,圆边窗口(仿Android)
//font:窗体标题文字字体大小
_window_obj *window_creat(u16 left, u16 top, u16 width, u16 height, u8 id, u8 type, u8 font)
{
    _window_obj *window_crt;
    if(width < (WIN_BTN_SIZE + 20) || height < WIN_CAPTION_HEIGHT) {
        return NULL;    //尺寸不能太小
    }
    window_crt = (_window_obj *)gui_memin_malloc(sizeof(_window_obj)); //分配内存
    if(window_crt == NULL) {
        return NULL;    //内存分配不够.
    }
    window_crt->top = top;
    window_crt->left = left;
    window_crt->width = width;
    window_crt->height = height;
    window_crt->id = id;
    window_crt->type = type;
    window_crt->sta = 0;
    window_crt->caption = 0;
    window_crt->captionheight = WIN_CAPTION_HEIGHT;	//默认高度
    window_crt->font = font;							//设置字体大小
    window_crt->arcwinr = 6;							//默认圆角的半径


    window_crt->captionbkcu = WIN_CAPTION_UPC;	//默认caption上部分背景色
    window_crt->captionbkcd = WIN_CAPTION_DOWNC;	//默认caption下部分背景色
    window_crt->captioncolor = WIN_CAPTION_COLOR;	//默认caption的颜色
    window_crt->windowbkc = WIN_BODY_BKC;			//默认背景色

    if(type & (1 << 7)) { //需要关闭按钮(仅适用仿XP窗口)
        window_crt->closebtn = btn_creat(left + width - WIN_BTN_SIZE - WIN_BTN_OFFSIDE, top + (window_crt->captionheight - WIN_BTN_SIZE) / 2, WIN_BTN_SIZE, WIN_BTN_SIZE, 0, 2); //创建边角按钮
        if(window_crt->closebtn == NULL) {
            window_delete(window_crt);		//释放之前申请的内存
            return NULL;					//内存分配不够.
        }
        window_crt->closebtn->caption = "×";				//关闭图标
        window_crt->closebtn->bcfucolor = WIN_BTN_FUPC;	//默认松开的颜色
        window_crt->closebtn->bcfdcolor = WIN_BTN_FDOWNC;	//默认按下的颜色
        window_crt->closebtn->bkctbl[0] = WIN_BTN_RIMC;	//圆角按钮边框颜色
        window_crt->closebtn->bkctbl[1] = WIN_BTN_TP1C;	//第一行的颜色
        window_crt->closebtn->bkctbl[2] = WIN_BTN_UPHC;	//上半部分颜色
        window_crt->closebtn->bkctbl[3] = WIN_BTN_DNHC;	//下半部分颜色

    } else {
        window_crt->closebtn = NULL;
    }


    if(type & (1 << 6)) { //需要读取背景色
        window_crt->bkctbl = (u16 *)gui_memin_malloc(width * height * 2); //要分配完整的背景色表
        if(window_crt->bkctbl == NULL) {
            window_delete(window_crt);		//释放之前申请的内存
            return NULL;					//内存分配不够.
        }
        window_read_backcolor(window_crt);	//读取背景色
    }
    return window_crt;
}
//创建进度条
//top,left,width,height:坐标.及尺寸. 
//type:按键类型 
//[bit7]:方向,0,水平;1,垂直;
//[bit6]:0,不显示浮标;1,显示浮标(百分进度条的时候,表示百分数);
//[bit5]:0,不显示进度柱,1,显示进度柱(其实就是颜色是否填充,是否跟着浮标填充颜色.)
//[bit4:2]:保留;
//[bit1:0]:0,标准进度条;1,百分数进度条;2,3,保留.
_progressbar_obj * progressbar_creat(u16 left,u16 top,u16 width,u16 height,u8 type)
{
 	_progressbar_obj * progressbar_crt;
	if(width<2||height<2)return NULL;//尺寸不能太小
	progressbar_crt=(_progressbar_obj*)gui_memin_malloc(sizeof(_progressbar_obj));//分配内存
	if(progressbar_crt==NULL)return NULL;//内存分配不够.
	progressbar_crt->top=top;
	progressbar_crt->left=left;
	progressbar_crt->width=width;
	progressbar_crt->height=height;
	progressbar_crt->type=type; 
	progressbar_crt->sta=0; 
	progressbar_crt->id=0; 
	progressbar_crt->totallen=0; 
	progressbar_crt->curpos=0; 
	//当使用百分数进度条和屏蔽进度条时,确保prgbarlen设置为0. 也就是不用显示浮标 
 	if(type&PRGB_TYPE_TEXT||(type&PRGB_TYPE_FEN)==0)progressbar_crt->prgbarlen=0;//默认滚条长度为10
	else progressbar_crt->prgbarlen=10;						//默认滚条长度为10
  	progressbar_crt->inbkcolora=PRGB_DFT_BKACOLOR;			//默认色
 	progressbar_crt->inbkcolorb=PRGB_DFT_BKBCOLOR;			//默认色 
 	progressbar_crt->infcolora=PRGB_DFT_FILLACOLOR;			//默认色
 	progressbar_crt->infcolorb=PRGB_DFT_FILLBCOLOR;			//默认色 
  	progressbar_crt->btncolor=PRGB_DFT_BTNCOLOR;			//默认色  
  	progressbar_crt->rimcolor=PRGB_DFT_RIMCOLOR;			//默认色  
  	return progressbar_crt;
}
示例#3
0
//创建滚动条
//top,left,width,height:坐标.及尺寸.
//type:[bit7]:方向,0,水平;1,垂直;bit[6:2]:保留;[bit1:0]:按钮类型,0,标准滚动条;1,没有端按钮的滚动条;2,3,保留.
_scrollbar_obj *scrollbar_creat(u16 left, u16 top, u16 width, u16 height, u8 type)
{
    _scrollbar_obj *scrollbar_crt;
    if((type & 0x80) == SCROLLBAR_DIR_HOR && (width < 2 * SCROLLBAR_PART_LEN || height < SCROLLBAR_MIN_THICK)) {
        return NULL;    //尺寸不能太小
    }
    if((type & 0x80) == SCROLLBAR_DIR_VER && (width < SCROLLBAR_MIN_THICK || height < 2 * SCROLLBAR_PART_LEN)) {
        return NULL;    //尺寸不能太小
    }
    scrollbar_crt = (_scrollbar_obj *)gui_memin_malloc(sizeof(_scrollbar_obj)); //分配内存
    if(scrollbar_crt == NULL) {
        return NULL;    //内存分配不够.
    }
    gui_memset((u8 *)scrollbar_crt, 0, sizeof(_scrollbar_obj)); //将scrollbar_crt的值全部设置为0
    scrollbar_crt->top = top;
    scrollbar_crt->left = left;
    scrollbar_crt->width = width;
    scrollbar_crt->height = height;
    scrollbar_crt->type = type;
    scrollbar_crt->sta = 0;
    scrollbar_crt->id = 0;
    scrollbar_crt->totalitems = 0;
    scrollbar_crt->itemsperpage = 0;
    scrollbar_crt->topitem = 0;
    scrollbar_crt->scbbarlen = 0;

    scrollbar_crt->inbkcolor = SCLB_DFT_INBKCOLOR;
    scrollbar_crt->btncolor = SCLB_DFT_BTNCOLOR;
    scrollbar_crt->rimcolor = SCLB_DFT_RIMCOLOR;
    return scrollbar_crt;
}
//增加一条listbox的条目
//0,增加成功;
//1,增加失败
u8 listbox_addlist(_listbox_obj * listbox,u8 *name)
{
	_listbox_list * listx;
	_listbox_list * listtemp;

	listx=(_listbox_list*)gui_memin_malloc(sizeof(_listbox_list));//分配内存
	if(listx==NULL)return 1;//内存分配不够.
	listx->name=name;//得到名字
	listx->nextlist=NULL;
 	if(listbox->list==NULL)//还未创建链表
	{
		listx->prevlist=NULL;
		listbox->list=listx;
	}else //已经创建了
	{
		listtemp=listbox->list;
		while(listtemp->nextlist!=NULL)listtemp=listtemp->nextlist;	 
		listx->prevlist=listtemp;
		listtemp->nextlist=listx;
	}
	listbox->scbv->totalitems++;//总条目数增加1条
	if(listbox->scbv->totalitems>listbox->scbv->itemsperpage)listbox->type|=0x80;//需要显示滚条
 	else listbox->type&=~0x80;//不需要显示滚条
	return 0;
}
//创建listbox
//top,left,width,height:坐标.及尺寸.
//width的范围:必须大于等于LBOX_ITEM_HEIGHT
//height的范围:必须是LBOX_ITEM_HEIGHT的整数倍.		 
//type:bit7,用于是否显示滚动条,其他位保留.
//font:字体类型 12/16表示字体为12*12或者16*16.
_listbox_obj * listbox_creat(u16 left,u16 top,u16 width,u16 height,u8 type,u8 font)
{
 	_listbox_obj * listbox_crt;
	_scrollbar_obj * scb_crt;	    
	if(height%gui_phy.listheight)return NULL;//尺寸不合格 	 				    
	if(height<gui_phy.listheight||width<gui_phy.listheight)return NULL;	//尺寸不合格
	listbox_crt=(_listbox_obj*)gui_memin_malloc(sizeof(_listbox_obj));//分配内存
	if(listbox_crt==NULL)return NULL;			//内存分配不够.
	scb_crt=scrollbar_creat(left+width-LBOX_SCB_WIDTH,top,LBOX_SCB_WIDTH,height,0x80);//创建scrollbar.
	if(scb_crt==NULL)//内存分配不够.
	{
		gui_memin_free(listbox_crt);
		return NULL;				
	}
 	scb_crt->itemsperpage=height/gui_phy.listheight;	//每页显示的条目数

 	listbox_crt->top=top;
	listbox_crt->left=left;
	listbox_crt->width=width;
	listbox_crt->height=height;
	listbox_crt->type=type;		//类型 
 	listbox_crt->sta=0;
	listbox_crt->id=0;
	listbox_crt->dbclick=0;		//双击标志清零
	listbox_crt->font=font;		//字体大小 
	listbox_crt->selindex=0;	//当前选中的索引
													
   	listbox_crt->lbkcolor=LBOX_DFT_LBKCOLOR;			//内部背景色
 	listbox_crt->lnselcolor=LBOX_DFT_LSELCOLOR;			//选中list后的字体颜色 
 	listbox_crt->lnselbkcolor=LBOX_DFT_LSELBKCOLOR;		//选中list后的背景色
 	listbox_crt->lncolor=LBOX_DFT_LNCOLOR;				//未选中的list字体颜色
   	listbox_crt->rimcolor=LBOX_DFT_RIMCOLOR;			//边框颜色
	
 	listbox_crt->fname=NULL;			    	    	//名字为空
	listbox_crt->namelen=0;			    	    		//长度清零
	listbox_crt->curnamepos=0;			    	    	//当前位置清零
	listbox_crt->oldtime=0;			    	    		//时间清零

	listbox_crt->scbv=scb_crt;			    			//滚动条
 	listbox_crt->list=NULL;								//无链表
 	return listbox_crt;
}
//闹铃处理(尺寸:44*20)
//x,y:坐标
//返回值,处理结果
u8 calendar_alarm_msg(u16 x,u16 y)
{
	u8 rval=0;  			  	
  	u16 *lcdbuf=0;							//LCD显存 
   	lcdbuf=(u16*)gui_memin_malloc(44*20*2);	//申请内存 
 	if(lcdbuf)								//申请成功
	{
		app_read_bkcolor(x,y,44,20,lcdbuf);	//读取背景色
		gui_fill_rectangle(x,y,44,20,LIGHTBLUE);
		gui_draw_rectangle(x,y,44,20,BROWN);
		gui_show_num(x+2,y+2,2,RED,16,alarm.hour,0X81); 
 		gui_show_ptchar(x+2+16,y+2,x+2+16+8,y+2+16,0,RED,16,':',1);
		gui_show_num(x+2+24,y+2,2,RED,16,alarm.min,0X81); 
  		OSTaskSuspend(6); //挂起主任务
		while(rval==0)
		{
			tp_dev.scan(0);
			if(tp_dev.sta&TP_PRES_DOWN)//触摸屏被按下
			{
				if(app_tp_is_in_area(&tp_dev,x,y,44,20))//判断某个时刻,触摸屏的值是不是在某个区域内
				{
					rval=0XFF;//取消
					break;
				} 
			 }
			delay_ms(5);  
    		if(system_task_return)break;			//需要返回	 
		}	 
		app_recover_bkcolor(x,y,44,20,lcdbuf);	//读取背景色
	}else rval=1;
	system_task_return=0;
	alarm.ringsta&=~(1<<7);	//取消闹铃   
	calendar_alarm_init((_alarm_obj*)&alarm,&calendar);	//重新初始化闹钟
	gui_memin_free(lcdbuf); 
	OSTaskResume(6); 		//恢复主任务
	system_task_return=0;
	return rval;
} 
//时间显示模式    
u8 calendar_play(void)
{
	u8 second=0;
	short temperate=0;	//温度值		   
	u8 t=0;
	u8 tempdate=0;
	u8 rval=0;			//返回值	
	u8 res;
	u16 xoff=0;
	u16 yoff=0;	//表盘y偏移量
	u16 r=0;	//表盘半径
	u8 d=0;		//指针长度
	  
	u8 TEMP_SEN_TYPE=0;	//默认使用DS18B20
	FIL* f_calendar=0;	 
	
  	f_calendar=(FIL *)gui_memin_malloc(sizeof(FIL));//开辟FIL字节的内存区域 
	if(f_calendar==NULL)rval=1;		//申请失败
	else
	{
		res=f_open(f_calendar,(const TCHAR*)APP_ASCII_S6030,FA_READ);//打开文件 
		if(res==FR_OK)
		{
			asc2_s6030=(u8*)gui_memex_malloc(f_calendar->fsize);	//为大字体开辟缓存地址
			if(asc2_s6030==0)rval=1;
			else 
			{
				res=f_read(f_calendar,asc2_s6030,f_calendar->fsize,(UINT*)&br);	//一次读取整个文件
 			}
			f_close(f_calendar);
		} 
		if(res)rval=res;
	} 	    
	if(rval==0)//无错误
	{	  
 		LCD_Clear(BLACK);//清黑屏    	  
		second=calendar.sec;//得到此刻的秒钟
		POINT_COLOR=GBLUE;
		Show_Str(48,60,lcddev.width,lcddev.height,(u8*)calendar_loading_str[gui_phy.language][0],16,0x01); //显示进入信息	    
		if(DS18B20_Init())
		{
			Show_Str(48,76,lcddev.width,lcddev.height,(u8*)calendar_loading_str[gui_phy.language][1],16,0x01);  
			delay_ms(500);
			Show_Str(48,92,lcddev.width,lcddev.height,(u8*)calendar_loading_str[gui_phy.language][2],16,0x01);  
			TEMP_SEN_TYPE=1; 
		}   	    
		delay_ms(1100);//等待1.1s 
		BACK_COLOR= BLACK;
		LCD_Clear(BLACK);//清黑屏 
		if(lcddev.width==240)
		{
			r=80;
			d=7; 
		}else if(lcddev.width==320)
		{
			r=120;
			d=9; 
		}else if(lcddev.width==480)
		{
			r=160;
			d=12; 
		}
		yoff=(lcddev.height-r*2-140)/2;
		TIME_TOPY=yoff+r*2+10;
		OTHER_TOPY=TIME_TOPY+60+10;
		xoff=(lcddev.width-240)/2;   
		calendar_circle_clock_drawpanel(lcddev.width/2,yoff+r,r*2,d);//显示指针时钟表盘 
		calendar_date_refresh();  //加载日历
		tempdate=calendar.w_date;//天数暂存器 		
		gui_phy.back_color=BLACK;
		gui_show_ptchar(xoff+70-4,TIME_TOPY,lcddev.width,lcddev.height,0,GBLUE,60,':',0);	//":"
		gui_show_ptchar(xoff+150-4,TIME_TOPY,lcddev.width,lcddev.height,0,GBLUE,60,':',0);	//":" 
	}
  	while(rval==0)
	{	
		RTC_Get();					//更新时间 
		if(system_task_return)break;//需要返回	  
 		if(second!=calendar.sec)	//秒钟改变了
		{ 	
  			second=calendar.sec;  
			calendar_circle_clock_showtime(lcddev.width/2,yoff+r,r*2,d,calendar.hour,calendar.min,calendar.sec);//指针时钟显示时间		
			gui_phy.back_color=BLACK;
			gui_show_num(xoff+10,TIME_TOPY,2,GBLUE,60,calendar.hour,0X80);	//显示时
			gui_show_num(xoff+90,TIME_TOPY,2,GBLUE,60,calendar.min,0X80);	//显示分
			gui_show_num(xoff+170,TIME_TOPY,2,GBLUE,60,calendar.sec,0X80);	//显示秒 					   
			if(t%2==0)//等待2秒钟
			{		 
  				if(TEMP_SEN_TYPE)temperate=Get_Temp();//得到内部温度传感器的温度值,0.1℃
				else temperate=DS18B20_Get_Temp();//得到18b20温度
				if(temperate<0)//温度为负数的时候,红色显示
				{
					POINT_COLOR=RED;
					temperate=-temperate;	//改为正温度
				}else POINT_COLOR=BRRED;	//正常为棕红色字体显示		
				gui_show_num(xoff+90,OTHER_TOPY,2,GBLUE,60,temperate/10,0X80);	//XX					   
				gui_show_ptchar(xoff+150,OTHER_TOPY,lcddev.width,lcddev.height,0,GBLUE,60,'.',0);	//"." 
				gui_show_ptchar(xoff+180-15,OTHER_TOPY,lcddev.width,lcddev.height,0,GBLUE,60,temperate%10+'0',0);//显示小数
				gui_show_ptchar(xoff+210-10,OTHER_TOPY,lcddev.width,lcddev.height,0,GBLUE,60,95+' ',0);//显示℃
				if(t>0)t=0;			 
			}  	
			if(calendar.w_date!=tempdate)
			{
				calendar_date_refresh();	//天数变化了,更新日历.  
				tempdate=calendar.w_date;	//修改tempdate,防止重复进入
			}
			t++;   
 		} 
		delay_ms(20);
 	};
 	while(tp_dev.sta&TP_PRES_DOWN)tp_dev.scan(0);//等待TP松开.
 	gui_memex_free(asc2_s6030);	//删除申请的内存
	asc2_s6030=0;				//清零
	gui_memin_free(f_calendar);	//删除申请的内存
	POINT_COLOR=BLUE;
	BACK_COLOR=WHITE ;	
	return rval;
}
//图片浏览
u8 picviewer_play(void)
{				 	 
	DIR picdir;			//picdir专用	  
	FILINFO picinfo;   		   
	u8 rval=0;			//返回值	  
	u8 *pname=0;
	u8 *fn=0;
	u8 picsta=0;		//ebook状态
						//0,属于文件浏览状态    
						//1,顺序播放图片
						//2,暂停状态    
	
	u16 curindex=0;	//当前浏览的图片文件的索引号
	u8  endecode=0;	//使能解码
	u8 key; 
	u16 dtime=0;	//延时时间
	u8 keyup=1;		//松开标记
	u8 pictype=0;	//图片类型 

   	_filelistbox_obj * flistbox; 
	_filelistbox_list * filelistx; 	//文件
 	_btn_obj* rbtn;		//返回按钮控件

	app_filebrower((u8*)APP_MFUNS_CAPTION_TBL[1][gui_phy.language],0X07);//选择目标文件,并得到目标数量
   	flistbox=filelistbox_creat(0,gui_phy.tbheight,lcddev.width,lcddev.height-gui_phy.tbheight*2,1,gui_phy.listfsize);//创建一个filelistbox
 	if(flistbox==NULL)rval=1;							//申请内存失败.
	else  
	{
		flistbox->fliter=FLBOX_FLT_PICTURE;				//图片文件
		filelistbox_add_disk(flistbox);					//添加磁盘路径
 		filelistbox_draw_listbox(flistbox);
	} 	  
	//为长文件名申请缓存区
 	picinfo.lfsize = _MAX_LFN * 2 + 1;
	picinfo.lfname = gui_memin_malloc(picinfo.lfsize);
	if(picinfo.lfname==NULL)rval=1;//申请内存失败 
   	else gui_memset((u8*)picinfo.lfname,0,picinfo.lfsize);
 	rbtn=btn_creat(lcddev.width-2*gui_phy.tbfsize-8-1,lcddev.height-gui_phy.tbheight,2*gui_phy.tbfsize+8,gui_phy.tbheight-1,0,0x03);//创建文字按钮
 	if(rbtn==NULL)rval=1;	//没有足够内存够分配
	else
	{																				
	 	rbtn->caption=(u8*)GUI_BACK_CAPTION_TBL[gui_phy.language];//返回 
	 	rbtn->font=gui_phy.tbfsize;//设置新的字体大小	 	 
		rbtn->bcfdcolor=WHITE;	//按下时的颜色
		rbtn->bcfucolor=WHITE;	//松开时的颜色
		btn_draw(rbtn);//画按钮
	}
	LED1=1;//关闭LED1
	while(rval==0)//主循环
	{
		tp_dev.scan(0);    
		in_obj.get_key(&tp_dev,IN_TYPE_TOUCH);	//得到按键键值   
		delay_ms(5);
		if(system_task_return)break;			//TPAD返回   	
		if(picsta==0)
		{
			filelistbox_check(flistbox,&in_obj);	//扫描文件
	 		if(flistbox->dbclick==0X81)				//双击文件了
			{	
				curindex=flistbox->selindex-flistbox->foldercnt;//得到当前图片索引号
				picsta=1;	//图片播放状态		 
				endecode=1;	//第一张图片自动播放 
				LCD_Clear(0x0);//黑屏 	 
			}
		}
		key=btn_check(rbtn,&in_obj);
  		if(key&&((rbtn->sta&0X80)==0))
		{		  
			if(flistbox->dbclick!=0X81)//在文件浏览的时候按了返回按钮,则返回上一层目录
			{
				filelistx=filelist_search(flistbox->list,flistbox->selindex);//得到此时选中的list的信息
				if(filelistx->type==FICO_DISK)//已经不能再往上了,则退出图片浏览
				{				 
					break;
				}else filelistbox_back(flistbox);//退回上一层目录	 
			} 
		} 
		if(endecode)
		{
     		rval=f_opendir(&picdir,(const TCHAR*)flistbox->path); //打开选中的目录
			if(rval)break;	 			   
			ff_enter(picdir.fs);//进入fatfs,防止被打断.
			dir_sdi(&picdir,flistbox->findextbl[curindex]);
			ff_leave(picdir.fs);//退出fatfs,继续运行os等
	 		rval=f_readdir(&picdir,&picinfo);//读取文件信息
			if(rval)break;//打开成功    
			fn=(u8*)(*picinfo.lfname?picinfo.lfname:picinfo.fname);
			pname=gui_memin_malloc(strlen((const char*)fn)+strlen((const char*)flistbox->path)+2);//申请内存
			if(pname==NULL)break;	//申请失败
			pname=gui_path_name(pname,flistbox->path,fn);	//文件名加入路径 
			pictype=f_typetell(pname); 
			if(pictype==T_GIF)gui_show_string(fn,5,5,lcddev.width-5,gui_phy.tbfsize,gui_phy.tbfsize,RED);	//显示GIF名字
			ai_load_picfile(pname,0,0,lcddev.width,lcddev.height,1);			//播放这个图片
			if(pictype!=T_GIF)gui_show_string(fn,5,5,lcddev.width-5,gui_phy.tbfsize,gui_phy.tbfsize,RED);	//显示图片名字						  
 			gui_memin_free(pname);			//释放内存 
			pname=NULL;
			endecode=0;		    
		}
		keyup=0;
		dtime=0;
		while(picsta)//按键扫描循环
		{     
			key=pic_tp_scan();   
			dtime++;
			if(dtime>400&&(picsta==1))key=3;//顺序播放状态下时间溢出,自动播放下一张图片    
			if(key)//有按键按下
			{ 
				dtime=0;
				if(keyup)
				{   
					keyup=0;
					if(key==1)//上一幅图片
					{
						if(curindex)curindex--;
						else curindex=flistbox->filecnt-1;
						endecode=1;
						LCD_Clear(0x0);//黑屏 	 
						break;
					}else if(key==2)//在暂停和非暂停之间切换
					{ 
						if(picsta==1)
						{
							picsta=2;
							LED1=0;	 	//表示暂停
						}else 
						{
							picsta=1;
							LED1=1;	   	//暂停结束
						} 
					}else if(key==3)
					{
						if(systemset.picmode==0)//顺序播放
						{
							if(curindex<(flistbox->filecnt-1))curindex++;
							else curindex=0;
						}else	//随机播放
						{   
							curindex=app_get_rand(flistbox->filecnt);//随机得到下一张图片的编号   	 
						}
						endecode=1;
						LCD_Clear(0x0);//黑屏 	 
						break;	 
					}  
				}
			}else keyup=1;//标记按键松开
			delay_ms(10);  
			if(system_task_return)picsta=0;//TPAD返回
			if(picsta==0)//回到文件浏览状态之前的处理
			{
				LED1=1;	   				//关闭LED1
				flistbox->dbclick=0;	//设置非文件浏览状态
				app_filebrower((u8*)APP_MFUNS_CAPTION_TBL[1][gui_phy.language],0X07);//选择目标文件,并得到目标数量
 				btn_draw(rbtn);			//画按钮
				filelistbox_rebuild_filelist(flistbox);//重建flistbox
 				system_task_return=0;	//还不能退出图片浏览
				break;
			}
		}
	}	
	LED1=1;//关闭LED1
	filelistbox_delete(flistbox);	//删除filelist 	  
	btn_delete(rbtn);				//删除按钮	 	  
 	gui_memin_free(pname);			//释放内存		  
 	gui_memin_free(picinfo.lfname);
 	return rval; 
}