unit ScUserInfoFrm; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, ZJGrid, HookEdit, ZJEdits, ZJCells; type TUserInfoForm = class(TForm) zgUserInfo: TZJGrid; Panel1: TPanel; btnOK: TButton; btnCancel: TButton; Panel2: TPanel; Panel3: TPanel; Memo1: TMemo; Label1: TLabel; Label2: TLabel; Panel4: TPanel; Label3: TLabel; edtUserName: TEdit; edtPWD: TEdit; edtPWD2: TEdit; Label4: TLabel; Label5: TLabel; Label6: TLabel; btnCheckUserName: TButton; lblBBS: TLabel; Label7: TLabel; procedure btnOKClick(Sender: TObject); procedure btnCheckUserNameClick(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure FormCreate(Sender: TObject); procedure edtPWDEnter(Sender: TObject); procedure lblBBSClick(Sender: TObject); procedure zgUserInfoMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure zgUserInfoKeyPress(Sender: TObject; var Key: Char); private { Private declarations } FNew: Boolean; FDataList: TStringList; public { Public declarations } procedure Init(var AName, APwd: string; ADataList: TStringList; ANew: Boolean); procedure SaveList; // 检查输入数据是否合法 function CheckData: Boolean; end; function ShowUserInfoForm(var AName, APwd: string; ADataList: TStringList; ANew: Boolean): Boolean; implementation uses ScClientDM, ScUtils, ShellAPI, ScProvinceFrm, IniFiles; {$R *.dfm} function ShowUserInfoForm(var AName, APwd: string; ADataList: TStringList; ANew: Boolean): Boolean; var Form: TUserInfoForm; bFirstLogon: Boolean; begin Result := False; Form := TUserInfoForm.Create(nil); try Form.Init(AName, APWD, ADataList, ANew); if Form.ShowModal = mrOK then begin AName := Trim(Form.edtUserName.Text); APwd := GetEncryptEditText(Form.edtPWD); Form.SaveList; Result := True; UserConfigInfo.FirstLogon := False; // 这句十分重要 UserConfigInfo.UserName := AName; UserConfigInfo.PassWord := APwd; UserConfigInfo.SaveToFile; // 先全部属性保存 UserConfigInfo.RememberUserInfo(UserConfigInfo.RememberUser); end; finally Form.Free; end; end; {var Form: TUserInfoForm; begin Result := False; Form := TUserInfoForm.Create(nil); try Form.Init(AName, APWD, ADataList, ANew); if Form.ShowModal = mrOK then begin AName := Trim(Form.edtUserName.Text); APwd := GetEncryptEditText(Form.edtPWD); Form.SaveList; Result := True; end; finally Form.Free; end; end; } { TUserInfoForm } function TUserInfoForm.CheckData: Boolean; var I: Integer; slstSub: TStringList; PWD1, PWD2, ReturnCopy: string; endWord: Char; begin if Trim(edtUserName.Text) = '' then begin MessageHint(0, '请输入用户名。'); Result := False; edtUserName.SetFocus; Exit; end; if FNew and ClientData.UserExists(Trim(edtUserName.Text)) then begin MessageHint(0, '用户名已存在,请重新输入。'); Result := False; edtUserName.SetFocus; Exit; end; PWD1 := GetEncryptEditText(edtPWD); if Trim(PWD1) = '' then begin MessageHint(0, '请输入密码。'); Result := False; edtPWD.SetFocus; Exit; end; PWD1 := Trim(PWD1); if Pos(' ', PWD1) > 0 then begin MessageHint(0, '请不要在密码中输入空格。'); Result := False; edtPWD.SetFocus; Exit; end; if (Length(PWD1) < 6) or (Length(PWD1) > 12) then begin MessageHint(0, '您输入的密码长度不合规范,请重新输入!。'); Result := False; edtPWD.SetFocus; Exit; end; for I := 1 to Length(PWD1) do begin ReturnCopy := Copy(PWD1, I, 1); endWord := ReturnCopy[1]; if Ord(endWord) >= 128 then begin MessageHint(0, '请不要在密码中输入汉字。'); Result := False; edtPWD.SetFocus; Exit; end; end; PWD1 := GetEncryptEditText(edtPWD); PWD2 := GetEncryptEditText(edtPWD2); if Trim(PWD2) = '' then begin MessageHint(0, '请输入确认密码。'); Result := False; edtPWD2.SetFocus; Exit; end; PWD2 := Trim(PWD2); if Pos(' ', PWD2) > 0then begin MessageHint(0, '请不要在确认密码中输入空格。'); Result := False; edtPWD2.SetFocus; Exit; end; if (Length(PWD2) < 6) or (Length(PWD2) > 12) then begin MessageHint(0, '您输入的密码长度不合规范,请重新输入!。'); Result := False; edtPWD2.SetFocus; Exit; end; for I := 1 to Length(PWD2) do begin ReturnCopy := Copy(PWD2, I, 1); endWord := ReturnCopy[1]; if Ord(endWord) >= 128 then begin MessageHint(0, '请不要在确认密码中输入汉字。'); Result := False; edtPWD2.SetFocus; Exit; end; end; if FNew and (CompareStr(GetEncryptEditText(edtPWD), GetEncryptEditText(edtPWD2)) <> 0) then begin MessageHint(0, '两次输入密码不一致,请重新输入,注意区分大小写。'); Result := False; edtPWD.SetFocus; Exit; end; slstSub := TStringList.Create; try slstSub.Delimiter := '|'; for I := 0 to FDataList.Count - 1 do begin slstSub.DelimitedText := FDataList[I]; if StrToInt(slstSub[3]) = 1 then if zgUserInfo.Cells[1, I + zgUserInfo.FixedRowCount].Text = '' then begin MessageHint(0, Format('请填写[%s]。', [slstSub[0]])); Result := False; zgUserInfo.Selection.SelectRow(I + zgUserInfo.FixedRowCount, I + zgUserInfo.FixedRowCount); Exit; end; end; finally slstSub.Free; end; Result := True; end; procedure TUserInfoForm.Init(var AName, APwd: string; ADataList: TStringList; ANew: Boolean); var I: Integer; slstSub: TStringList; begin FNew := ANew; edtUserName.Enabled := FNew; btnCheckUserName.Enabled := FNew; edtPWD.Enabled := FNew; edtPWD2.Enabled := FNew; edtUserName.Text := AName; edtPWD.Text := APwd; edtPWD2.Text := APwd; zgUserInfo.RowCount := ADataList.Count + 1; zgUserInfo.Cells[0, 0].Text := '项目'; zgUserInfo.Cells[1, 0].Text := '内容'; zgUserInfo.TextAligns.Cols[1] := gaCenterLeft; zgUserInfo.Cells[1, 0].TextAlign := gaCenterCenter; FDataList := ADataList; slstSub := TStringList.Create; try slstSub.Delimiter := '|'; for I := 0 to FDataList.Count - 1 do begin slstSub.Clear; slstSub.DelimitedText := FDataList[I]; zgUserInfo.Cells[0, I + zgUserInfo.FixedRowCount].Text := slstSub[0]; zgUserInfo.Cells[1, I + zgUserInfo.FixedRowCount].Text := slstSub[1]; end; finally slstSub.Free; end; end; procedure TUserInfoForm.btnOKClick(Sender: TObject); begin if CheckData then begin ModalResult := mrOK; end; end; procedure TUserInfoForm.btnCheckUserNameClick(Sender: TObject); begin if ClientData.UserExists(Trim(edtUserName.Text)) then begin MessageHint(0, '用户名已存在,请重新输入。'); edtUserName.SetFocus; end else MessageHint(0, '用户名可以使用。'); end; procedure TUserInfoForm.FormDestroy(Sender: TObject); begin RemoveEncryptEdit(edtPWD); RemoveEncryptEdit(edtPWD2); end; procedure TUserInfoForm.SaveList; var I: Integer; slstSub: TStringList; begin slstSub := TStringList.Create; try slstSub.Delimiter := '|'; for I := 0 to FDataList.Count - 1 do begin slstSub.Clear; slstSub.DelimitedText := FDataList[I]; slstSub[1] := zgUserInfo.Cells[1, I + zgUserInfo.FixedRowCount].Text; FDataList[I] := slstSub.DelimitedText; end; finally slstSub.Free; end; end; procedure TUserInfoForm.FormCreate(Sender: TObject); begin { 欢迎使用SmartCost 2007网络版! 首先请填写您的注册信息。 再联系纵横,即可获取授权码:加此QQ 549244533 (请注明网络版授权)或致电 0756-2285686。 } Memo1.Lines.Clear; Memo1.Lines.Add('欢迎注册纵横免费网络版!请如实填写您的注册信息。'); Memo1.Lines.Add(''); Memo1.Lines.Add(Format('纵横客服中心: %s ', [LoadServicePhone])); SetEncryptEdit(edtPWD); SetEncryptEdit(edtPWD2); end; procedure TUserInfoForm.edtPWDEnter(Sender: TObject); begin SetEncryptEdit(TEdit(Sender)); end; procedure TUserInfoForm.lblBBSClick(Sender: TObject); begin ShellExecute(0, nil, 'http://www.smartcost.com.cn/bbs', nil, nil, SW_SHOWNORMAL); end; procedure TUserInfoForm.zgUserInfoKeyPress(Sender: TObject; var Key: Char); var sPName: string; begin if (zgUserInfo.CurRow = 4) and (zgUserInfo.CurCol = 1) then begin Key := #0; sPName := ''; if ExecScProvinceForm(sPName) then zgUserInfo.Cells[1, 4].Text := sPName; end; end; procedure TUserInfoForm.zgUserInfoMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var sPName: string; begin // 省份 if (Button = mbLeft) then begin if (zgUserInfo.CurRow = 4) and (zgUserInfo.CurCol = 1) then begin sPName := ''; if ExecScProvinceForm(sPName) then zgUserInfo.Cells[1, 4].Text := sPName; end; end; end; end.