⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uencoderform.pas

📁 工商银行限制了牡丹卡的网上交易功能.催着我们去各分行办领一张网上交易的通行证:口令卡 口令卡确实是一个好东东,但使用有点不方便.为此,我写了这个程序--你能将自己的口令保存为一个程序, 在
💻 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 + -