LoginFrm.pas 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290
  1. {*******************************************************************************
  2. 单元名称: ScLoginFrm.pas
  3. 单元说明: 网络版PHP Web页面登录方式。
  4. 作者时间: Chenshilong, 2012-5-13
  5. *******************************************************************************}
  6. unit LoginFrm;
  7. interface
  8. uses
  9. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  10. Dialogs, JimCombos, ExtCtrls, StdCtrls, cxLookAndFeelPainters,
  11. cxTextEdit, cxButtons, cxControls, cxEdit,
  12. cxMaskEdit, cxDropDownEdit, HookEdit, cxContainer, XPMenu, cslLabel,
  13. IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP,
  14. CslButton, OleCtrls, SHDocVw;
  15. type
  16. TLoginFrm = class(TForm)
  17. edtUser: TEdit;
  18. edtPW: TEdit;
  19. lblForgetPW: TcslLabel;
  20. lblVer: TLabel;
  21. shpAccount: TShape;
  22. imgBG: TImage;
  23. btnLogin: TCslButton;
  24. lblReg: TCslLabel;
  25. btnClose: TCslButton;
  26. lblProductName: TLabel;
  27. shpPW: TShape;
  28. wbLogin: TWebBrowser;
  29. pnlLocalServer: TPanel;
  30. btnLocalLogin: TCslButton;
  31. lblLocalHelp: TCslLabel;
  32. lblLocalServer: TCslLabel;
  33. procedure edtPWKeyDown(Sender: TObject; var Key: Word;
  34. Shift: TShiftState);
  35. procedure FormCreate(Sender: TObject);
  36. procedure btnLoginClick(Sender: TObject);
  37. procedure edtUserKeyDown(Sender: TObject; var Key: Word;
  38. Shift: TShiftState);
  39. procedure img1Click(Sender: TObject);
  40. procedure shpAccountMouseDown(Sender: TObject; Button: TMouseButton;
  41. Shift: TShiftState; X, Y: Integer);
  42. procedure shpPWMouseDown(Sender: TObject; Button: TMouseButton;
  43. Shift: TShiftState; X, Y: Integer);
  44. procedure btnCloseClick(Sender: TObject);
  45. procedure edtUserClick(Sender: TObject);
  46. private
  47. { Private declarations }
  48. public
  49. { Public declarations }
  50. end;
  51. function LoginForm: Boolean;
  52. implementation
  53. uses
  54. ScUtils, ShellAPI, IniFiles, ScConfig, Md5, PHPWebDm, ConstUnit;
  55. {$R *.dfm}
  56. function LoginForm: Boolean;
  57. var
  58. Form: TLoginFrm;
  59. begin
  60. Result := False;
  61. Form := TLoginFrm.Create(nil);
  62. try
  63. if Form.ShowModal = mrOK then
  64. begin
  65. Result := True;
  66. end;
  67. finally
  68. Form.Free;
  69. end;
  70. end;
  71. { TLoginFrm }
  72. procedure TLoginFrm.edtPWKeyDown(Sender: TObject; var Key: Word;
  73. Shift: TShiftState);
  74. begin
  75. if Key = VK_Return then
  76. btnLoginClick(Sender);
  77. end;
  78. procedure TLoginFrm.FormCreate(Sender: TObject);
  79. var SL: TStringList;
  80. ini: TIniFile;
  81. begin
  82. SetClassLong(Handle, GCL_STYLE, GetClassLong(Handle, GCL_STYLE) or CS_DROPSHADOW);
  83. Set8087CW(Default8087CW or $0004);
  84. Set8087CW(Longword($133f));
  85. ini := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'Cloud.ini');
  86. try
  87. G_Server := ini.ReadString('URL', 'Server', '');
  88. G_ServerType := ini.ReadString('URL', 'ServerType', '');
  89. G_CompanyName := ini.ReadString('URL', 'CompanyName', '');
  90. G_MeasureURL := 'http://' + G_Server + ini.ReadString('URL', 'MeasureURL', '');
  91. finally
  92. ini.Free;
  93. end;
  94. if Trim(G_CompanyName) <> '' then
  95. lblProductName.Caption := G_CompanyName
  96. else
  97. lblProductName.Caption := G_ProductName;
  98. // 服务器:1公有 2私有
  99. if G_ServerType = '2' then
  100. begin
  101. pnlLocalServer.Visible := True;
  102. lblLocalServer.URL := G_Server;
  103. lblLocalServer.Hint := G_Server;
  104. end
  105. else if G_ServerType = '1' then
  106. begin
  107. pnlLocalServer.Visible := False;
  108. end;
  109. lblReg.URL := PHPWeb.RegURL;
  110. lblForgetPW.URL := PHPWeb.PwdURL;
  111. lblVer.Caption := G_ProductName + ' ' + ScGetVersion;
  112. // lblVer.Left := lblProductName.Left + lblProductName.Width + 7;
  113. SL := TStringList.Create;
  114. try
  115. SL.Clear;
  116. SL.Add('about: <body><font size=4 color=Green>') ;
  117. SL.Add('正在打开网页请稍候...');
  118. SL.Add('</font></body>');
  119. wbLogin.Navigate(SL.Text);
  120. wbLogin.Navigate(PHPWeb.LoginBannerURL);
  121. finally
  122. end;
  123. end;
  124. procedure TLoginFrm.btnLoginClick(Sender: TObject);
  125. var sInfo, sURL, sCheckCode, sMD5PW: string;
  126. begin
  127. case PHPWeb.Login(edtUser.Text, edtPW.Text, sInfo, sCheckCode) of
  128. ltCon:
  129. begin
  130. if Trim(sInfo) <> '' then
  131. Application.MessageBox(PChar(sInfo), '新版本提示', MB_OK + MB_ICONINFORMATION);
  132. ModalResult := mrOk;
  133. end;
  134. ltLoginFail:
  135. begin
  136. Application.MessageBox(PChar(sInfo), '操作提醒', MB_OK + MB_ICONWARNING);
  137. edtPW.SetFocus;
  138. edtPW.SelectAll;
  139. ModalResult := mrNone;
  140. end;
  141. ltUpdate:
  142. begin
  143. // 无法对PHP返回的字符串进行排版。这里使用Delphi自身的字符串。
  144. sInfo := '尊敬的用户:' + #13#13 +
  145. '系统检测出您是通过SmartCost旧版本程序注册了本帐户(' + Trim(edtUser.Text) +
  146. '),因系统升级,为保障您的帐户安全和更好的为您服务,' + #13#13 +
  147. '我们需要对您的邮箱进行有效性验证,并需要您重置该帐户的密码以保证您的帐号在新程序上能够正常使用。' + #13#13 +
  148. '请点击“确定”按钮打开密码重置页面。';
  149. Application.MessageBox(PChar(sInfo), '升级提示', MB_OK + MB_ICONINFORMATION);
  150. edtPW.SetFocus;
  151. edtPW.SelectAll;
  152. ModalResult := mrNone;
  153. Screen.Cursor := crHourGlass;
  154. try
  155. sURL := ConfigInfo.OldUserResetPwdURL + '?CheckCode=' + sCheckCode;
  156. ShellExecute(Application.Handle, 'open', PChar(sURL), nil, nil, SW_SHOWNORMAL);
  157. finally
  158. Screen.Cursor := crDefault;
  159. end;
  160. end;
  161. ltIncomplete:
  162. begin
  163. Application.MessageBox(PChar(sInfo), '系统提示', MB_OK + MB_ICONINFORMATION);
  164. ModalResult := mrNone;
  165. Screen.Cursor := crHourGlass;
  166. try
  167. sMD5PW := GetMD5(edtPW.Text);
  168. sURL := Format('%s?Account=%s&Pwd=%s', [ConfigInfo.WebLoginURL,
  169. edtUser.Text, sMD5PW]);
  170. ShellExecute(Application.Handle, 'open', PChar(sURL), nil, nil, SW_SHOWNORMAL);
  171. finally
  172. Screen.Cursor := crDefault;
  173. end;
  174. end;
  175. ltDisCon:
  176. begin
  177. Application.MessageBox('当前网络状态较差,无法连接云端,请重新尝试!', '操作提醒', MB_OK + MB_ICONWARNING);
  178. ModalResult := mrNone;
  179. end;
  180. end;
  181. end;
  182. procedure TLoginFrm.edtUserKeyDown(Sender: TObject; var Key: Word;
  183. Shift: TShiftState);
  184. begin
  185. if Key = VK_Return then
  186. begin
  187. edtPW.SetFocus;
  188. edtPW.SelectAll;
  189. end;
  190. end;
  191. procedure TLoginFrm.img1Click(Sender: TObject);
  192. begin
  193. Close;
  194. end;
  195. procedure TLoginFrm.shpAccountMouseDown(Sender: TObject; Button: TMouseButton;
  196. Shift: TShiftState; X, Y: Integer);
  197. begin
  198. edtUser.SetFocus;
  199. end;
  200. procedure TLoginFrm.shpPWMouseDown(Sender: TObject; Button: TMouseButton;
  201. Shift: TShiftState; X, Y: Integer);
  202. begin
  203. edtPW.SetFocus;
  204. end;
  205. procedure TLoginFrm.btnCloseClick(Sender: TObject);
  206. begin
  207. Close;
  208. end;
  209. procedure TLoginFrm.edtUserClick(Sender: TObject);
  210. // For Test Quickly. chenshilong, 2015-09-30
  211. const
  212. AccArr: array[1..11, 1..3] of string = (
  213. ('1', '2636698008@qq.com', 'smartcost3850887'), // 纵横销售演示服务器
  214. ('2', '1971614655@qq.com', '357134933..'),
  215. ('3', '1835082984@qq.com', '123456'),
  216. ('4', '2417587264@qq.com', 'koukou0708'),
  217. ('5', '2609827960@qq.com', 'missling'),
  218. ('6', '1240621850@qq.com', '87654321'),
  219. ('7', '1014149875@qq.com', 'zhbwoai'),
  220. ('8', '1525739553@qq.com', '123456'),
  221. ('9', '1391010261@qq.com', 'missling'),
  222. ('10', '916960227@qq.com', '123456'),
  223. ('11', '916960227@qq.com', '12345678') // 测试服务器
  224. );
  225. var
  226. i: Integer;
  227. bEx: Boolean;
  228. begin
  229. if G_IsTest then
  230. begin
  231. bEx := False;
  232. for i := Low(AccArr) to High(AccArr) do
  233. begin
  234. if AccArr[i, 1] = edtUser.Text then
  235. begin
  236. edtUser.Text := AccArr[i, 2];
  237. edtPW.Text := AccArr[i, 3];
  238. bEx := True;
  239. Break;
  240. end;
  241. end;
  242. if not bEx then
  243. begin
  244. edtUser.Clear;
  245. edtPW.Clear;
  246. end;
  247. end;
  248. end;
  249. end.