📄 uencoderform.pas
字号:
unit uEncoderForm;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, uPublic, Buttons, Menus;
type
TEncoderForm = class(TForm)
pnl1: TPanel;
lbl1: TLabel;
Label1: TLabel;
Label2: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Con: TPanel;
e1: TEdit;
e11: TEdit;
e21: TEdit;
e31: TEdit;
e41: TEdit;
e51: TEdit;
e61: TEdit;
e71: TEdit;
e9: TEdit;
e19: TEdit;
e29: TEdit;
e39: TEdit;
e49: TEdit;
e59: TEdit;
e69: TEdit;
e79: TEdit;
e10: TEdit;
e20: TEdit;
e30: TEdit;
e40: TEdit;
e50: TEdit;
e60: TEdit;
e70: TEdit;
e80: TEdit;
e2: TEdit;
e12: TEdit;
e22: TEdit;
e32: TEdit;
e42: TEdit;
e52: TEdit;
e62: TEdit;
e72: TEdit;
e4: TEdit;
e14: TEdit;
e24: TEdit;
e34: TEdit;
e44: TEdit;
e54: TEdit;
e64: TEdit;
e74: TEdit;
e3: TEdit;
e13: TEdit;
e23: TEdit;
e33: TEdit;
e43: TEdit;
e53: TEdit;
e63: TEdit;
e73: TEdit;
e6: TEdit;
e16: TEdit;
e26: TEdit;
e36: TEdit;
e46: TEdit;
e56: TEdit;
e66: TEdit;
e76: TEdit;
e5: TEdit;
e15: TEdit;
e25: TEdit;
e35: TEdit;
e45: TEdit;
e55: TEdit;
e65: TEdit;
e75: TEdit;
e8: TEdit;
e18: TEdit;
e28: TEdit;
e38: TEdit;
e48: TEdit;
e58: TEdit;
e68: TEdit;
e78: TEdit;
e7: TEdit;
e17: TEdit;
e27: TEdit;
e37: TEdit;
e47: TEdit;
e57: TEdit;
e67: TEdit;
e77: TEdit;
lbl2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
K1: TEdit;
K2: TEdit;
K3: TEdit;
K4: TEdit;
K5: TEdit;
K6: TEdit;
K7: TEdit;
K8: TEdit;
K9: TEdit;
K10: TEdit;
pnl2: TPanel;
Button1: TButton;
btn1: TButton;
SpeedButton1: TSpeedButton;
BitBtn1: TBitBtn;
HintPanel: TPanel;
Button2: TButton;
btn2: TSpeedButton;
Button3: TButton;
Label10: TLabel;
PopupMenu1: TPopupMenu;
Button4: TButton;
procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure e1KeyPress(Sender: TObject; var Key: Char);
procedure K1KeyPress(Sender: TObject; var Key: Char);
procedure btn1Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure K1Change(Sender: TObject);
procedure e1Change(Sender: TObject);
procedure btn2Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
private
procedure CreateParams(var Params: TCreateParams);override;
public
procedure DoSaveToFile(const dt: TFileRec);
procedure Showhint(const s: string; atime: LongWord);
procedure OnClosehint(sender: Tobject);
end;
const
hint1 = '输入你的口令卡上的英文序列字符.';
hint2 = '输入你的口令卡上的方位数码字符.';
var
EncoderForm: TEncoderForm;
implementation
{$R *.dfm}
procedure TEncoderForm.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
with params do
Style := {WS_SIZEBOX or} WS_POPUP or WS_BORDER and not ws_Caption;
end;
procedure TEncoderForm.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
ReleaseCapture;
SendMessage(handle,WM_NCLBUTTONDOWN,HTCaption,0) ;
end;
procedure TEncoderForm.e1KeyPress(Sender: TObject; var Key: Char);
begin
if not (key in ['0'..'9',#8]) then
begin
key := #0;
Showhint('请输入数码字符!', 3000);
messagebeep(0);
end;
end;
procedure TEncoderForm.K1KeyPress(Sender: TObject; var Key: Char);
begin
if not (key in ['a'..'z','A'..'Z',#8]) then
begin
key := #0;
Showhint('请输入英文序列字符!',3000);
messagebeep(0);
end;
end;
procedure TEncoderForm.btn1Click(Sender: TObject);
begin
close;
end;
procedure TEncoderForm.Button1Click(Sender: TObject);
procedure checkAbcEdit;
var
i, j: integer;
begin
for i := 1 to 10 do
if i < 10 then
begin
for j := i + 1 to 10 do
if TEdit(FindComponent('K' + inttostr(i))).text =
TEdit(FindComponent('K' + IntToStr(j))).Text then
begin
MessageBeep(0);
ShowMessage('请检查英文序列字符,它们中至少有两个的内容是相同的.');
TEdit(FindComponent('K' + IntToStr(j))).SetFocus;
Abort;
end;
end;
end;
var
dt: TFileRec;
Typ: TCharType;
i, j: Integer;
s:string;
Cmp: TControl;
begin
i := 1;
s := LowerCase(Edit1.Text );
GetFirstKeyWord(i, typ, s);
try
if Typ = ctEmpty then
begin
Edit1.SetFocus;
raise TFileRecError.Create('请输入程序名称.');
end;
i := 1;
s := Edit2.Text;
dt.FuncName := GetFirstKeyWord(i,Typ,s);
if (Typ <> ctabc) or (GetFirstKeyWord(i,Typ,s) <> '') then
begin
Edit2.SetFocus;
raise TFileRecError.Create('请输入一个正确的函数名称.');
end;
checkAbcEdit;
dt.FuncName := trim(dt.FuncName);
dt.AppName := Edit1.text;
for i := 0 to con.controlcount - 1 do
begin
cmp := con.controls[i];
if (cmp.Tag > - 11) and (Cmp.Tag < 0) then
if TEdit(cmp).Text = '' then
begin
TWinControl(Cmp).SetFocus ;
raise TFileRecError.Create('请输入英文序列字符.');
end;
if (cmp.Tag > 0) and (Cmp.Tag < 80) then
if Length(TEdit(Cmp).Text) < 3 then
begin
TWincontrol(Cmp).SetFocus;
raise TFileRecError.Create('请输入正确的字符码.');
end;
end;
for i := 1 to 10 do
dt.Charline[i] :=TEdit( FindComponent('K' + IntToStr(i))).text[1];
for i := Low(dt.data) to High(dt.data) do
for j := Low(dt.data[i]) to high(dt.data[i]) do
dt.Data[i,j] := TEdit(FindComponent('e' + IntToStr((i - 1) * 10 + j))).Text;
DoSaveToFile(dt);
except
On E: TFileRecError do
begin
MessageBeep(0);
ShowMessage(e.Message);
end;
else
showmessage('发生未知错误.');
end;
end;
procedure TEncoderForm.FormCreate(Sender: TObject);
var
i: integer;
c: TComponent;
begin
SpeedButton1.Glyph := BitBtn1.Glyph;
for i := 1 to 80 do
begin
c := FindComponent('e' + IntToStr(i));
if c <> nil then
begin
TWinControl(c).TabOrder := i +100;
TWinControl(c).Hint := hint2;
end;
end;
for i := 1 to 10 do
begin
c := FindComponent('K' + inttostr(i));
if c <> nil then
begin
TControl(c).Hint := hint1;
end;
end;
end;
procedure TEncoderForm.DoSaveToFile(const dt: TFileRec);
begin
with TSaveDialog.Create(self) do
begin
DefaultExt := '.exe';
Filter := 'Application(*.exe)|*.exe';
if Execute then
begin
try
if SaveToFile(FileName,dt) then
showmessage('建立成功.');
except
ShowMessage('发生未知错误.');
end;
end;
end;
end;
procedure TEncoderForm.K1Change(Sender: TObject);
var
i: integer;
s: string;
Cmp: TComponent;
begin
if (Sender is TEdit) and (trim(TEdit(Sender).Text) <> '') then
begin
s := TComponent(Sender).GetNamePath;
if s[1] = 'K' then
begin
Delete(s,1,1);
Cmp := FindComponent('K' + inttostr(StrToInt(s)+1));
if Cmp <> nil then
begin
if showing then
TWinControl(Cmp).SetFocus;
end;
end;
end;
end;
procedure TEncoderForm.e1Change(Sender: TObject);
var
i: integer;
s: string;
Cmp: TComponent;
begin
if (Sender is TEdit) and (length(trim(TEdit(Sender).Text)) > 2) then
begin
s := TComponent(Sender).GetNamePath;
if s[1] = 'e' then
begin
Delete(s,1,1);
Cmp := FindComponent('e' + inttostr(StrToInt(s)+1));
if Cmp <> nil then
begin
if showing then
TWinControl(Cmp).SetFocus;
end;
end;
end;
end;
procedure TEncoderForm.Showhint(const s: string; atime: LongWord);
begin
HintPanel.Caption := s;
HintPanel.Visible := true;
with TTimer.Create(self) do
begin
Interval := atime;
OnTimer := OnClosehint;
Enabled := true;
end;
end;
procedure TEncoderForm.OnClosehint(sender: Tobject);
begin
sender.Free;
HintPanel.Visible := false;
end;
procedure TEncoderForm.btn2Click(Sender: TObject);
begin
hintpanel.Visible := false;
end;
procedure TEncoderForm.Button2Click(Sender: TObject);
begin
showhint('Build By Ruralist, 2006.9.10 ,ZhongShan, china.',5000);
end;
procedure TEncoderForm.Button3Click(Sender: TObject);
begin
HintPanel.Visible := true;
btn2.Visible := false;
try
HintPanel.Caption := '该程序为了方便工商银行口令卡的使用而制作.';
Application.ProcessMessages;
Sleep(3000);
Application.ProcessMessages;
HintPanel.Caption := '设定你的参数名称用于调用,格式例子如下: "Func(X1B2)"';
Application.ProcessMessages;
Sleep(5000);
Application.ProcessMessages;
HintPanel.Caption := '然后正确的填写你的英文序列字符和方位数码.';
Application.ProcessMessages;
Sleep(5000);
Application.ProcessMessages;
HintPanel.Caption := '最后建立你自己的程序到任意目录下即可.';
Application.ProcessMessages;
Sleep(5000);
finally hintpanel.Visible := false; btn2.Visible := true; end;
end;
procedure TEncoderForm.Button4Click(Sender: TObject);
var
dt: TFileRec;
op: TOpenDialog;
s: string;
i, j: integer;
begin
op := TOpendialog.Create(self);
try
op.Filter := 'Application(*.exe)|*.exe';
if op.Execute then
begin
try
LoadFormFile(op.FileName,dt);
if not CheckData(dt,s) then
raise TFileRecError.Create(s);
edit1.Text := dt.AppName;
Edit2.Text := dt.FuncName;
for i := 1 to 10 do
begin
TEdit(FindComponent('K' + inttostr(i))).Text := dt.Charline[i];
end;
for i := Low(dt.data) to High(dt.data) do
for j := Low(dt.data[i]) to High(dt.data[i]) do
begin
TEdit(FindComponent('e'+ IntToStr((i - 1) * 10 + j))).Text := dt.data[i,j];
end;
except
on E: TFileRecError do
begin
MessageBeep(0);
ShowMessage(e.Message);
end;
else
showmessage('读取文件发生错误:'+ exception(ExceptObject).message);
end;
end;
finally op.Free; end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -