搜索
bottom↓
回复: 619

借阿莫的宝地开源个原创的LCD菜单内核,希望各位OURDEV的兄弟们继续努力,将这个菜单内

  [复制链接]
(353318216)

出0入0汤圆

发表于 2010-5-27 00:04:06 | 显示全部楼层 |阅读模式
这个得从上一年我要做一个带有菜单的项目说起,一开始听说要做个带有菜单的项目,不知从何做起,在阿莫这看到了《一个占用内存极少的菜单系统的实现》,研究了这个菜单的代码结构并参照这个菜单的内核,自己写了个菜单代码。也就从这里开始,自己理解了菜单是一个怎样的东西。当我把这个写好的菜单用到我的系统上,我注意到了有几个地方要改进,第一:菜单的移植性,第二:菜单的修改维护,第三:菜单项目的扩展功能(使用灵活性)。

提示一下:其实我只是提出一些我个人的观点和学术上的建议,我们更多的是互相交流学习,取长补短,共同进步。

第一:菜单的移植性


_CONST_ KbdTabStruct KeyTab[]={
//       |-----------> Index
//       |  Up
//       |  |  Down
//       |  |  |  Left
//       |  |  |  |  Right   --->功能函数
//       |  |  |  |  |       |
       { 0, 1, 2, 3, 4,(*DispMenuTop)},// 待机画面
       { 1, 0, 0, 0, 0,(*DispMenuTopUp)},
       { 2, 0, 0, 0, 0,(*DispMenuTopDown)},
       { 3, 0, 0, 0, 0,(*DispMenuTopLeft)},
       { 4, 0, 0, 0, 0,(*DispMenuTopRight)},

       { 5, 6, 7, 8, 9,(*DispIcoMenuInit)}, //图标层菜单
       { 6, 0, 0, 0, 0,(*DispIcoMenuUp)},   //
       { 7, 0, 0, 0, 0,(*DispIcoMenuDown)}, //
       { 8, 0, 0, 0, 0,(*DispIcoMenuLeft)}, //
       { 9, 0, 0, 0, 0,(*DispIcoMenuRight)},//

       {10,11,12,13,14,(*DispMenuFuncInit)}, //"功能"
       {11, 0, 0, 0, 0,(*DispMenuFuncUp)},   //
       {12, 0, 0, 0, 0,(*DispMenuFuncDown)}, //
       {13, 0, 0, 0, 0,(*DispMenuFuncLeft)}, //
       {14, 0, 0, 0, 0,(*DispMenuFuncRight)},//

       {15,16,17,18,19,(*DispMenuParaInit)}, //"参数"
       {16, 0, 0, 0, 0,(*DispMenuParaUp)},   //
       {17, 0, 0, 0, 0,(*DispMenuParaDown)}, //
       {18, 0, 0, 0, 0,(*DispMenuParaLeft)}, //
       {19, 0, 0, 0, 0,(*DispMenuParaRight)},//

       {20,21,22,23,24,(*DispMenuLanguageInit)}, //"语言"
       {21, 0, 0, 0, 0,(*DispMenuLanguageUp)},   //
       {22, 0, 0, 0, 0,(*DispMenuLanguageDown)}, //
       {23, 0, 0, 0, 0,(*DispMenuLanguageLeft)}, //
       {24, 0, 0, 0, 0,(*DispMenuLanguageRight)},//


       {25,26,27,28,29,(*DispMenuMeasureInit)}, //"测量"
       {26, 0, 0, 0, 0,(*DispMenuMeasureUp)},   //
       {27, 0, 0, 0, 0,(*DispMenuMeasureDown)}, //
       {28, 0, 0, 0, 0,(*DispMenuMeasureLeft)}, //
       {29, 0, 0, 0, 0,(*DispMenuMeasureRight)},//
#ifdef DynamicBar
       {30,31,32,33,34,(*DispMenuDataInit)}, //"Data"
       {31, 0, 0, 0, 0,(*DispMenuDataUp)},   //
       {32, 0, 0, 0, 0,(*DispMenuDataDown)}, //
       {33, 0, 0, 0, 0,(*DispMenuDataLeft)}, //
       {34, 0, 0, 0, 0,(*DispMenuDataRight)},//
#endif

};

这个是菜单的结构,在做程序的时间都一一定好那个项在那个位置,当移植到其它的项目上,这个菜单全部都得重做。

第二:菜单的修改维护

当菜单项要修改位置、菜单项功能和菜单扩展功能时,所需做的功夫比较大。当菜单项比较多,而且又有菜单扩展功能,修改起来有时很容易搞乱。

第三:菜单项目的扩展功能(使用灵活性)

举个例子:当前菜单项是“电机启动”窗口提示按某个键“启动电机”,当电机启动后菜单项中文显示为“电机停止” 窗口又提示按某个键“电机停止”。

再有就是同一个菜单项要负责多个扩展功能

举个例子:当前菜单项是“电机控制”再按确定后,弹出一个小窗口并列表显示数个电机的顺序,面板上的数字键都可单独控制一个确定的电机启动/运行。

要在这个菜单内核上实现这些功能的时候,就显示有些力不从心了。

/****************************************************************************************/
点击此处下载 ourdev_557291.rar(文件大小:3K) (原文件名:menu.rar)

这个代码是我参照《一个占用内存极少的菜单系统的实现》写的,在可移植性上我还是做了些改进,你留心一下会发现不同的菜单层UP与DOWN的代码是一样的,移植和维护都不用动这一部分的代码。这里只要就是菜单层之间的切换比较麻烦。

/*******************************************************************************************/
以下是我从项目里整理出来的原创菜单源码
我的特点是以菜单节点为对象而组建的一个菜单体,每层菜单最大支持99菜单项

//--------菜单节点结构体
typedef struct _MenuNode
{
   unsigned int  MenuNodeID;
   unsigned char *MenuString;
   unsigned char MenuStatus;
   struct _MenuNode *First_Node;
   struct _MenuNode *Last_Node;
   struct _MenuNode *Prev_Node;
   struct _MenuNode *Next_Node;
   void(*Action)(unsigned char in);
}MenuNode;

//--------菜单链表
typedef struct _MenuList
{
   struct _MenuNode *Point_Node[MenuTotalNode];
}MenuList;

根椐菜单的编码结构可以随意修改和添加菜单项目,

//--------当前菜单信息
MenuNode MenuNode1 ={1,"1",0,(void*)0,(void*)0,(void*)0,(void*)0,MenuNode1Action};
MenuNode MenuNode2 ={2,"2",0,(void*)0,(void*)0,(void*)0,(void*)0,MenuNode2Action};
MenuNode MenuNode101={101,"101",0,(void*)0,(void*)0,(void*)0,(void*)0,MenuNode101Action};
MenuNode MenuNode102={102,"102",0,(void*)0,(void*)0,(void*)0,(void*)0,MenuNode102Action};
MenuNode MenuNode103={103,"103",0,(void*)0,(void*)0,(void*)0,(void*)0,MenuNode103Action};
MenuNode MenuNode201={201,"201",0,(void*)0,(void*)0,(void*)0,(void*)0,MenuNode201Action};

菜单的链表结构在菜单初始化完成

//--------菜单初始化
void MenuListInit(void)
{
   unsigned char i;
   MenuNode *InitMenuNode;
   CurrentMenuNode=&MenuNode1;
   MenuTotalList.Point_Node[0]=&MenuNode1;
   MenuTotalList.Point_Node[1]=&MenuNode2;
   MenuTotalList.Point_Node[2]=&MenuNode101;
   MenuTotalList.Point_Node[3]=&MenuNode102;
   MenuTotalList.Point_Node[4]=&MenuNode103;
   MenuTotalList.Point_Node[5]=&MenuNode201;
   for(i=0;i<MenuTotalNode;i++)
   {
      InitMenuNode=MenuTotalList.Point_Node;
      (*InitMenuNode).First_Node=SearchMenuNode((*InitMenuNode).MenuNodeID,firstnode);
      (*InitMenuNode).Last_Node =SearchMenuNode((*InitMenuNode).MenuNodeID,lastnode);
      (*InitMenuNode).Prev_Node =SearchMenuNode((*InitMenuNode).MenuNodeID,prevnode);
      (*InitMenuNode).Next_Node =SearchMenuNode((*InitMenuNode).MenuNodeID,nextnode);
   }
}

可以灵活添加和修改扩展功能

void MenuNode101Action(unsigned char key)
{
   Lcd_Clr();
   switch(key)
   {
      case key0code:
      case key1code:
      case key2code:
      case key3code:
      case key4code:
      case key5code:
      case key6code:
      case key7code:
      case key8code:
      case key9code:if(num101<8){tab101[num101]=key;num101++;}break;
      case key10code:if(num101>0){num101--;tab101[num101]=0;}break;
      default:break;
   }
   LCD_Write_String(0,0,"101请输入:");
   LCD_Write_Number(0,1,tab101,num101);
}

菜单内核调度代码在移植时不用修改

//--------菜单显示
void MenuShow(void)
{
   unsigned char i;
   static MenuNode *ShowMenuNode;
   switch(CurrentMenuStatus)
   {
      case menufunc:
           Menu_LCD_Clr();
           ShowMenuNode=SearchSomeOneMenuNode((*CurrentMenuNode).MenuNodeID-CurrentMenuCur);
           Menu_LCD_Write_String(0,CurrentMenuCur,"->");
           for(i=0;i<MaxScreenSize;i++)
           {
              Menu_LCD_Write_String(2,i,(*ShowMenuNode).MenuString);
              if((*ShowMenuNode).Last_Node!=NULL)
              {
                 ShowMenuNode=(*ShowMenuNode).Last_Node;
              }
              else
                break;
           }
           break;
      case numberfunc:
           break;
      default:break;
   }
}

//--------菜单索引操作
void MenuFunctionKey(unsigned char key)
{
   MenuIntDisable();
   switch(key)
   {
      case Key_First:
           if((*CurrentMenuNode).First_Node!=NULL)
           {
             CurrentMenuNode=(*CurrentMenuNode).First_Node;
             if(CurrentMenuCur>0)
                CurrentMenuCur--;
           }
           break;
      case Key_Last:
           if((*CurrentMenuNode).Last_Node!=NULL)
           {
             CurrentMenuNode=(*CurrentMenuNode).Last_Node;
             if(CurrentMenuCur<(MaxScreenSize-1))
                CurrentMenuCur++;
           }
           break;
      case Key_Prev:
           if((*CurrentMenuNode).Prev_Node!=NULL)
           {
             CurrentMenuNode=(*CurrentMenuNode).Prev_Node;
             MenuDeep--;
             CurrentMenuCur=MenuCurStack[MenuDeep];
           }
           break;
      case Key_Next:
           if((*CurrentMenuNode).Next_Node!=NULL)
           {
             CurrentMenuNode=(*CurrentMenuNode).Next_Node;
             MenuCurStack[MenuDeep]=CurrentMenuCur;
             CurrentMenuCur=0;
             MenuDeep++;
           }
           break;
      default:break;
   }
   MenuIntEnable();
}

//--------菜单扩展操作功能
void (*MenuNodeAction)(unsigned char key);

//--------菜单按键功能, 扩展功能
void MenuNumberKey(unsigned char key)
{
   MenuIntDisable();
   MenuNodeAction=(*CurrentMenuNode).Action;
   MenuIntEnable();
   (*MenuNodeAction)(key);
}

点击此处下载 ourdev_557288.rar(文件大小:10K) (原文件名:menusource.rar)

说明:这个菜单代码是在老板要求做一个小的手持终端设备,在我对菜单原有的理解和结合新的需要而设计出来的,也是从少少的几代码一步一步添加和调试完善起来的,我这次从这个项目里整理这个菜单代码出来,功能不是很完善,但我觉得这个菜单的内核结构是比较好的。

一些想法和建议:我希望朋友们看下我这个代码,有些不完善的地方可以提出来并自行修改用在你的项目上,并且能在这里跟贴,也尽你的一份责任,让同行兄弟们学习学习。还有就是,我现在不做技术了,有空也会搞下这个,但是少了,我知道阿莫这里平时是很多高手出没的,我希望有些热心的朋友继续完善这个菜单,也或你了解这个内核的结构,会有更好更有创意的想法并结合你自己的长处开发出一个更加好的GUI。当然啦,能开源给兄弟们学习使用,那就最好,兄弟们都会感谢你为我们辛勤而又无私的付出。

谢谢各位的支持!十分感谢!

有什么问题可以随时联系我,我的QQ是:178122887,电话:13570402599
(353317806)

出0入0汤圆

发表于 2010-5-27 00:10:56 | 显示全部楼层
沙发
(353317607)

出0入16汤圆

发表于 2010-5-27 00:14:15 | 显示全部楼层
收下
(353317390)

出0入0汤圆

发表于 2010-5-27 00:17:52 | 显示全部楼层
看来要好好学习才行,顺便过来支持LZ!
(353316009)

出0入0汤圆

发表于 2010-5-27 00:40:53 | 显示全部楼层
mark
(353315877)

出0入0汤圆

发表于 2010-5-27 00:43:05 | 显示全部楼层
mark
(353288939)

出0入0汤圆

发表于 2010-5-27 08:12:03 | 显示全部楼层
支持楼主的努力!
(353288199)

出0入0汤圆

发表于 2010-5-27 08:24:23 | 显示全部楼层
我最近也要研究一个占用内存极少的菜单系统的实现,前几天有人发过一个占用内存极少的菜单系统的实现在AVR上的移植
(353287892)

出0入0汤圆

发表于 2010-5-27 08:29:30 | 显示全部楼层
学习!!!!
(353287777)

出0入0汤圆

发表于 2010-5-27 08:31:25 | 显示全部楼层
排队学习
(353287174)

出0入0汤圆

发表于 2010-5-27 08:41:28 | 显示全部楼层
先先
(353286377)

出0入0汤圆

发表于 2010-5-27 08:54:45 | 显示全部楼层
学习!!!!
(353286323)

出0入0汤圆

发表于 2010-5-27 08:55:39 | 显示全部楼层
mark
(353286306)

出0入0汤圆

发表于 2010-5-27 08:55:56 | 显示全部楼层
谢谢分享
(353286193)

出0入0汤圆

发表于 2010-5-27 08:57:49 | 显示全部楼层
学习
(353285525)

出0入0汤圆

发表于 2010-5-27 09:08:57 | 显示全部楼层
先mark
(353285425)

出0入0汤圆

发表于 2010-5-27 09:10:37 | 显示全部楼层
mark
(353285160)

出0入0汤圆

发表于 2010-5-27 09:15:02 | 显示全部楼层
感谢分享
(353285009)

出0入0汤圆

发表于 2010-5-27 09:17:33 | 显示全部楼层
mark
(353284830)

出0入0汤圆

发表于 2010-5-27 09:20:32 | 显示全部楼层
MARK
(353284464)

出0入0汤圆

发表于 2010-5-27 09:26:38 | 显示全部楼层
如果论坛的人都像楼主这样就好了!
(353283211)

出10入0汤圆

发表于 2010-5-27 09:47:31 | 显示全部楼层
一直在为菜单的灵活性头痛不已。
(353282969)

出0入0汤圆

发表于 2010-5-27 09:51:33 | 显示全部楼层
支持
(353281985)

出0入0汤圆

发表于 2010-5-27 10:07:57 | 显示全部楼层
mark!
(353279921)

出0入0汤圆

发表于 2010-5-27 10:42:21 | 显示全部楼层
LZ, 用什么便宜环境来 写的? thks
(353279889)

出0入0汤圆

发表于 2010-5-27 10:42:53 | 显示全部楼层
mark学习一下
(353272604)

出0入0汤圆

发表于 2010-5-27 12:44:18 | 显示全部楼层
牛啊
(353272000)

出0入0汤圆

发表于 2010-5-27 12:54:22 | 显示全部楼层
mark,学习
(353271947)

出0入0汤圆

发表于 2010-5-27 12:55:15 | 显示全部楼层
mark
(353271817)

出0入0汤圆

发表于 2010-5-27 12:57:25 | 显示全部楼层
好啊!!!!
(353270341)

出0入239汤圆

发表于 2010-5-27 13:22:01 | 显示全部楼层
谢谢。
(353269931)

出0入0汤圆

发表于 2010-5-27 13:28:51 | 显示全部楼层
收藏,学习!
(353269208)

出0入0汤圆

发表于 2010-5-27 13:40:54 | 显示全部楼层
支持楼主,之前再用傻孩子的菜单,在其基础上改进了一些,虽然菜单切换比较方便,但觉得执行函数还不是很好!判读一下你的大作!
(353268564)

出0入0汤圆

发表于 2010-5-27 13:51:38 | 显示全部楼层
MARK GUI
(353267956)

出0入0汤圆

发表于 2010-5-27 14:01:46 | 显示全部楼层
很棒,感觉好像是糅合了《一个占用内存极少的菜单系统的实现》和傻孩子菜单的优点
(353264935)

出0入0汤圆

发表于 2010-5-27 14:52:07 | 显示全部楼层
好好学习一下
(353263928)

出0入0汤圆

发表于 2010-5-27 15:08:54 | 显示全部楼层
谢谢分享
(353263485)

出0入0汤圆

发表于 2010-5-27 15:16:17 | 显示全部楼层
Mark
(353260890)

出0入0汤圆

发表于 2010-5-27 15:59:32 | 显示全部楼层
LZ,可以帖几张图瞧瞧吗?
(353260252)

出0入0汤圆

发表于 2010-5-27 16:10:10 | 显示全部楼层
mark
(353259796)

出0入0汤圆

发表于 2010-5-27 16:17:46 | 显示全部楼层
没仔细看,先标记。
一个占用内存极少的菜单系统的实现 看了几遍,没看懂。傻孩子的那个倒全看懂了。
(353256828)

出0入0汤圆

发表于 2010-5-27 17:07:14 | 显示全部楼层
mark
(353246631)

出0入0汤圆

发表于 2010-5-27 19:57:11 | 显示全部楼层
mark
(353246061)

出0入0汤圆

发表于 2010-5-27 20:06:41 | 显示全部楼层
mark
(353244309)

出0入0汤圆

发表于 2010-5-27 20:35:53 | 显示全部楼层
thanks,收下了,以后会有用
(353241793)

出0入0汤圆

 楼主| 发表于 2010-5-27 21:17:49 | 显示全部楼层
呵呵,十分感谢ourdev各位兄弟的支持,我有空再整理些技术资料和一些心得出来和大家分享,望各位兄弟继续支持......
(353235127)

出0入0汤圆

发表于 2010-5-27 23:08:55 | 显示全部楼层
MARK
(353141312)

出0入0汤圆

发表于 2010-5-29 01:12:30 | 显示全部楼层
支持
(353110363)

出0入0汤圆

发表于 2010-5-29 09:48:19 | 显示全部楼层
支持
(353109807)

出0入0汤圆

发表于 2010-5-29 09:57:35 | 显示全部楼层
mark
(353109088)

出0入0汤圆

发表于 2010-5-29 10:09:34 | 显示全部楼层
mark
(353104011)

出0入0汤圆

发表于 2010-5-29 11:34:11 | 显示全部楼层
很好 标记先 迟点仔细研究才行~
(353097213)

出0入0汤圆

发表于 2010-5-29 13:27:29 | 显示全部楼层
mark
(353096920)

出0入0汤圆

发表于 2010-5-29 13:32:22 | 显示全部楼层
回复【34楼】jackielau  九天
很棒,感觉好像是糅合了《一个占用内存极少的菜单系统的实现》和傻孩子菜单的优点
-----------------------------------------------------------------------

这么厉害啊,那真的要马克一下
(353096817)

出0入0汤圆

发表于 2010-5-29 13:34:05 | 显示全部楼层
具有参数设置功能吗?比如说,电机转速:XXXX,
(353092770)

出0入0汤圆

发表于 2010-5-29 14:41:32 | 显示全部楼层
顶顶!正准备做个界面呢
(353089930)

出0入0汤圆

发表于 2010-5-29 15:28:52 | 显示全部楼层
mark
学学! 谢谢楼主啊
(352926107)

出0入0汤圆

发表于 2010-5-31 12:59:15 | 显示全部楼层
谢谢楼主!花了两天的时间搞懂了!不过有个漏洞。再查找菜单链接时候的一个输入参数定义成了char 型。结果菜单ID号大于255时候就跑飞了。

//--------查找任一菜单节点
MenuNode *SearchSomeOneMenuNode(unsigned int nodeid) 原来是 unsigned char nodeid
{
  unsigned char i;
   MenuNode *SearchMenuNode;
   MenuNode *ReturnMenuNode= 0;
   
   for(i=0;i<MenuTotalNode;i++)
   {
      SearchMenuNode=MenuTotalList.Point_Node;
      if((*SearchMenuNode).MenuNodeID==nodeid)
      {
         ReturnMenuNode=SearchMenuNode;
         break;
      }
   }
   return ReturnMenuNode;
}
(352923479)

出0入0汤圆

发表于 2010-5-31 13:43:03 | 显示全部楼层
mark.
(352848231)

出0入0汤圆

发表于 2010-6-1 10:37:11 | 显示全部楼层
好\(^o^)/~
(352650472)

出0入0汤圆

发表于 2010-6-3 17:33:10 | 显示全部楼层
谢谢分享,支持楼主的精神!
(352632331)

出0入0汤圆

发表于 2010-6-3 22:35:31 | 显示全部楼层
支持!!
(352632036)

出0入0汤圆

发表于 2010-6-3 22:40:26 | 显示全部楼层
喜欢LCD!
(352596586)

出0入0汤圆

发表于 2010-6-4 08:31:16 | 显示全部楼层
mark
(352592556)

出0入0汤圆

发表于 2010-6-4 09:38:26 | 显示全部楼层
mark
(351918109)

出0入0汤圆

发表于 2010-6-12 04:59:13 | 显示全部楼层
up
(351912622)

出0入0汤圆

发表于 2010-6-12 06:30:40 | 显示全部楼层
mark
(351909117)

出0入0汤圆

发表于 2010-6-12 07:29:05 | 显示全部楼层
学习了!!
(351908473)

出0入0汤圆

发表于 2010-6-12 07:39:49 | 显示全部楼层
学习了!
(351899808)

出0入0汤圆

发表于 2010-6-12 10:04:14 | 显示全部楼层
mark
(351895004)

出0入0汤圆

发表于 2010-6-12 11:24:18 | 显示全部楼层
鼓励一下
(351894460)

出0入0汤圆

发表于 2010-6-12 11:33:22 | 显示全部楼层
mark
(351880611)

出0入0汤圆

发表于 2010-6-12 15:24:11 | 显示全部楼层
谢谢分享
(351875728)

出0入0汤圆

发表于 2010-6-12 16:45:34 | 显示全部楼层
这个要顶
(351804740)

出0入0汤圆

发表于 2010-6-13 12:28:42 | 显示全部楼层
thks
(351801031)

出0入0汤圆

发表于 2010-6-13 13:30:31 | 显示全部楼层
很不错啊  赞一个   !!!
(351799982)

出0入0汤圆

发表于 2010-6-13 13:48:00 | 显示全部楼层
回复【34楼】jackielau  九天
很棒,感觉好像是糅合了《一个占用内存极少的菜单系统的实现》和傻孩子菜单的优点
-----------------------------------------------------------------------
这个强
(351724373)

出0入0汤圆

发表于 2010-6-14 10:48:09 | 显示全部楼层
MARK
(351692346)

出0入0汤圆

发表于 2010-6-14 19:41:56 | 显示全部楼层
楼主没弄个图片来看看。
(351688496)

出0入0汤圆

发表于 2010-6-14 20:46:06 | 显示全部楼层
MARK 学习下
(351685392)

出0入0汤圆

发表于 2010-6-14 21:37:50 | 显示全部楼层
MARK0001
(351681348)

出0入0汤圆

发表于 2010-6-14 22:45:14 | 显示全部楼层
mark xia
(351680400)

出0入0汤圆

发表于 2010-6-14 23:01:02 | 显示全部楼层
可能会用上,看看。
(351666946)

出0入0汤圆

发表于 2010-6-15 02:45:16 | 显示全部楼层
回复【57楼】XUEPENGBIN 薛鹏斌
-----------------------------------------------------------------------

这位哥们所言极是,大家要注意!1
(351666259)

出0入0汤圆

发表于 2010-6-15 02:56:43 | 显示全部楼层
thanks and mark
(351641635)

出0入0汤圆

发表于 2010-6-15 09:47:07 | 显示全部楼层
MARK
(351634735)

出0入0汤圆

发表于 2010-6-15 11:42:07 | 显示全部楼层
这个好!!
(351618319)

出0入0汤圆

发表于 2010-6-15 16:15:43 | 显示全部楼层
很好,谢谢
(351615986)

出0入0汤圆

发表于 2010-6-15 16:54:36 | 显示全部楼层
MARK一下!
(351613595)

出0入0汤圆

发表于 2010-6-15 17:34:27 | 显示全部楼层
再来看一看
(351595842)

出0入0汤圆

发表于 2010-6-15 22:30:20 | 显示全部楼层
很好,谢谢
(351590565)

出0入0汤圆

发表于 2010-6-15 23:58:17 | 显示全部楼层
mark
(351588967)

出0入0汤圆

发表于 2010-6-16 00:24:55 | 显示全部楼层
mark!!!!!!!!!!!
(351356194)

出0入0汤圆

发表于 2010-6-18 17:04:28 | 显示全部楼层
mark          
(350925111)

出0入0汤圆

发表于 2010-6-23 16:49:11 | 显示全部楼层
very good. Thank you
(350849052)

出0入0汤圆

发表于 2010-6-24 13:56:50 | 显示全部楼层
mark
(350837687)

出0入0汤圆

发表于 2010-6-24 17:06:15 | 显示全部楼层
mark!
(350511643)

出0入0汤圆

发表于 2010-6-28 11:40:19 | 显示全部楼层
很好的东西,下来看看
(350510557)

出0入0汤圆

发表于 2010-6-28 11:58:25 | 显示全部楼层
最近一个项目应该要用到,参考下,希望有用
(350509902)

出0入0汤圆

发表于 2010-6-28 12:09:20 | 显示全部楼层
mark
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子论坛 ( 公安交互式论坛备案:44190002001997 粤ICP备09047143号 )

GMT+8, 2021-8-6 08:01

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表