Browse Source

云版登录窗口增加账号保存功能.

CSL 9 years ago
parent
commit
8575e646e7
2 changed files with 164 additions and 75 deletions
  1. 36 22
      Forms/LoginFrm.dfm
  2. 128 53
      Forms/LoginFrm.pas

+ 36 - 22
Forms/LoginFrm.dfm

@@ -1,6 +1,7 @@
 object LoginFrm: TLoginFrm
 object LoginFrm: TLoginFrm
   Left = 241
   Left = 241
   Top = 165
   Top = 165
+  ActiveControl = cbUser
   AutoSize = True
   AutoSize = True
   BorderIcons = [biSystemMenu]
   BorderIcons = [biSystemMenu]
   BorderStyle = bsNone
   BorderStyle = bsNone
@@ -16,6 +17,7 @@ object LoginFrm: TLoginFrm
   OldCreateOrder = False
   OldCreateOrder = False
   Position = poScreenCenter
   Position = poScreenCenter
   OnCreate = FormCreate
   OnCreate = FormCreate
+  OnDestroy = FormDestroy
   PixelsPerInch = 96
   PixelsPerInch = 96
   TextHeight = 12
   TextHeight = 12
   object imgBG: TImage
   object imgBG: TImage
@@ -31310,25 +31312,6 @@ object LoginFrm: TLoginFrm
     ShowHint = True
     ShowHint = True
     OnMouseDown = shpPWMouseDown
     OnMouseDown = shpPWMouseDown
   end
   end
-  object edtUser: TEdit
-    Left = 705
-    Top = 87
-    Width = 248
-    Height = 24
-    BorderStyle = bsNone
-    Ctl3D = True
-    Font.Charset = DEFAULT_CHARSET
-    Font.Color = 6710886
-    Font.Height = -16
-    Font.Name = #24494#36719#38597#40657
-    Font.Style = []
-    ImeName = #20013#25991' ('#31616#20307') - '#25628#29399#25340#38899#36755#20837#27861
-    ParentCtl3D = False
-    ParentFont = False
-    TabOrder = 0
-    OnClick = edtUserClick
-    OnKeyDown = edtUserKeyDown
-  end
   object edtPW: TEdit
   object edtPW: TEdit
     Left = 705
     Left = 705
     Top = 137
     Top = 137
@@ -31345,7 +31328,7 @@ object LoginFrm: TLoginFrm
     ParentCtl3D = False
     ParentCtl3D = False
     ParentFont = False
     ParentFont = False
     PasswordChar = '*'
     PasswordChar = '*'
-    TabOrder = 1
+    TabOrder = 0
     OnKeyDown = edtPWKeyDown
     OnKeyDown = edtPWKeyDown
   end
   end
   object btnLogin: TCslButton
   object btnLogin: TCslButton
@@ -35747,7 +35730,7 @@ object LoginFrm: TLoginFrm
     Top = 0
     Top = 0
     Width = 614
     Width = 614
     Height = 334
     Height = 334
-    TabOrder = 4
+    TabOrder = 3
     ControlData = {
     ControlData = {
       4C000000753F0000852200000000000000000000000000000000000000000000
       4C000000753F0000852200000000000000000000000000000000000000000000
       000000004C000000000000000000000001000000E0D057007335CF11AE690800
       000000004C000000000000000000000001000000E0D057007335CF11AE690800
@@ -35762,7 +35745,7 @@ object LoginFrm: TLoginFrm
     Height = 158
     Height = 158
     BevelOuter = bvNone
     BevelOuter = bvNone
     Color = clWhite
     Color = clWhite
-    TabOrder = 5
+    TabOrder = 4
     object lblLocalHelp: TCslLabel
     object lblLocalHelp: TCslLabel
       Left = 104
       Left = 104
       Top = 104
       Top = 104
@@ -40142,4 +40125,35 @@ object LoginFrm: TLoginFrm
       OnClick = btnLoginClick
       OnClick = btnLoginClick
     end
     end
   end
   end
+  object cbUser: TcxComboBox
+    Left = 705
+    Top = 85
+    Width = 254
+    Height = 29
+    ParentFont = False
+    PopupMenu = pmLogin
+    Properties.Alignment.Vert = taVCenter
+    Style.BorderStyle = ebsNone
+    Style.Font.Charset = DEFAULT_CHARSET
+    Style.Font.Color = clWindowText
+    Style.Font.Height = -16
+    Style.Font.Name = #24494#36719#38597#40657
+    Style.Font.Style = []
+    Style.Shadow = False
+    Style.ButtonStyle = btsHotFlat
+    StyleFocused.BorderStyle = ebsNone
+    StyleHot.BorderStyle = ebsNone
+    TabOrder = 5
+    OnClick = cbUserClick
+    OnKeyDown = cbUserKeyDown
+  end
+  object pmLogin: TPopupMenu
+    AutoHotkeys = maManual
+    Left = 848
+    Top = 40
+    object nClearAccount: TMenuItem
+      Caption = #28165#31354#24080#25143#20449#24687
+      OnClick = nClearAccountClick
+    end
+  end
 end
 end

+ 128 - 53
Forms/LoginFrm.pas

@@ -17,12 +17,11 @@ uses
   cxTextEdit, cxButtons, cxControls, cxEdit,
   cxTextEdit, cxButtons, cxControls, cxEdit,
   cxMaskEdit, cxDropDownEdit, HookEdit, cxContainer, XPMenu, cslLabel,
   cxMaskEdit, cxDropDownEdit, HookEdit, cxContainer, XPMenu, cslLabel,
   IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP,
   IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP,
-  CslButton, OleCtrls, SHDocVw;
+  CslButton, OleCtrls, SHDocVw, DB, ADODB, Menus;
   
   
 
 
 type
 type
   TLoginFrm = class(TForm)
   TLoginFrm = class(TForm)
-    edtUser: TEdit;
     edtPW: TEdit;
     edtPW: TEdit;
     lblForgetPW: TcslLabel;
     lblForgetPW: TcslLabel;
     lblVer: TLabel;
     lblVer: TLabel;
@@ -38,21 +37,30 @@ type
     btnLocalLogin: TCslButton;
     btnLocalLogin: TCslButton;
     lblLocalHelp: TCslLabel;
     lblLocalHelp: TCslLabel;
     lblLocalServer: TCslLabel;
     lblLocalServer: TCslLabel;
+    cbUser: TcxComboBox;
+    pmLogin: TPopupMenu;
+    nClearAccount: TMenuItem;
     procedure edtPWKeyDown(Sender: TObject; var Key: Word;
     procedure edtPWKeyDown(Sender: TObject; var Key: Word;
       Shift: TShiftState);
       Shift: TShiftState);
     procedure FormCreate(Sender: TObject);
     procedure FormCreate(Sender: TObject);
     procedure btnLoginClick(Sender: TObject);
     procedure btnLoginClick(Sender: TObject);
-    procedure edtUserKeyDown(Sender: TObject; var Key: Word;
-      Shift: TShiftState);
     procedure img1Click(Sender: TObject);
     procedure img1Click(Sender: TObject);
     procedure shpAccountMouseDown(Sender: TObject; Button: TMouseButton;
     procedure shpAccountMouseDown(Sender: TObject; Button: TMouseButton;
       Shift: TShiftState; X, Y: Integer);
       Shift: TShiftState; X, Y: Integer);
     procedure shpPWMouseDown(Sender: TObject; Button: TMouseButton;
     procedure shpPWMouseDown(Sender: TObject; Button: TMouseButton;
       Shift: TShiftState; X, Y: Integer);
       Shift: TShiftState; X, Y: Integer);
     procedure btnCloseClick(Sender: TObject);
     procedure btnCloseClick(Sender: TObject);
-    procedure edtUserClick(Sender: TObject);
+    procedure FormDestroy(Sender: TObject);
+    procedure cbUserKeyDown(Sender: TObject; var Key: Word;
+      Shift: TShiftState);
+    procedure cbUserClick(Sender: TObject);
+    procedure nClearAccountClick(Sender: TObject);
   private
   private
     { Private declarations }
     { Private declarations }
+    FUsersCon: TADOConnection;
+    FUsersQry: TADOQuery;
+    procedure ReadCloudUser;
+    procedure WriteCloudUser;
   public
   public
     { Public declarations }
     { Public declarations }
   end;
   end;
@@ -77,6 +85,7 @@ begin
     if Form.ShowModal = mrOK then
     if Form.ShowModal = mrOK then
     begin
     begin
       Result := True;
       Result := True;
+      Form.WriteCloudUser;
     end;
     end;
   finally
   finally
     Form.Free;
     Form.Free;
@@ -134,6 +143,8 @@ begin
   lblVer.Caption := G_ProductName + ' ' + ScGetVersion;
   lblVer.Caption := G_ProductName + ' ' + ScGetVersion;
 //  lblVer.Left := lblProductName.Left + lblProductName.Width + 7;
 //  lblVer.Left := lblProductName.Left + lblProductName.Width + 7;
 
 
+  ReadCloudUser;
+
   SL := TStringList.Create;
   SL := TStringList.Create;
   try
   try
     SL.Clear;
     SL.Clear;
@@ -150,7 +161,7 @@ end;
 procedure TLoginFrm.btnLoginClick(Sender: TObject);
 procedure TLoginFrm.btnLoginClick(Sender: TObject);
 var sInfo, sURL, sCheckCode, sMD5PW: string;
 var sInfo, sURL, sCheckCode, sMD5PW: string;
 begin
 begin
-  case PHPWeb.Login(edtUser.Text, edtPW.Text, sInfo, sCheckCode) of
+  case PHPWeb.Login(cbUser.Text, edtPW.Text, sInfo, sCheckCode) of
     ltCon:
     ltCon:
     begin
     begin
       if Trim(sInfo) <> '' then
       if Trim(sInfo) <> '' then
@@ -171,7 +182,7 @@ begin
     begin
     begin
       // 无法对PHP返回的字符串进行排版。这里使用Delphi自身的字符串。
       // 无法对PHP返回的字符串进行排版。这里使用Delphi自身的字符串。
       sInfo := '尊敬的用户:' + #13#13 +
       sInfo := '尊敬的用户:' + #13#13 +
-               '系统检测出您是通过SmartCost旧版本程序注册了本帐户(' + Trim(edtUser.Text) +
+               '系统检测出您是通过SmartCost旧版本程序注册了本帐户(' + Trim(cbUser.Text) +
                '),因系统升级,为保障您的帐户安全和更好的为您服务,' + #13#13 +
                '),因系统升级,为保障您的帐户安全和更好的为您服务,' + #13#13 +
                '我们需要对您的邮箱进行有效性验证,并需要您重置该帐户的密码以保证您的帐号在新程序上能够正常使用。' + #13#13 +
                '我们需要对您的邮箱进行有效性验证,并需要您重置该帐户的密码以保证您的帐号在新程序上能够正常使用。' + #13#13 +
                '请点击“确定”按钮打开密码重置页面。';
                '请点击“确定”按钮打开密码重置页面。';
@@ -198,7 +209,7 @@ begin
       try
       try
         sMD5PW := GetMD5(edtPW.Text);
         sMD5PW := GetMD5(edtPW.Text);
         sURL := Format('%s?Account=%s&Pwd=%s', [ConfigInfo.WebLoginURL,
         sURL := Format('%s?Account=%s&Pwd=%s', [ConfigInfo.WebLoginURL,
-          edtUser.Text, sMD5PW]);
+          cbUser.Text, sMD5PW]);
         ShellExecute(Application.Handle, 'open', PChar(sURL), nil, nil, SW_SHOWNORMAL);
         ShellExecute(Application.Handle, 'open', PChar(sURL), nil, nil, SW_SHOWNORMAL);
       finally
       finally
         Screen.Cursor := crDefault;
         Screen.Cursor := crDefault;
@@ -213,16 +224,6 @@ begin
   end;
   end;
 end;
 end;
 
 
-procedure TLoginFrm.edtUserKeyDown(Sender: TObject; var Key: Word;
-  Shift: TShiftState);
-begin
-  if Key = VK_Return then
-  begin
-    edtPW.SetFocus;
-    edtPW.SelectAll;
-  end;
-end;
-
 procedure TLoginFrm.img1Click(Sender: TObject);
 procedure TLoginFrm.img1Click(Sender: TObject);
 begin
 begin
   Close;
   Close;
@@ -231,7 +232,7 @@ end;
 procedure TLoginFrm.shpAccountMouseDown(Sender: TObject; Button: TMouseButton;
 procedure TLoginFrm.shpAccountMouseDown(Sender: TObject; Button: TMouseButton;
   Shift: TShiftState; X, Y: Integer);
   Shift: TShiftState; X, Y: Integer);
 begin
 begin
-  edtUser.SetFocus;
+  cbUser.SetFocus;
 end;
 end;
 
 
 procedure TLoginFrm.shpPWMouseDown(Sender: TObject; Button: TMouseButton;
 procedure TLoginFrm.shpPWMouseDown(Sender: TObject; Button: TMouseButton;
@@ -245,46 +246,120 @@ begin
   Close;
   Close;
 end;
 end;
 
 
-procedure TLoginFrm.edtUserClick(Sender: TObject);
-// For Test Quickly. chenshilong, 2015-09-30
-const
-  AccArr: array[1..11, 1..3] of string = (
-    ('1', '2636698008@qq.com', 'smartcost3850887'), // 纵横销售演示服务器
-    ('2', '1971614655@qq.com', '357134933..'),
-    ('3', '1835082984@qq.com', '123456'),
-    ('4', '2417587264@qq.com', 'koukou0708'),
-    ('5', '2609827960@qq.com', 'missling'),
-    ('6', '1240621850@qq.com', '87654321'),
-    ('7', '1014149875@qq.com', 'zhbwoai'),
-    ('8', '1525739553@qq.com', '123456'),
-    ('9', '1391010261@qq.com', 'missling'),
-    ('10', '916960227@qq.com', '123456'),
-    ('11', '916960227@qq.com', '12345678') // 测试服务器
-  );
+procedure TLoginFrm.FormDestroy(Sender: TObject);
+begin
+  FUsersCon.Close;
+  FUsersCon.Free;
+  FUsersQry.Free;
+end;
 
 
-var
-  i: Integer;
-  bEx: Boolean;
+procedure TLoginFrm.ReadCloudUser;
+var s: string;
 begin
 begin
-  if G_IsTest then
+  FUsersCon := TADOConnection.Create(nil);
+  FUsersCon.LoginPrompt := False;
+  s := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=CloudUser.dat;Persist Security Info=False';
+  FUsersCon.ConnectionString := s;
+  FUsersQry := TADOQuery.Create(nil);
+  FUsersQry.Connection := FUsersCon;
+  FUsersQry.SQL.Text := 'Select Top 15 * From Users Order by LoginTimes Desc';
+  FUsersQry.Open;
+  cbUser.Properties.Items.Clear;
+  if FUsersQry.RecordCount > 0 then
   begin
   begin
-    bEx := False;
-    for i := Low(AccArr) to High(AccArr) do
+    FUsersQry.First;
+    while not FUsersQry.Eof do
     begin
     begin
-      if AccArr[i, 1] = edtUser.Text then
-      begin
-        edtUser.Text := AccArr[i, 2];
-        edtPW.Text := AccArr[i, 3];
-        bEx := True;
-        Break;
-      end;
-    end;
-    if not bEx then
-    begin
-      edtUser.Clear;
-      edtPW.Clear;
+      cbUser.Properties.Items.Add(FUsersQry.FieldByName('Account').AsString);
+      FUsersQry.Next;
     end;
     end;
   end;
   end;
+  FUsersQry.Close;
+end;
+
+procedure TLoginFrm.WriteCloudUser;
+begin
+  FUsersQry.Close;
+  FUsersQry.SQL.Text := Format('Select * From Users where UserID = %d', [PHPWeb.UserID]);
+  FUsersQry.Open;
+  if FUsersQry.RecordCount > 0 then
+  begin
+    FUsersQry.Close;
+    FUsersQry.SQL.Text := Format('Update Users Set LoginTimes=LoginTimes+1 where UserID = %d', [PHPWeb.UserID]);
+    FUsersQry.ExecSQL;
+  end
+  else
+  begin
+    FUsersQry.Close;
+    FUsersQry.SQL.Text := Format('Insert into Users(UserID,Account,RealName,LoginTimes) Values(%d,''%s'',''%s'',1)',
+      [PHPWeb.UserID, PHPWeb.Account, PHPWeb.RealName]);
+    FUsersQry.ExecSQL;
+  end;
+  FUsersQry.Close;
+end;
+
+procedure TLoginFrm.cbUserKeyDown(Sender: TObject; var Key: Word;
+  Shift: TShiftState);
+begin
+  if Key = VK_Return then
+  begin
+    edtPW.SetFocus;
+    edtPW.SelectAll;
+  end;
+end;
+
+procedure TLoginFrm.cbUserClick(Sender: TObject);
+// For Test Quickly. chenshilong, 2015-09-30
+//const
+//  AccArr: array[1..11, 1..3] of string = (
+//    ('1', '2636698008@qq.com', 'smartcost3850887'), // 纵横销售演示服务器
+//    ('2', '1971614655@qq.com', '357134933..'),
+//    ('3', '1835082984@qq.com', '123456'),
+//    ('4', '2417587264@qq.com', 'koukou0708'),
+//    ('5', '2609827960@qq.com', 'missling'),
+//    ('6', '1240621850@qq.com', '87654321'),
+//    ('7', '1014149875@qq.com', 'zhbwoai'),
+//    ('8', '1525739553@qq.com', '123456'),
+//    ('9', '1391010261@qq.com', 'missling'),
+//    ('10', '916960227@qq.com', '123456'),
+//    ('11', '916960227@qq.com', '12345678') // 测试服务器
+//  );
+//
+//var
+//  i: Integer;
+//  bEx: Boolean;
+begin
+//  if G_IsTest then
+//  begin
+//    bEx := False;
+//    for i := Low(AccArr) to High(AccArr) do
+//    begin
+//      if AccArr[i, 1] = cbUser.Text then
+//      begin
+//        cbUser.Text := AccArr[i, 2];
+//        edtPW.Text := AccArr[i, 3];
+//        bEx := True;
+//        Break;
+//      end;
+//    end;
+//    if not bEx then
+//    begin
+//      cbUser.Clear;
+//      edtPW.Clear;
+//    end;
+//  end;
+end;
+
+procedure TLoginFrm.nClearAccountClick(Sender: TObject);
+begin
+  if Application.MessageBox('确定要清空所有记录的帐户信息吗?', '询问', MB_YESNO + MB_ICONQUESTION) = ID_No then
+    Exit;
+
+  FUsersQry.Close;
+  FUsersQry.SQL.Text := 'Delete * From Users';
+  FUsersQry.ExecSQL;
+  FUsersQry.Close;
+  cbUser.Properties.Items.Clear;
 end;
 end;
 
 
 end.
 end.