ScUserInfoFrm.pas 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369
  1. unit ScUserInfoFrm;
  2. interface
  3. uses
  4. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  5. Dialogs, StdCtrls, ExtCtrls, ZJGrid, HookEdit, ZJEdits, ZJCells;
  6. type
  7. TUserInfoForm = class(TForm)
  8. zgUserInfo: TZJGrid;
  9. Panel1: TPanel;
  10. btnOK: TButton;
  11. btnCancel: TButton;
  12. Panel2: TPanel;
  13. Panel3: TPanel;
  14. Memo1: TMemo;
  15. Label1: TLabel;
  16. Label2: TLabel;
  17. Panel4: TPanel;
  18. Label3: TLabel;
  19. edtUserName: TEdit;
  20. edtPWD: TEdit;
  21. edtPWD2: TEdit;
  22. Label4: TLabel;
  23. Label5: TLabel;
  24. Label6: TLabel;
  25. btnCheckUserName: TButton;
  26. lblBBS: TLabel;
  27. Label7: TLabel;
  28. procedure btnOKClick(Sender: TObject);
  29. procedure btnCheckUserNameClick(Sender: TObject);
  30. procedure FormDestroy(Sender: TObject);
  31. procedure FormCreate(Sender: TObject);
  32. procedure edtPWDEnter(Sender: TObject);
  33. procedure lblBBSClick(Sender: TObject);
  34. procedure zgUserInfoMouseDown(Sender: TObject; Button: TMouseButton;
  35. Shift: TShiftState; X, Y: Integer);
  36. procedure zgUserInfoKeyPress(Sender: TObject; var Key: Char);
  37. private
  38. { Private declarations }
  39. FNew: Boolean;
  40. FDataList: TStringList;
  41. public
  42. { Public declarations }
  43. procedure Init(var AName, APwd: string; ADataList: TStringList; ANew: Boolean);
  44. procedure SaveList;
  45. // 检查输入数据是否合法
  46. function CheckData: Boolean;
  47. end;
  48. function ShowUserInfoForm(var AName, APwd: string; ADataList: TStringList; ANew: Boolean): Boolean;
  49. implementation
  50. uses
  51. ScClientDM, ScUtils, ShellAPI, ScProvinceFrm, IniFiles;
  52. {$R *.dfm}
  53. function ShowUserInfoForm(var AName, APwd: string; ADataList: TStringList; ANew: Boolean): Boolean;
  54. var
  55. Form: TUserInfoForm;
  56. bFirstLogon: Boolean;
  57. begin
  58. Result := False;
  59. Form := TUserInfoForm.Create(nil);
  60. try
  61. Form.Init(AName, APWD, ADataList, ANew);
  62. if Form.ShowModal = mrOK then
  63. begin
  64. AName := Trim(Form.edtUserName.Text);
  65. APwd := GetEncryptEditText(Form.edtPWD);
  66. Form.SaveList;
  67. Result := True;
  68. UserConfigInfo.FirstLogon := False; // 这句十分重要
  69. UserConfigInfo.UserName := AName;
  70. UserConfigInfo.PassWord := APwd;
  71. UserConfigInfo.SaveToFile; // 先全部属性保存
  72. UserConfigInfo.RememberUserInfo(UserConfigInfo.RememberUser);
  73. end;
  74. finally
  75. Form.Free;
  76. end;
  77. end;
  78. {var
  79. Form: TUserInfoForm;
  80. begin
  81. Result := False;
  82. Form := TUserInfoForm.Create(nil);
  83. try
  84. Form.Init(AName, APWD, ADataList, ANew);
  85. if Form.ShowModal = mrOK then
  86. begin
  87. AName := Trim(Form.edtUserName.Text);
  88. APwd := GetEncryptEditText(Form.edtPWD);
  89. Form.SaveList;
  90. Result := True;
  91. end;
  92. finally
  93. Form.Free;
  94. end;
  95. end; }
  96. { TUserInfoForm }
  97. function TUserInfoForm.CheckData: Boolean;
  98. var
  99. I: Integer;
  100. slstSub: TStringList;
  101. PWD1, PWD2, ReturnCopy: string;
  102. endWord: Char;
  103. begin
  104. if Trim(edtUserName.Text) = '' then
  105. begin
  106. MessageHint(0, '请输入用户名。');
  107. Result := False;
  108. edtUserName.SetFocus;
  109. Exit;
  110. end;
  111. if FNew and ClientData.UserExists(Trim(edtUserName.Text)) then
  112. begin
  113. MessageHint(0, '用户名已存在,请重新输入。');
  114. Result := False;
  115. edtUserName.SetFocus;
  116. Exit;
  117. end;
  118. PWD1 := GetEncryptEditText(edtPWD);
  119. if Trim(PWD1) = '' then
  120. begin
  121. MessageHint(0, '请输入密码。');
  122. Result := False;
  123. edtPWD.SetFocus;
  124. Exit;
  125. end;
  126. PWD1 := Trim(PWD1);
  127. if Pos(' ', PWD1) > 0 then
  128. begin
  129. MessageHint(0, '请不要在密码中输入空格。');
  130. Result := False;
  131. edtPWD.SetFocus;
  132. Exit;
  133. end;
  134. if (Length(PWD1) < 6) or (Length(PWD1) > 12) then
  135. begin
  136. MessageHint(0, '您输入的密码长度不合规范,请重新输入!。');
  137. Result := False;
  138. edtPWD.SetFocus;
  139. Exit;
  140. end;
  141. for I := 1 to Length(PWD1) do
  142. begin
  143. ReturnCopy := Copy(PWD1, I, 1);
  144. endWord := ReturnCopy[1];
  145. if Ord(endWord) >= 128 then
  146. begin
  147. MessageHint(0, '请不要在密码中输入汉字。');
  148. Result := False;
  149. edtPWD.SetFocus;
  150. Exit;
  151. end;
  152. end;
  153. PWD1 := GetEncryptEditText(edtPWD);
  154. PWD2 := GetEncryptEditText(edtPWD2);
  155. if Trim(PWD2) = '' then
  156. begin
  157. MessageHint(0, '请输入确认密码。');
  158. Result := False;
  159. edtPWD2.SetFocus;
  160. Exit;
  161. end;
  162. PWD2 := Trim(PWD2);
  163. if Pos(' ', PWD2) > 0then
  164. begin
  165. MessageHint(0, '请不要在确认密码中输入空格。');
  166. Result := False;
  167. edtPWD2.SetFocus;
  168. Exit;
  169. end;
  170. if (Length(PWD2) < 6) or (Length(PWD2) > 12) then
  171. begin
  172. MessageHint(0, '您输入的密码长度不合规范,请重新输入!。');
  173. Result := False;
  174. edtPWD2.SetFocus;
  175. Exit;
  176. end;
  177. for I := 1 to Length(PWD2) do
  178. begin
  179. ReturnCopy := Copy(PWD2, I, 1);
  180. endWord := ReturnCopy[1];
  181. if Ord(endWord) >= 128 then
  182. begin
  183. MessageHint(0, '请不要在确认密码中输入汉字。');
  184. Result := False;
  185. edtPWD2.SetFocus;
  186. Exit;
  187. end;
  188. end;
  189. if FNew and (CompareStr(GetEncryptEditText(edtPWD), GetEncryptEditText(edtPWD2)) <> 0) then
  190. begin
  191. MessageHint(0, '两次输入密码不一致,请重新输入,注意区分大小写。');
  192. Result := False;
  193. edtPWD.SetFocus;
  194. Exit;
  195. end;
  196. slstSub := TStringList.Create;
  197. try
  198. slstSub.Delimiter := '|';
  199. for I := 0 to FDataList.Count - 1 do
  200. begin
  201. slstSub.DelimitedText := FDataList[I];
  202. if StrToInt(slstSub[3]) = 1 then
  203. if zgUserInfo.Cells[1, I + zgUserInfo.FixedRowCount].Text = '' then
  204. begin
  205. MessageHint(0, Format('请填写[%s]。', [slstSub[0]]));
  206. Result := False;
  207. zgUserInfo.Selection.SelectRow(I + zgUserInfo.FixedRowCount, I + zgUserInfo.FixedRowCount);
  208. Exit;
  209. end;
  210. end;
  211. finally
  212. slstSub.Free;
  213. end;
  214. Result := True;
  215. end;
  216. procedure TUserInfoForm.Init(var AName, APwd: string; ADataList: TStringList;
  217. ANew: Boolean);
  218. var
  219. I: Integer;
  220. slstSub: TStringList;
  221. begin
  222. FNew := ANew;
  223. edtUserName.Enabled := FNew;
  224. btnCheckUserName.Enabled := FNew;
  225. edtPWD.Enabled := FNew;
  226. edtPWD2.Enabled := FNew;
  227. edtUserName.Text := AName;
  228. edtPWD.Text := APwd;
  229. edtPWD2.Text := APwd;
  230. zgUserInfo.RowCount := ADataList.Count + 1;
  231. zgUserInfo.Cells[0, 0].Text := '项目';
  232. zgUserInfo.Cells[1, 0].Text := '内容';
  233. zgUserInfo.TextAligns.Cols[1] := gaCenterLeft;
  234. zgUserInfo.Cells[1, 0].TextAlign := gaCenterCenter;
  235. FDataList := ADataList;
  236. slstSub := TStringList.Create;
  237. try
  238. slstSub.Delimiter := '|';
  239. for I := 0 to FDataList.Count - 1 do
  240. begin
  241. slstSub.Clear;
  242. slstSub.DelimitedText := FDataList[I];
  243. zgUserInfo.Cells[0, I + zgUserInfo.FixedRowCount].Text := slstSub[0];
  244. zgUserInfo.Cells[1, I + zgUserInfo.FixedRowCount].Text := slstSub[1];
  245. end;
  246. finally
  247. slstSub.Free;
  248. end;
  249. end;
  250. procedure TUserInfoForm.btnOKClick(Sender: TObject);
  251. begin
  252. if CheckData then
  253. begin
  254. ModalResult := mrOK;
  255. end;
  256. end;
  257. procedure TUserInfoForm.btnCheckUserNameClick(Sender: TObject);
  258. begin
  259. if ClientData.UserExists(Trim(edtUserName.Text)) then
  260. begin
  261. MessageHint(0, '用户名已存在,请重新输入。');
  262. edtUserName.SetFocus;
  263. end
  264. else
  265. MessageHint(0, '用户名可以使用。');
  266. end;
  267. procedure TUserInfoForm.FormDestroy(Sender: TObject);
  268. begin
  269. RemoveEncryptEdit(edtPWD);
  270. RemoveEncryptEdit(edtPWD2);
  271. end;
  272. procedure TUserInfoForm.SaveList;
  273. var
  274. I: Integer;
  275. slstSub: TStringList;
  276. begin
  277. slstSub := TStringList.Create;
  278. try
  279. slstSub.Delimiter := '|';
  280. for I := 0 to FDataList.Count - 1 do
  281. begin
  282. slstSub.Clear;
  283. slstSub.DelimitedText := FDataList[I];
  284. slstSub[1] := zgUserInfo.Cells[1, I + zgUserInfo.FixedRowCount].Text;
  285. FDataList[I] := slstSub.DelimitedText;
  286. end;
  287. finally
  288. slstSub.Free;
  289. end;
  290. end;
  291. procedure TUserInfoForm.FormCreate(Sender: TObject);
  292. begin
  293. { 欢迎使用SmartCost 2007网络版!
  294. 首先请填写您的注册信息。
  295. 再联系纵横,即可获取授权码:加此QQ 549244533 (请注明网络版授权)或致电 0756-2285686。
  296. }
  297. Memo1.Lines.Clear;
  298. Memo1.Lines.Add('欢迎注册纵横免费网络版!请如实填写您的注册信息。');
  299. Memo1.Lines.Add('');
  300. Memo1.Lines.Add(Format('纵横客服中心: %s ', [LoadServicePhone]));
  301. SetEncryptEdit(edtPWD);
  302. SetEncryptEdit(edtPWD2);
  303. end;
  304. procedure TUserInfoForm.edtPWDEnter(Sender: TObject);
  305. begin
  306. SetEncryptEdit(TEdit(Sender));
  307. end;
  308. procedure TUserInfoForm.lblBBSClick(Sender: TObject);
  309. begin
  310. ShellExecute(0, nil, 'http://www.smartcost.com.cn/bbs', nil, nil, SW_SHOWNORMAL);
  311. end;
  312. procedure TUserInfoForm.zgUserInfoKeyPress(Sender: TObject; var Key: Char);
  313. var sPName: string;
  314. begin
  315. if (zgUserInfo.CurRow = 4) and (zgUserInfo.CurCol = 1) then
  316. begin
  317. Key := #0;
  318. sPName := '';
  319. if ExecScProvinceForm(sPName) then
  320. zgUserInfo.Cells[1, 4].Text := sPName;
  321. end;
  322. end;
  323. procedure TUserInfoForm.zgUserInfoMouseDown(Sender: TObject;
  324. Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  325. var sPName: string;
  326. begin
  327. // 省份
  328. if (Button = mbLeft) then
  329. begin
  330. if (zgUserInfo.CurRow = 4) and (zgUserInfo.CurCol = 1) then
  331. begin
  332. sPName := '';
  333. if ExecScProvinceForm(sPName) then
  334. zgUserInfo.Cells[1, 4].Text := sPName;
  335. end;
  336. end;
  337. end;
  338. end.