📄 unit_findid.pas
字号:
unit Unit_FindID;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, SUIForm, StdCtrls, SUIEdit, SUIButton, SUIDlg,
ComCtrls, SUIStatusBar, ScktComp;
type
TFrm_FindID = class(TForm)
suiForm1: TsuiForm;
Label2: TLabel;
Edit_ID: TsuiEdit;
Label13: TLabel;
Edit_Quz1: TsuiEdit;
Label14: TLabel;
Edit_Answer1: TsuiEdit;
Label15: TLabel;
Label16: TLabel;
Edit_Quz2: TsuiEdit;
Edit_Answer2: TsuiEdit;
Bt_Find: TsuiButton;
Bt_Close: TsuiButton;
Label1: TLabel;
suiMessageDialog1: TsuiMessageDialog;
suiStatusBar1: TsuiStatusBar;
CSocket: TClientSocket;
Timer1: TTimer;
Edit_Pass: TsuiEdit;
procedure Show_Message(text:String;Icon:TsuiIconType);
procedure Bt_CloseClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure CSocketError(Sender: TObject; Socket: TCustomWinSocket;
ErrorEvent: TErrorEvent; var ErrorCode: Integer);
procedure Timer1Timer(Sender: TObject);
procedure CSocketRead(Sender: TObject; Socket: TCustomWinSocket);
function DecodeMessagePacket(data:String):integer;
procedure Edit_IDExit(Sender: TObject);
procedure Edit_IDKeyPress(Sender: TObject; var Key: Char);
procedure Bt_FindClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Frm_FindID: TFrm_FindID;
Step:String;
implementation
uses Unit_Main, Unit_Msg, Unit_MyPro;
{$R *.dfm}
procedure TFrm_FindID.Show_Message(text:String;Icon:TsuiIconType);
begin
suiMessageDialog1.Caption:='提示信息';
suiMessageDialog1.Text:=text;
suiMessageDialog1.IconType:=Icon;
suiMessageDialog1.ShowModal;
end;
procedure TFrm_FindID.Bt_CloseClick(Sender: TObject);
begin
Close;
end;
procedure TFrm_FindID.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
CSocket.Active:=False;
Edit_ID.Text:='';
Edit_Pass.Text:='';
Edit_Quz1.Text:='';
Edit_Answer1.Text:='';
Edit_Quz2.Text:='';
Edit_Answer2.Text:='';
Bt_Find.Enabled:=False;
Edit_ID.Enabled:=True;
end;
procedure TFrm_FindID.CSocketError(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
suiStatusBar1.Panels[0].Text:='连接失败,可能未开启注册服务。';
CSocket.Active:=False;
ErrorCode:=0;
end;
procedure TFrm_FindID.Timer1Timer(Sender: TObject);
var
Fq:T_SFindQuiz;
Fp:T_CFindPass;
msg:TDefaultMessage;
begin
if Step='FINDQUZ' then
begin
fq.LoginId:=Edit_ID.Text;
msg:=MakeDefaultMsg(CM_FindQuiz,0);
SendSocket(CSocket.Socket,EncodeMessage(msg)+EncodeBuffer(@fq,sizeof(T_SFindQuiz)));
Step:='';
end;
if Step='FINDPASS' then
begin
Fp.LoginId:=Edit_ID.Text;
fp.Quz1:=Edit_Quz1.Text;
fp.Answer1:=Edit_Answer1.Text;
fp.Quz2:=Edit_Quz2.Text;
fp.Answer2:=Edit_Answer2.Text;
msg:=MakeDefaultMsg(Cm_FindPass,0);
SendSocket(CSocket.Socket,EncodeMessage(msg)+EncodeBuffer(@fp,sizeof(T_CFindPass)));
Step:='';
end;
Timer1.Enabled:=False;
end;
procedure TFrm_FindID.CSocketRead(Sender: TObject;
Socket: TCustomWinSocket);
var
str,data:string;
begin
suiStatusBar1.Panels[0].Text:='连接成功。';
str:=Socket.ReceiveText;
str:=ArrestStringEx(str,'#','!',data);
DecodeMessagePacket(data);
end;
function TFrm_FindID.DecodeMessagePacket(data:String):integer;
var
head, body: String;
msg:TDefaultMessage;
fq:T_SFindQuiz;
fp:T_SFindPass;
begin
Result:=0;
head := Copy (data, 1, DEFBLOCKSIZE);
body := Copy (data, DEFBLOCKSIZE+1, Length(data)-DEFBLOCKSIZE);
msg := DecodeMessage (head);
if msg.Comm=SM_FindQuiz_Success then//查找密码提示问题成功
begin
suiStatusBar1.Panels[0].Text:='查找帐号成功。';
DecodeBuffer(body,@fq,sizeof(T_SFindQuiz));
Edit_ID.Text:=fq.LoginId;
Edit_Quz1.Text:=fq.Quz1;
Edit_Quz2.Text:=fq.Quz2;
Edit_ID.Enabled:=False;
Bt_Find.Enabled:=True;
end;
if msg.Comm=SM_FindQuiz_Fail then
begin
if msg.param=1 then
begin
show_message('查找帐号失败,帐号不能为空!',suiWarning);
Edit_ID.Enabled:=True;
Edit_ID.SetFocus;
Bt_Find.Enabled:=False;
end;
if msg.param=2 then
begin
show_message('查找帐号失败,帐号不存在!',suiWarning);
Edit_ID.Enabled:=True;
Edit_ID.SetFocus;
Bt_Find.Enabled:=False;
end;
end;
if msg.Comm=SM_FindPass_Success then
begin
show_message('查找密码结束,请妥善保管',suiInformation);
DecodeBuffer(body,@fp,Sizeof(T_SFindPass));
Edit_Pass.Text:=fp.PassWord;
end;
if msg.Comm=SM_FindPass_Fail then
begin
if msg.param=1 then
begin
show_message('查找密码失败,你输入的内容中有空值!',suiWarning);
Edit_ID.Enabled:=True;
Edit_ID.SetFocus;
Bt_Find.Enabled:=False;
end;
if msg.param=1 then
begin
show_message('查找密码失败,你输入的内容中有非法字符!',suiWarning);
Edit_ID.Enabled:=True;
Edit_ID.SetFocus;
Bt_Find.Enabled:=False;
end;
DecodeBuffer(body,@fp,Sizeof(T_SFindPass));
Edit_Pass.Text:=fp.PassWord;
end;
CSocket.Close;
suiStatusBar1.Panels[0].Text:='断开连接。';
end;
procedure TFrm_FindID.Edit_IDExit(Sender: TObject);
begin
if (ActiveControl=Bt_Close) then exit;
suiStatusBar1.Panels[0].Text:='正在从服务器查询帐号。';
CSocket.Active:=False;
CSocket.Address:=Reg_SvrIp;
CSocket.Port:=Reg_SvrPort;
Try
CSocket.Active:=True;
except end;
Step:='FINDQUZ';
Timer1.Enabled:=True;
end;
procedure TFrm_FindID.Edit_IDKeyPress(Sender: TObject; var Key: Char);
begin
if Key=#13 then Edit_Answer1.SetFocus;
end;
procedure TFrm_FindID.Bt_FindClick(Sender: TObject);
begin
suiStatusBar1.Panels[0].Text:='正在向服务器发送查找密码请求!';
CSocket.Active:=False;
CSocket.Address:=Reg_SvrIp;
CSocket.Port:=Reg_SvrPort;
Try
CSocket.Active:=True;
except end;
Step:='FINDPASS';
Timer1.Enabled:=True;
end;
procedure TFrm_FindID.FormCreate(Sender: TObject);
begin
SetForm_Style(suiForm1,ExeType);
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -