搜索
bottom↓
回复: 619

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

  [复制链接]

出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

阿莫论坛20周年了!感谢大家的支持与爱护!!

该献的血还是要献的。你不献他不献。难道让我去献? --- 出自坛友:lovejp1981

出0入0汤圆

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

出0入228汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入4汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出10入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入264汤圆

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

出0入31汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出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;
}

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入9汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

发表于 2010-6-28 12:09:20 | 显示全部楼层
mark
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-9-3 18:28

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

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