前陣子幫朋友弄了個古漢文詞字翻譯系統,首先聲明一下,本來是要弄古漢文翻譯系統的(能翻譯句子)但經仔細考慮後,感覺也只能做出個詞字翻譯系統出來.想想自己畢竟沒學習過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.
本來想上傳一下圖片的,不知道爲什麼,老傳不了,傳上去的竟然的去年上傳過的圖片,好暈啊,不知道什麼地方出錯了.