前阵子帮朋友弄了个古汉文词字翻译系统,首先声明一下,本来是要弄古汉文翻译系统的(能翻译句子)但经仔细考虑后,感觉也只能做出个词字翻译系统出来.想想自己毕竟没学习过DELPHI这门语言,我记得我们本来是上学期要教的,但最终没交,教材也早买了,不过也没什么,老师叫看,最后还是碰上朋友要弄系统,才花了一周弄了个自我感觉不怎么良好的系统出来 .
想想,其实是可以弄出古文翻译系统出来的,怎奈自己学艺不精啊,看来以后要多加努力学习了,现在总结一下自己的学习经验吧,以供后人(古文翻译系统在网上没有出现过,希望今后能有高手弄出来)毕竟我本身是学C#的,兼学习一下C++,至于JAVA嘛,因为学校主要是教JAVA的,所以,基础知识也还可以.之前弄个成绩管理系统,也用过VB,总感觉VB和DELPHI差不多一样,都很简单,功能当然就比不上C++,JAVA,C#等了.想想自己出去用什么语言呢,不知道,反正现在主功C#先吧,出去工作再说了,看需要了,要是真的需要,用JAVA或C++都不一定.
现在介绍一下古汉文词典吧!
开发环境:XPSP2+DELPHI7.0+ACCESS2003
首先呢,是用ACCESS2003建数据库:WZDB
建表(wenzi):
编号(自动编号)
gw 文本 50
bhw 文本 200
主界面设计如下图:
主界面中包含三个TToolButton,一个TImageList控件,至于具体的命名,读者可看代码就可知道了,毕竟这个系统不难嘛.
主界面代码如下:
unit U_main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,Registry, ImgList, ComCtrls, ToolWin;
type
TF_main = class(TForm)
CoolBar1: TCoolBar;
ToolBar1: TToolBar;
ToolBtn_dzb: TToolButton;
ToolBtn_fy: TToolButton;
ToolBtn_close: TToolButton;
ToolButton4: TToolButton;
ImageList1: TImageList;
ToolButton1: TToolButton;
procedure ToolBtn_closeClick(Sender: TObject);
procedure ToolBtn_dzbClick(Sender: TObject);
procedure ToolBtn_fyClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
F_main: TF_main;
implementation
uses U_dzb, U_fy;
{$R *.dfm}
procedure TF_main.ToolBtn_closeClick(Sender: TObject);
begin
close;
end;
procedure TF_main.ToolBtn_dzbClick(Sender: TObject);
begin
//对照表
application.CreateForm(TF_dzb,F_dzb);
F_dzb.ShowModal;
F_dzb.Free;
end;
procedure TF_main.ToolBtn_fyClick(Sender: TObject);
begin
//翻译
application.CreateForm(TF_FY,F_FY);
F_FY.ShowModal;
F_FY.Free;
end;
end.
系统对应应用程序代码如下:
program Pwww;
uses
Forms,
U_main in 'U_main.pas' {F_main};
{$R *.res}
begin
Application.Initialize;
Application.Title := '翻译系统';
Application.CreateForm(TF_main, F_main);
Application.Run;
end.
添加词库数据文件的对照表界面设计这里就不介绍了,其中包括两个TLabel,两个TEdit,四个TButton,一个TTable,一个TDatabase,一个TDatasource控件,代码如下:
unit U_dzb;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, DBGrids,Registry, StdCtrls, Buttons, DB, DBTables;
type
TF_dzb = class(TForm)
GroupBox1: TGroupBox;
Label1: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Label2: TLabel;
Btn_Add: TBitBtn;
Btn_del: TBitBtn;
Btn_save: TBitBtn;
Btn_Close: TBitBtn;
DBGrid1: TDBGrid;
DataSource1: TDataSource;
Editbtn: TButton;
Table1: TTable;
Database1: TDatabase;
procedure FormShow(Sender: TObject);
procedure Btn_CloseClick(Sender: TObject);
procedure Btn_AddClick(Sender: TObject);
procedure EditbtnClick(Sender: TObject);
procedure Btn_delClick(Sender: TObject);
procedure Btn_saveClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
F_dzb: TF_dzb;
ps:string;
implementation
{$R *.dfm}
procedure TF_dzb.FormShow(Sender: TObject); //初始化对照表
begin
F_dzb.Top:=100;
F_dzb.Left:=100;
ps:=Table1.Bookmark; //指针初始位置
end;
procedure TF_dzb.Btn_CloseClick(Sender: TObject); //关闭
begin
close;
end;
procedure TF_dzb.Btn_AddClick(Sender: TObject); //添加
begin
with Table1 do
begin
Open;
Table1.IndexFieldNames:='古文';
if Table1.FindKey([Edit1.Text]) then
begin
showmessage('词库中巳有该词,请从新添加!');
end
else
begin
Edit;
Append;
Table1.FieldByName('古文').AsString:=Trim(Edit1.Text);
Table1.FieldByName('白话文').AsString:=Trim(Edit2.Text);
post;
end;
Table1.Bookmark:=ps; //指针返回初始位置
Edit1.Text:='';
Edit2.Text:='';
end;
end;
procedure TF_dzb.EditbtnClick(Sender: TObject); //修改
var
str:string;
begin
str:=InputBox('修改','修改为:',DBGrid1.SelectedField.AsString);
Table1.Edit;
DBGrid1.SelectedField.AsString:=str;
end;
procedure TF_dzb.Btn_delClick(Sender: TObject); //删除
begin
if Application.MessageBox('确定要删除此记录吗?','提示',MB_YESNO)=ID_Yes Then
begin
Try
Table1.Delete;
Application.MessageBox('删除成功.','提示',64);
Except
Application.MessageBox('系统出错,删除失败.','提示',64)
end;
end;
end;
procedure TF_dzb.Btn_saveClick(Sender: TObject); //保存
begin
Table1.refresh;
Application.MessageBox('保存成功','提示',64);
end;
procedure CreateSource; //自动注册数据源
var
registerTemp:TRegistry;
bData:array[0..0] of byte;
begin
registerTemp:=TRegistry.Create;
with registerTemp do
begin
RootKey:=HKEY_LOCAL_MACHINE;
if OpenKey('Software/ODBC/ODBC.INI/ODBC Data Sources',True) then
begin
WriteString('wenyanwen', 'Microsoft Access Driver (*.mdb)');
end
else
begin
showmessage('增加ODBC数据源失败');
exit;
end;
CloseKey;
if OpenKey('Software/ODBC/ODBC.INI/wenyanwen',True) then
begin
WriteString('DBQ','C:/fyxt/WZDB.mdb');
WriteString('Description', '我的新数据源');
WriteString('Driver','C:/WINDOWS/system32/odbcjt32.dll');
WriteInteger('DriverId',25);
WriteString('FIL','Ms Access');
WriteInteger('SafeTransactions',0);
WriteString('UID','');//用户名称
bData[0]:=0;
WriteBinaryData('Exclusive',bData,1);
WriteBinaryData( 'ReadOnly',bData,1);
end
else
begin
showmessage('增加ODBC数据源失败');
exit;
end;
CloseKey;
if OpenKey('Software/ODBC/ODBC.INI/wenyanwen/Engines/Jet',True) then
begin
WriteString('ImplicitCommitSync','');
WriteInteger('MaxBufferSize',2048);
WriteInteger('PageTimeout',5);
WriteInteger('Threads',3);
WriteString('UserCommitSync','Yes');
end
else
begin
showmessage('增加ODBC数据源失败');
exit;
end;
CloseKey;
Free;
end;
end;
procedure AutoLogo; //自定义数据库自动登录
var
MyDSN:string;
begin
MyDSN:='wenyanwen';
with F_dzb.Database1 do
begin
Params.Values['username']:='';
Params.Values['password']:='';
LoginPrompt:=false;
AliasName:='MyDSN';
end;
with F_dzb.Table1 do
begin
DatabaseName:='wenyanwen';
TableName:='wenzi';
Open;
Active:=True;
end;
end;
procedure TF_dzb.FormCreate(Sender: TObject);
begin
CreateSource;
AutoLogo;
end;
procedure TF_dzb.FormDestroy(Sender: TObject);
begin
Table1.close;
end;
end.
其中添加了自动注册数据源(不过这个自动注册数据源只能是你开发系统时在C盘开发时,才有效,否则无效,不过要是制作成安装程序包后,按理论,这个问题就得到解决了),还有就是自动注册数据源,要在uses上添加Registry.
翻译设计界面包括了三个TToolButton,一个TEdit,一个TMemon,一个TTable控件,其设计界面这里也不介绍了,代码如下:
unit U_fy;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, ComCtrls, ToolWin, DB, DBTables;
type
TF_FY = class(TForm)
CoolBar1: TCoolBar;
ToolBar1: TToolBar;
fyBtn: TToolButton;
ToolButton4: TToolButton;
ToolButton5: TToolButton;
Table1: TTable;
Edit1: TEdit;
Memo1: TMemo;
ToolButton1: TToolButton;
ToolButton2: TToolButton;
procedure fyBtnClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure ToolButton5Click(Sender: TObject);
procedure ToolButton1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
F_FY: TF_FY;
implementation
uses U_main;
{$R *.dfm}
procedure TF_FY.fyBtnClick(Sender: TObject); //翻译
begin
Table1.IndexFieldNames:='古文';
if Table1.FindKey([Edit1.Text]) then
begin
Memo1.Text:=Table1.FieldByName('白话文').AsString
end
else
Memo1.Text:=Edit1.Text;
end;
procedure TF_FY.FormCreate(Sender: TObject); //初始化翻译窗口
begin
Edit1.Height:=209;
Edit1.Width:=249;
end;
procedure TF_FY.ToolButton5Click(Sender: TObject); //关闭
begin
close;
end;
procedure TF_FY.ToolButton1Click(Sender: TObject); //清空
begin
Edit1.Text:='';
Memo1.Text:='';
end;
end.
本来想上传一下图片的,不知道为什么,老传不了,传上去的竟然的去年上传过的图片,好晕啊,不知道什么地方出错了.