|
AutoCAD中菜单文件的灵活使用,是每个熟练操作者应该掌握的技巧。在菜单文件的使用中往往也容易出现一些问题,下文就是在对这些常见问题进行归纳总结后的集中解答,希望借助于这些文字,使初学者对如何用好菜单文件有一个全面的了解。
4 M; y; y* H5 q# b0 o" ?" f; P一、 菜单文件是如何运作的?
8 M8 i5 i" i. f+ N0 e( U8 A7 O如图1所示(略),AutoCAD系统的基础菜单文件放在AutoCAD安装目录下的\SUPPORT子目录中,共有五个文件。无论是AutoCAD系统的基础菜单,还是附加(局部)菜单或是用户自已定制的菜单,都是由.mnu/.mnc/.mns/.mnr/.mnl这五个文件组成。这五个文件组成了一个菜单的整体,但也并不是每一个菜单都包括全部的这五个文件。五个文件在菜单中起着各自的作用,但其作用是有主次之分的,其生成过程有也主从之分。要使用好菜单,必须明白这五个文件相互之间的关系和在菜单的调用过程中各自所起的作用。.mnu是模板菜单文件,除了.mnl文件外,其余三个文件最初都源出自于它。AutoCAD调用时自动对它进行编译,产生对应的.mnc和.mnr文件以及.mns文件。.mnc是.mnu文件编译后的版本,实际上.mnc文件是AutoCAD真正直接执行的菜单文件。.mnr也是在.mnu文件编译时产生,它存放着菜单所使用的位图之类的菜单资源。最初的.mns文件也是.mnu文件被编译时由AutoCAD自动产生的,它的基本内容和.mnu文件类似,只是少了有关的说明和注释行。在.mnu文件被编译时,.mns文件和.mnc文件的菜单内容是一致的,但如果在AutoCAD的操作中,用户对菜单的作了更改,这些改动都记录在.mns文件中,所以.mns文件对应的是AutoCAD系统中当前菜单的内容。.mnl文件在内容上相对独立一些,它包含由菜单所使用的AutoLISP表达式,如各种命令简化指令的定义,还有层排序、指定层这样的LISP程序。当加载一个菜单文件时,如果系统中存在与菜单文件同名的.mnl文件,则这个.mnl文件也会被加载。
0 ?% I# }) R7 {! n1 o; I1 W' i二、 何时用menu,何时用menuload加载菜单? ' v/ _, M1 z: ?
AutoCAD加载菜单有两个命令:menu和menuload。何时使用menu,何时使用nenuload?首先必须明白AutoCAD菜单是有等级之分的,分为基础菜单和局部(或称附加)菜单。 * Y: l, B& |7 g+ L4 d. Q) p
顾名思义,基础菜单是AutoCAD使用是菜单的基础,在AutoCAD中同时只能使用一个菜单文件作为基础菜单,acad.mnu是安装时缺省的基础菜单。menu命令专用于更换或重新加载一个基础菜单,AutoCAD启动时缺省的基础菜单是上一次通过menu命令调入的菜单。
; F3 r. ^+ w" S! m% n! w. H 局部菜单和基础菜单在文件体系上没有区别。在基础菜单之上,可以在下拉菜单中附加上额外的菜单项,这种可附加的菜单就可称作为局部菜单。局部菜单使用menuload命令加载。Menuload命令从下拉菜单中也可以调用,方法是:“Tools menu(工具)”→“Customize Menus(定制菜单)”。用menuload可以同时加载多个菜单文件。
: o2 Y" m% y* h 对于现有的下拉菜单项,都可以在进入“Menu Customization(菜单定制)”界面后,选“Menu Bar(菜单条)”来进行“Remove(移除)”或“Insert(插入)”。
B b) e# o/ S8 S) v Menuload加载的局部菜单可以用menuunload命令将其卸载。而用menu命令加载的基础菜单只能由下一个menu命令加载来替换。 9 D0 h/ m% }2 q2 a: I, b3 l# U9 H, t
三、 如何使对于菜单的改动得以固定和保存
3 w! q8 {1 ^( Z 菜单定制,特别是工具条定制是比较容易的,但很多人定制工具条后就会有一个问题:怎样将这些改动保存下来,以便再次安装AutoCAD时使用?要解决这个问题,首先要清楚AutoCAD菜单的加载过程。
+ A) w/ x# a5 c* _8 l; ^; O8 L AutoCAD加载菜单缺省的过程是这样的:菜单命令发出后,AutoCAD首先加载指定菜单名的.mnc文件;如果.mnc不存在,则寻找同名的.mns文件,将其编译成.mnc文件并完成加载;如果同名的.mnc和.mns文件都不存在,则寻找.mnu文件并完成编译和加载。根据菜单加载的过程可以采取如下措施:
' U% x! B( l9 {9 \ s6 J 如果对菜单模板文件.mnu进行了修改,并要让改动起作用,就必须在启动AutoCAD系统前将.mns和.mnc文件删除,或是重新加载.mnu模板菜单文件。加载.mnu文件应注意的是:在调入菜单的对话框中将文件类型改为“Menu template(*.mnu)”而不是缺省的“Menu files(*.mnc;*.mns)”,这样才能选择.mnu文件。
5 T9 c& R( v# p# ~, B: ?+ \. X 如果在AutoCAD中,用AutoCAD的功能对菜单进行了修改,这些变化自动记录在.mns文件中,为了使修改得以固定,在删除.mns文件之前,应将修改的内容移到.mnu文件的相应部位中,并将.mnu文件备份下来。如果这些改动是在基础菜单acad.mnu中,则应在AutoCAD重新安装后,用改动过的acad.mnu去覆盖AutoCAD原始的acad.mnu,并删除掉已存在的acad.mnc和acad.mns文件。
2 Y% b+ q4 ]- i; u% h 如果在AutoCAD启动后对菜单进行了修改,想要取消这些修改,恢复启动前的菜单状态,可以用menu命令,调入acad.mnu菜单模板文件。
8 R6 a9 z6 E g- ~. _5 q四、 如何对AutoCAD菜单进行汉化
, d) R+ G5 }5 a$ ^0 ], c9 a 在AutoCAD中有两个比较重要的菜单,acad.mnu和ac_bonus.mnu(在AutoCAD 2000中bouns的功能已合成到主菜单中)。acad.mnu是缺省的基础菜单,放在AutoCAD安装目录下的\SUPPORT子目录中;ac_bonus.mnu是典型的附加菜单,放在AutoCAD安装目录下的\BONUS\CADTOOLS子目录中。对AutoCAD R14菜单的汉化主要是对这两个菜单进行汉化,在AutoCAD 2000中仅需对acad.mnu进行汉化。如果准备对AutoCAD的菜单系统进行汉化或其它改动,最好在安装AutoCAD系统后,就立即把这两个文件备份下来,以在必要时恢复原始的菜单状态。 " |0 {) h$ b$ y+ D2 s1 l
常用的菜单汉化方法有三种:
- O6 p" \& _, `4 u! R8 J% O- a( P. y( m 1.利用四通利方、中文之星或东方快车这样的动态翻译软件显示汉字菜单。不过由于AutoCAD菜单术语高度的专业化,这些汉化软件翻译的结果往往会不知所云。 $ m9 F& |$ B( T Y8 u
2.自己动手汉化。看一看下面的两段文字,就明白对AutoCAD菜单永久性汉化原本是一件比较容易的事,实质上只是“翻译单词和术语”而已。此外,自己动手汉化的目的显然是翻译给别人用的。还有就是工作量问题,acad.mnu的文本长度多达100K,总的词汇量是可想而知的,不过对于Windows版的AutoCAD来说,常用到的菜单节仅有三个部分:一、下拉菜单节,标示为***POPn;二、工具条定义节,标志为 ***TOOLBARS;三、状态栏提示信息节,标志为***HELPSTRINGS。对于acad.mnu中占大部分篇幅的其它节,完全可以不进行汉化。欲详细了解菜单文件的结构,请参考AutoCAD帮助中的菜单定制一节。
7 j) ^! I6 ? w8 R8 L---- 第一段:菜单ac_bonus.mnu原文(片断) 9 W' P# V2 b) `# t o
***POP1
4 s4 K( x6 v$ K) O- k* ~- J ^[Bonus]. O+ `$ i9 I3 p
ID_MNBnsLayr [- >Layers]
' d9 @2 C0 {* h/ fID_BnsLayman [Layer Manager...]^C^Clman , @/ i8 G0 d/ K, k8 f) K# ^
…… ……4 e( n4 O7 [. @9 S
***TOOLBARS9 K7 f. A* C. M# o" q+ c
**TB_BONUS_LAYER_TOOLS4 F( L. h- A5 v% J- ^6 F- n
ID_TbBnsLaye [_Toolbar("Bonus Layer
1 c8 p4 D/ `$ e k3 k" BTools", _Floating, _Show, 197, 172, 1)]
2 w, H2 b" y$ x! q/ Y+ \…… ……
. P( S d4 p1 b: s3 Y$ u3 x2 @***HELPSTRINGS/ z% a/ V( A6 z" x
ID_BNSNCOPY [Copies entities nested
6 Q+ V1 s* b: ~; |4 [0 Y8 i9 C4 b0 Hinside blocks and xrefs: NCOPY]
3 A5 H3 r7 b; q- T+ k---- 第二段:菜单ac_bonus.mnu汉化后(片断)
2 S# k5 K' \) Y/ P: V***POP1
$ q: z' W+ s. f6 r) X# M4 J[Bonus扩充]
) F# @1 _4 A! ^0 j7 UID_MNBnsLayr [- >图层L]
3 W% c; L0 b9 aID_BnsLayman [图层管理L...]^C^Clman
, l9 u. N1 M, b( t/ l9 f…… ……$ o, j4 p1 |' M9 {$ Q
***TOOLBARS
5 w" g. z5 H1 Z9 K" i% h( v* `**TB_BONUS_LAYER_TOOLS) t' A0 j6 y! {# y% P
ID_TbBnsLaye [_Toolbar("BONUS图层工具",5 Y- L0 b2 X- G* E
_Floating, _Show, 197, 172, 1)]
e8 F6 X2 v& w…… ……
3 Q* [/ m/ |5 l. \1 j***HELPSTRINGS' w$ B& V& R" j }1 [8 }& w T
ID_BNSXDLIST [列出实体上的扩展数据: XDLIST]$ Z$ _6 e% ]4 q" C
除菜单文件之外,对于对话框和帮助文件的汉化也不是不可能。对话框一般可以在*.dll文件中去找,找到后可以在VC++中直接用中文字替换成英文字;汉化帮助文件也有好办法:从网上下载两个小软件,hlp2rtf.exe和hlpman,用hlp2rtf将 帮助文件转换为rtf文件,用英汉自动翻译将rft文件翻出个初稿,校正后再用hlpman返成中文帮助文件。不过,如果做成了这些工作,Autodesk公司中文版软件的工作都让你一个人给做了。 : g0 j3 B0 Z$ b Q
以上自己动手汉化菜单的工作不受AutoCAD版本的限制,所以有志的朋友可以在AutoCAD 2000中文版推出之前,动手出一个AutoCAD 2000汉化版。
9 t5 J$ L# [& |* l. E+ Y+ K0 b+ F/ K 3. 移植和引用。 ) W5 g% y7 g. u, @* b
AutoCAD R14是有正式的简体中文版的,但一般用户很少见到。国内很多AutoCAD的应用系统都是在英文版的基础上进行菜单汉化,但帮助文件和对话框还是英文的;这种汉化菜单系统还有一点不足之处是:由于在这样的应用系统中加入了许多与应用系统有关而非原来AutoCAD的内容,为此甚至影响到了AutoCAD原有功能的运行。
5 t5 Z( g" Z, E9 h, ^ 象.mnu或.mns这种的菜单文件是不加密的,所以完全可以从这些汉化的菜单中,挑选出与英文菜单文件acad.mnu中一一对应的片段,并加以补充和完善,来组成一个新的“纯净”的汉化菜单。我在站点http://personal.xfol.com/~7color中放了这种“纯净”的AutoCAD汉化菜单,AutoCAD R14的汉化菜单文件名为Pacad_menu.zip,AutoCAD 2000汉化菜单名为Pacad2000.zip,采用Winzip压缩,大小为36K,愿与喜欢纯净汉化版的朋友们私下同享。 : ^* P0 s+ F4 n" n1 d0 V) S! w5 B
五、 如何实现中英文菜单切换使用
; b0 v* Z0 z; c! c+ U) k6 | 在AutoCAD中同时保存中英文两套菜单系统,来回切换是可行的。具体作法是把汉化菜单文件改名为Pacad.mnu,放在AutoCAD安装目录下的\SUPPORT子目录中,当然还别忘了将acad.mnl复制成Pacad.mnl,放在Pacad.mnu同一目录中。在用中文菜单时,用menu命令加载Pacad;换回英文菜单时就再次使用menu命令加载acad菜单文件。
; @8 V" K# B1 Y1 T, z 这一工作可以用下面一小段LISP程序来完成,还可以进一步定义成带有“E/C”字样图标的工具按钮,这样就更方便了。
+ h' ^3 m# l/ d- h/ ^;;;中英文菜单转换程序E2P
& t7 ~ O: X1 @7 q. M) f ~% ~( S7 c;;;=====================2 H9 c3 q E) W( ~! W1 g5 R
;;首先在AutoCAD 2000中应删出程序中有关Pac_bonus.mnu的行* r1 q7 _7 f& [: k! q
;;;应将汉化菜单Pacad.mnu以及Pac_bonus.mnu
! s% a: j, s/ _ o+ g& |;;;放在与对应的英文菜单同一目录中。4 m. l4 R( s) F, r# E, X. d
;;;应将acad.mnl和ac_bonus.mnl复制出Pacad.mnl和Pac_bonus.mnl6 b3 O7 p( b+ [, J! l# c- E
;;;放在同一目录下。
/ T! C8 v5 i" Y* P(defun c:e2p(/ str01 int01) A J3 O" Z+ m
(setvar "filedia" 0)
( E9 b8 H' O h8 R* g(setq str01 (getvar "menuname"))
( O4 q0 K1 f9 s(setq int01 (strlen str01))
9 ~. L7 k6 ?0 }(if (= (substr str01 (- int01 4)) "acad")
9 J4 L" n- ], c3 [* g# q% @( M(progn. N/ _5 O# }4 L+ v5 [
(command "menu" "acad")( k7 {$ ?8 I9 m. F7 T1 o
(command "menuload" "ac_bonus")& I* k. R- A( I. e, C, ^6 _
)5 T4 ]$ s/ e: X% O
(progn& C4 Y) V7 @3 C d1 a
(command "menu" "acad")9 S2 f; W0 q/ r- v. g# M( N
(command "menuload" "ac_bonus")
' `" M/ |9 B; [2 {) q5 J)$ R4 Z' u' g3 n5 a M3 m7 V) ?
)
, \4 q' g8 t$ M) j(setvar "filedia" 1)
" X) a O. e- ~9 u5 V)
0 }' u; V4 |( q4 d4 D 以上仅就菜单文件使用中的问题做了一些探讨,要用好AutoCAD的菜单系统,还必需借助帮助文件或其它资料,对AutoCAD菜单文件的定制有所了解. |
|