📄 welcome.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 + -