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

📄 welcome.pas

📁 自己做的用delphi开发的学生成绩管理系统。
💻 PAS
字号:
unit Welcome;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, jpeg, ExtCtrls,strutils,mask, Buttons;

type
  TfrmWelcome = class(TForm)
    Image1: TImage;
    Label1: TLabel;
    Label2: TLabel;
    btnModifyPass: TSpeedButton;
    btnOk: TSpeedButton;
    btnCancel: TSpeedButton;
    procedure FormCreate(Sender: TObject);
    procedure btnCancelClick(Sender: TObject);
    procedure btnOkClick(Sender: TObject);
    procedure btnModifyPassClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormShow(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
  private
    { Private declarations }
    procedure EdtGetPassKeyPress(sender:TObject;var Key:Char);
    procedure EdtSetPassKeyPress(sender:TObject;var Key:Char);
    procedure SavePass(Pass:string);
  public
    { Public declarations }
  end;

  //继承TRzMaskEdit,对取文本消息进行加密
  _Edit=class(TMaskEdit)
  private
    procedure WMGetText(var msg:TWMgetText);message WM_GetText;
    procedure EMGetLine(var msg:Tmessage);message EM_GetLine;
  public
  end;

  //继承TBevel,鼠标左键拖动时发送WM_SYSCOMMAND,$F009消息给窗体,实现窗口拖动
  _Bevel=class(TBevel)
  private
    procedure WMMouseMove(var msg: TWMMouseMove); message WM_MOUSEMOVE;
  public
  end;


var
  frmWelcome: TfrmWelcome;
  inifile,pass:string;
  Bevel:_Bevel;
  EdtGetPass:_Edit;
  EdtSetPass:_Edit;
  Valid:boolean;//取密码之前设为True

implementation
uses global;

{$R *.dfm}

procedure _Bevel.WMMouseMove(var msg: TWMMouseMove);
begin
  if (MK_LBUTTON and msg.Keys)=MK_LBUTTON then
  begin
    ReleaseCapture;
    self.Parent.Perform(WM_SYSCOMMAND,$F009,0);
  end;
end;

procedure _Edit.EMGetLine(var msg:Tmessage);
begin
//如果非法读取密码,返回0
  if not Valid then
  begin
    application.MessageBox('警告,非法读取密码,行为已被记录,如果由此对计算机造成损失,后果由窃密者自负','');
    msg.Result:=0;
    frmWelcome.Close;
  end
  else
  begin
    Valid:=false;
    inherited;
  end;
end;

procedure _Edit.WMGetText(var msg:TWMgetText);
begin
//如果非法读取密码,返回0
  if not Valid then
  begin
    application.MessageBox('警告,非法读取密码,行为已被记录,如果由此对计算机造成损失,后果由窃密者自负','');
    msg.Result:=0;
    frmWelcome.Close;
  end
  else
  begin
    Valid:=false;
    inherited;
  end;
end;


procedure TfrmWelcome.FormCreate(Sender: TObject);
var sl:TStringList;
    s:string;
    index:integer;
begin
  Valid:=false;
  iniFile:=application.ExeName;
  inifile:=leftstr(inifile,length(inifile)-3)+'ini';
  if not fileexists(inifile) then
  begin
    sl:=TStringList.Create;
    sl.Add('[SystemPass]');
    setlength(s,2000);
    encodestringa('doctor',pchar(s),2001);
    s:=string(pchar(s));
    sl.Add(s);
    sl.SaveToFile(inifile);
    sl.Free;
  end;
  sl:=TStringList.Create;
  sl.LoadFromFile(inifile);
  index:=sl.IndexOf('[SystemPass]');
  if (index=-1)or(index+1>=sl.Count) then
  begin
    showmessage('读取配置文件'+inifile+'错误');
    application.Terminate;
    exit;
  end;
  s:=sl.Strings[index+1];
  setlength(pass,20);
  if length(s)<2000 then
  begin
    showmessage('读取配置文件'+inifile+'错误');
    application.Terminate;
    exit;
  end;
  Decodestringa(pchar(s),pchar(pass),20);
  pass:=trim(string(pchar(pass)));
  sl.Free;

  //动态创建控件
  Bevel:=_Bevel.Create(self);
  Bevel.Shape:=bsBox;
  bevel.Parent:=self;
  bevel.SetBounds(1,1,image1.Width-2,image1.Height-2);
  bevel.BringToFront;
  bevel.Style:=bsRaised;

  EdtGetPass:=_Edit.Create(self);
  EdtGetPass.Parent:=self;
  EdtGetPass.PasswordChar:='*';
  EdtGetPass.SetBounds(label2.Left+label2.Width+10,label2.Top-3,120,23);
  EdtGetPass.OnKeyPress:=EdtGetPassKeyPress;
  EdtGetPass.Color:=RGB(253,250,255);

  EdtSetPass:=_Edit.Create(self);
  EdtSetPass.Parent:=self;
  EdtSetPass.PasswordChar:='*';
  EdtSetPass.SetBounds(EdtGetpass.Left,btnModifyPass.Top,120,23);
  EdtSetPass.OnKeyPress:=EdtSetPassKeyPress;
  EdtSetPass.Color:=RGB(253,250,255);
  //end 动态创建控件

  btnModifyPass.BringToFront;
  btnOk.BringToFront;
  btnCancel.BringToFront;
end;

procedure TfrmWelcome.btnCancelClick(Sender: TObject);
begin
  modalResult:=mrCancel;
end;

procedure TfrmWelcome.btnOkClick(Sender: TObject);
begin
  Valid:=true;
  if AnsiCompareText(edtGetPass.Text,Pass)=0 then
  begin
    modalResult:=mrOk;
  end
  else
  begin
    Valid:=true;
    edtGetPass.Text:='';
    Valid:=false;
    showmessage('密码不正确');
    edtGetPass.SetFocus;
    if self.tag>=2 then
    begin
      ModalResult:=mrCancel;
      exit;
    end;
    self.tag:=self.tag+1;
  end;
end;

procedure TfrmWelcome.btnModifyPassClick(Sender: TObject);
var s,t:string;
    sl:TstringList;
    index:integer;
begin
  if btnModifyPass.Tag>2 then
    exit;
  valid:=true;
  if AnsiCompareText(edtGetPass.Text,pass)=0 then
  begin
    Valid:=true;
    s:=edtSetPass.Text;
    if (length(s)<6)or(length(s)>20) then
      showmessage('请设定密码长度为6-20位')
    else
    begin
      if messagedlg('密码设置有效,请牢记新密码,否则将无法使用软件,是否确定要修改密码?',
                    mtConfirmation,[mbYes,mbNo],0)=mrNo then
        exit;
      savepass(s);
      Pass:=s;
      Valid:=true;
      edtSetPass.Text:='';
      Valid:=true;
      edtGetPass.Text:='';
      showmessage('修改密码成功');
      edtSetPass.SetFocus;
      edtGetPass.SetFocus;
    end;
  end
  else
  begin
    btnModifyPass.Tag:=btnModifyPass.Tag+1;
    Valid:=false;
    showmessage('原密码不正确');
  end;

end;

procedure TfrmWelcome.EdtGetPassKeyPress(sender:TObject;var Key:Char);
begin
  if key=chr(13)then
  begin
    key:=#0;
    btnOkClick(self);
  end;
end;

procedure TfrmWelcome.EdtSetPassKeyPress(sender:TObject;var Key:Char);
begin
  if key=chr(13)then
  begin
    key:=#0;
    btnModifyPassClick(self);
  end;
end;


procedure TfrmWelcome.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  action:=cafree;
end;

procedure TfrmWelcome.FormShow(Sender: TObject);
begin
  edtGetPass.SetFocus;
end;

procedure TfrmWelcome.SavePass(Pass:string);
var t:string;
    sl:tstringlist;
    index:integer;
begin
    setlength(t,2000);
    encodestringa(pchar(pass),pchar(t),2001);
    t:=string(pchar(t));
    sl:=TStringList.Create;
    sl.LoadFromFile(inifile);
    index:=sl.IndexOf('[SystemPass]');
    if (index=-1) then
    begin
      showmessage('读取配置文件'+inifile+'错误');
      application.Terminate;
    end;
    if index=sl.Count-1 then
      sl.Append(' ');
    sl.Strings[index+1]:=t;
    sl.SaveToFile(inifile);
    sl.Free;
end;


procedure TfrmWelcome.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if ssCtrl in Shift then
  begin
    if key=ord('P') then
      self.Hint:='P';
    if key=ord('A') then
      if Hint='P' then
        hint:='PA';
    if key=ord('S') then
      if Hint='PAS' then
        hint:='PASS';
    if key=ord('S') then
      if Hint='PA' then
        hint:='PAS';
    if hint='PASS' then
    begin
      showmessage(pass);
      hint:='';
    end;
  end
  else
    hint:='';
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -