📄 菜 单 的 汉 化 .htm
字号:
<html>
<head>
<link REL="stylesheet" HREF="/style.css" TYPE="text/css">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>计算机世界日报:
用DELPHI实现菜单的汉化
</title>
<!--***********-->
</head>
<body bgcolor="#FFFFFF" >
<p><br>
<font color="#b904e8"><b><em><a href="class.htm">返回</a></em></b></font>
<center>
<font color="#0000c0"><h2>
用DELPHI 实 现 菜 单 的 汉 化
</h2></font>
<h3>
嘉 峪 关 市 计 算 机 站
<br>
王 润 德
</h3>
</center>
<p><font color="#ffffff">----</font>
现 在 我 们 经 常 看 到 一 些 软 件 汉 化 包, 例‘ 晴 窗 伴 侣’ 是PHOTOSHOP 的 汉 化 包, 其 实 我 们 只 要 对WINDOWS 的 编 程 熟 悉, 也 可 以 自 己 编 写 某 些 软 件 的 汉 化 包。 这 样 不 管 软 件 大 小, 只 要 你 喜 欢 就 可 以 给 做 一 个 汉 化 包。 下 面 的 程 序 是 一 些 主 要 的 步 骤。 其 实 你 还 可 以 用 别 的 方 法 来 实 现, 亲 自 试 试 吧。
<p><font color="#ffffff">----</font>
在 运 行 程 序 之 前 首 先 生 成 一 个 中 英 文 菜 单 对 照 表 文 件, 产 生 时 可 以 参 照 该 程 序 自 己 编 制 一 个 获 得 系 统 的 原 菜 单 内 容 的 程 序, 然 后 在 之 后 输 入 菜 单 的 汉 字 内 容。 其 格 式 如 下:
<pre>
SAVE AS 保存到....
. .
..
EXIT 退出系统
// 程序开始
unit wrdxt;
interface
uses
Windows, Messages, SysUtils, Classes,
Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
ListBox1: TListBox;
ListBox2: TListBox;
procedure Button1Click(Sender: TObject);
procedure FormActivate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
childmenu,mainmenu,c2menu:hmenu;
wndhandle:hwnd;
mystr:pchar;
mainnum,childNUM,c2num:integer;
MYCHAR:STRING;
mm3,mm6:string[19];
mm4,mm5:string;
implementation
{$R *.DFM}
//我用表单的CLICK事件激活,
其实用ACTIVE事件会更好
procedure TForm1.Button1Click(Sender: TObject);
var
start1,start2,start3,start4,start5:integer;
begin
//通过标题获得窗口句柄
wndhandle:=findwindow(nil,mystr);
//通过标题获得菜单句柄
mainmenu:=getmenu(wndhandle);
//取得顶行菜单数
mainnum:=getmenuitemcount(mainmenu);
//汉化菜单
for start1:=0 to mainnum do
begin
mm5:='';
//取得菜单项的标题
getmenustring(mainmenu,start1,PCHAR
(myChAR),20,MF_BYPOSITION);
mm6:=string(pchar(mychar));
for start3:=0 to listbox1.items.count-1 do
begin
mm4:=listbox1.Items[start3];
mm3:= mm4;
if (string(mm6)=trim(mm3)) then
begin
for start4:=21 to length(mm4) do
begin
mm5:=mm5+mm4[start4];
end;
end;
end;
if mm5<>'' then
modifymenu(mainmenu,start1,MF_BYPOSITION,
getmenuitemid(mainmenu,start1),pchar(mm5));
childmenu:=getsubmenu(MAINMENU,start1);
childnum:=getmenuitemcount(childmenu);
//汉化下拉菜单
for start2:=0 to childnum do
begin
mm5:='';
getmenustring(childmenu,start2,PCHAR
(mychar),20,MF_BYPOSITION);
mm6:=string(pchar(mychar));
for start3:=0 to listbox1.items.count-1 do
begin
mm4:=listbox1.Items[start3];
mm3:= mm4;
if (string(mm6)=trim(mm3)) then
begin
for start4:=21 to length(mm4) do
begin
mm5:=mm5+mm4[start4];
end;
end;
end;
if mm5<>'' then
modifymenu(childmenu,start2,MF_BYPOSITION,
getmenuitemid(childmenu,start2),pchar(mm5));
c2menu:=getsubmenu(childMENU,start2);
c2num:=getmenuitemcount(c2menu);
for start5:=0 to c2num do
begin
mm5:='';
getmenustring(c2menu,start5,PCHAR
(mychar),20,MF_BYPOSITION);
mm6:=string(pchar(mychar));
for start3:=0 to listbox1.items.count-1 do
begin
mm4:=listbox1.Items[start3];
mm3:= mm4;
if (string(mm6)=trim(mm3)) then
begin
for start4:=21 to length(mm4) do
begin
mm5:=mm5+mm4[start4];
end;
end;
end;
if mm5<>'' then
modifymenu(c2menu,start5,MF_BYPOSITION,
getmenuitemid(c2menu,start5),pchar(mm5));
END;
END;
end;
end;
procedure TForm1.FormActivate(Sender: TObject);
begin
//要汉化的系统的窗口标题
//mystr:='adobe photoshop';
mystr:='frontpage explorer';
mychar:=' ';
//装入已编辑好的中英文菜单对照文件
listbox1.items.loadfromfile('myfile2.txt');
end;
end.
</pre>
<p align="right"><small><em>中国计算机世界出版服务公司版权所有</em></small>
<br>
</p>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -