ProjectPropertiesFrm.pas 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644
  1. unit ProjectPropertiesFrm;
  2. interface
  3. uses
  4. ProjectFme,
  5. ProjectData, ProjectProperty, StaffDm,
  6. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7. Dialogs, StdCtrls, ExtCtrls, JimPages, ComCtrls, ToolWin, MScrollBox,
  8. XPMenu, JimCombos, Mask, ImgList, ZJGrid, ZjGridDBA;
  9. type
  10. TProjectPropertiesForm = class(TForm)
  11. btnOk: TButton;
  12. btnCancel: TButton;
  13. xpm: TXPMenu;
  14. pnlTop: TPanel;
  15. tbTop: TToolBar;
  16. tobtnBase: TToolButton;
  17. Images: TImageList;
  18. pnlBlank: TPanel;
  19. tobtnStaff: TToolButton;
  20. tobtnView: TToolButton;
  21. jpsProperties: TJimPages;
  22. jpsPropertiesBase: TJimPage;
  23. jpsPropertiesStaff: TJimPage;
  24. jpsPropertiesView: TJimPage;
  25. pnlBase: TPanel;
  26. tbContents: TToolBar;
  27. tobtnDealInfo: TToolButton;
  28. tobtnTechParameters: TToolButton;
  29. tobtnDealPayment: TToolButton;
  30. msbBase: TMScrollBox;
  31. lblDealInfo: TLabel;
  32. lblBuilder: TLabel;
  33. lblConstructor: TLabel;
  34. lblSupervisor: TLabel;
  35. lblTechParameters: TLabel;
  36. lblLoadLevel: TLabel;
  37. lblDealPayTitle: TLabel;
  38. pnlDealInfoBar: TPanel;
  39. leProjectName: TLabeledEdit;
  40. leDealName: TLabeledEdit;
  41. leDealIndex: TLabeledEdit;
  42. leBName: TLabeledEdit;
  43. leBLegal: TLabeledEdit;
  44. leBDate: TLabeledEdit;
  45. leCName: TLabeledEdit;
  46. leCLegal: TLabeledEdit;
  47. leCDate: TLabeledEdit;
  48. leSName: TLabeledEdit;
  49. leSLegal: TLabeledEdit;
  50. leSDate: TLabeledEdit;
  51. pnlTechParametersBar: TPanel;
  52. leStartPeg: TLabeledEdit;
  53. leEndPeg: TLabeledEdit;
  54. leLength: TLabeledEdit;
  55. leLaneCount: TLabeledEdit;
  56. cbLoadLevel: TComboBox;
  57. pnlDealPayBar: TPanel;
  58. leContractPrice: TLabeledEdit;
  59. leStartedSubsist: TLabeledEdit;
  60. leMaterialSubsist: TLabeledEdit;
  61. pnlViewBar: TPanel;
  62. leView: TLabel;
  63. zgStaff: TZJGrid;
  64. zaStaff: TZjGridDBA;
  65. jcbPhase: TJimComboBox;
  66. tobtnSafe: TToolButton;
  67. lblSafeTitel: TLabel;
  68. pnlSafeBar: TPanel;
  69. lblUnlockPassword: TLabel;
  70. imgValid: TImageList;
  71. pnlUnlockPassword: TPanel;
  72. pnlOrgPW: TPanel;
  73. leUnlockPassword: TLabeledEdit;
  74. imgOrg: TImage;
  75. pnlNewPW: TPanel;
  76. leNewUnlockPasswordAgain: TLabeledEdit;
  77. leNewUnLockPassword: TLabeledEdit;
  78. imgNew: TImage;
  79. imgNewAgain: TImage;
  80. lblPasswordHint: TLabel;
  81. leDealType: TLabeledEdit;
  82. pnlAllView: TPanel;
  83. pnlAlias: TPanel;
  84. pnlPriceChange: TPanel;
  85. cbShowPriceChange: TCheckBox;
  86. pnlBGL: TPanel;
  87. cbShowBGLCode: TCheckBox;
  88. pnlDesignQuantity: TPanel;
  89. cbShowDesignQuantity: TCheckBox;
  90. cbShowAlias: TCheckBox;
  91. tobtnCalcParameters: TToolButton;
  92. pnlCalcParametersBar: TPanel;
  93. lblCalcParametersTitel: TLabel;
  94. leQuantityDigit: TLabeledEdit;
  95. Label1: TLabel;
  96. leTotalPriceDigit: TLabeledEdit;
  97. udQuantity: TUpDown;
  98. udTotalPrice: TUpDown;
  99. gbPM_Digit: TGroupBox;
  100. lePM_PriceDigit: TLabeledEdit;
  101. udPM_PriceDigit: TUpDown;
  102. pnlReport: TPanel;
  103. leReport: TLabel;
  104. cbShowReportShading: TCheckBox;
  105. edtReportShading: TEdit;
  106. tobtnDateTime: TToolButton;
  107. lblDateTime: TLabel;
  108. pnlDateTime: TPanel;
  109. lblBaseline: TLabel;
  110. dtpBaseline: TDateTimePicker;
  111. lblDeadline: TLabel;
  112. dtpDeadline: TDateTimePicker;
  113. lblDateHint: TLabel;
  114. procedure btnOkClick(Sender: TObject);
  115. procedure leContractPriceClick(Sender: TObject);
  116. procedure msbBaseMouseWheel(Sender: TObject; Shift: TShiftState;
  117. WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
  118. procedure msbBaseMouseWheelDown(Sender: TObject;
  119. Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);
  120. procedure msbBaseMouseWheelUp(Sender: TObject; Shift: TShiftState;
  121. MousePos: TPoint; var Handled: Boolean);
  122. procedure msbBaseVScroll(Sender: TObject);
  123. procedure tobtnDealInfoClick(Sender: TObject);
  124. procedure tobtnBaseClick(Sender: TObject);
  125. procedure jcbPhaseChanged(Sender: TObject);
  126. procedure zgStaffCellGetColor(Sender: TObject; ACoord: TPoint;
  127. var AColor: TColor);
  128. procedure zgStaffCellGetFont(Sender: TObject; ACoord: TPoint;
  129. AFont: TFont);
  130. procedure zgStaffCellCanEdit(Sender: TObject; const ACoord: TPoint;
  131. var Allow: Boolean);
  132. procedure leUnlockPasswordKeyPress(Sender: TObject; var Key: Char);
  133. procedure leNewUnlockPasswordAgainExit(Sender: TObject);
  134. procedure leNewUnLockPasswordExit(Sender: TObject);
  135. procedure leUnlockPasswordExit(Sender: TObject);
  136. procedure cbShowReportShadingClick(Sender: TObject);
  137. procedure dtpBaselineChange(Sender: TObject);
  138. private
  139. FProjectData: TProjectData;
  140. FStaffData: TStaffData;
  141. FProjProperties: TProjProperties;
  142. FProjectFrame: TProjectFrame;
  143. procedure InitAllPage;
  144. procedure InitDealInfo;
  145. procedure InitDealPay;
  146. procedure InitTechParameters;
  147. procedure InitProjectView;
  148. procedure InitStaffRela;
  149. procedure InitSafe;
  150. procedure InitCalcParameters;
  151. procedure InitDateTime;
  152. procedure SaveDealInfo;
  153. procedure SaveDealPay;
  154. procedure SaveTechParameters;
  155. procedure SaveSafe;
  156. procedure SaveCalcParameters;
  157. procedure SaveProjectView;
  158. procedure SaveDateTime;
  159. procedure ResetContentsCheck; overload;
  160. procedure ResetContentsCheck(ATag: Integer); overload;
  161. procedure ResetVertScrollBarPosition(ATag: Integer);
  162. procedure CheckValidKey(var AKey: Char);
  163. procedure CheckOrgPassword;
  164. procedure CheckNewPassword;
  165. procedure CheckNewPasswordAgain;
  166. procedure CheckDate;
  167. procedure SetProjectData(const Value: TProjectData);
  168. public
  169. procedure Save;
  170. property ProjectData: TProjectData read FProjectData write SetProjectData;
  171. property ProjProperties: TProjProperties read FProjProperties;
  172. property ProjectFrame: TProjectFrame read FProjectFrame write FprojectFrame;
  173. end;
  174. procedure ModifyProjectProperties(ProjectFrame: TProjectFrame);
  175. implementation
  176. uses
  177. PhaseProperty, DB, UtilMethods, ZhAPI;
  178. {$R *.dfm}
  179. procedure ModifyProjectProperties(ProjectFrame: TProjectFrame);
  180. var
  181. PropertiesForm: TProjectPropertiesForm;
  182. begin
  183. PropertiesForm := TProjectPropertiesForm.Create(nil);
  184. try
  185. PropertiesForm.ClientHeight := 357;
  186. PropertiesForm.ClientWidth := 530;
  187. PropertiesForm.ProjectFrame := ProjectFrame;
  188. PropertiesForm.ProjectData := ProjectFrame.ProjectData;
  189. PropertiesForm.zgStaff.OnCellCanEdit := PropertiesForm.zgStaffCellCanEdit;
  190. if PropertiesForm.ShowModal = mrOk then
  191. PropertiesForm.Save;
  192. finally
  193. PropertiesForm.Free;
  194. end;
  195. end;
  196. { TProjectPropertiesForm }
  197. procedure TProjectPropertiesForm.InitAllPage;
  198. begin
  199. InitDealInfo;
  200. InitTechParameters;
  201. InitDealPay;
  202. InitSafe;
  203. InitCalcParameters;
  204. InitDateTime;
  205. InitStaffRela;
  206. InitProjectView;
  207. end;
  208. procedure TProjectPropertiesForm.InitProjectView;
  209. begin
  210. cbShowPriceChange.Checked := FProjProperties.ShowPriceChange;
  211. cbShowBGLCode.Checked := FProjProperties.ShowBGLCode;
  212. cbShowDesignQuantity.Checked := FProjProperties.ShowDesignQuantity;
  213. cbShowAlias.Checked := FProjProperties.ShowAlias;
  214. cbShowReportShading.Checked := FProjProperties.ShowReportShading;
  215. edtReportShading.Enabled := cbShowReportShading.Checked;
  216. edtReportShading.Text := FProjProperties.ReportShading;
  217. end;
  218. procedure TProjectPropertiesForm.btnOkClick(Sender: TObject);
  219. begin
  220. ModalResult := mrOk;
  221. end;
  222. procedure TProjectPropertiesForm.Save;
  223. begin
  224. SaveDealPay;
  225. SaveDealInfo;
  226. SaveTechParameters;
  227. SaveSafe;
  228. SaveCalcParameters;
  229. SaveDateTime;
  230. SaveProjectView;
  231. end;
  232. procedure TProjectPropertiesForm.InitDealPay;
  233. begin
  234. leContractPrice.Text := FloatToStr(FProjProperties.ContractPrice);
  235. leContractPrice.ReadOnly := FProjProperties.PhaseCount > 0;
  236. SetWindowLong(leContractPrice.Handle, GWL_STYLE, GetWindowLong(leContractPrice.Handle, GWL_STYLE) or ES_RIGHT);
  237. leStartedSubsist.Text := FloatToStr(FProjProperties.StartedSubsisit);
  238. leStartedSubsist.ReadOnly := FProjProperties.PhaseCount > 0;
  239. SetWindowLong(leStartedSubsist.Handle, GWL_STYLE, GetWindowLong(leStartedSubsist.Handle, GWL_STYLE) or ES_RIGHT);
  240. leMaterialSubsist.Text := FloatToStr(FProjProperties.MaterialSubsist);
  241. leMaterialSubsist.ReadOnly := FProjProperties.PhaseCount > 0;
  242. SetWindowLong(leMaterialSubsist.Handle, GWL_STYLE, GetWindowLong(leMaterialSubsist.Handle, GWL_STYLE) or ES_RIGHT);
  243. end;
  244. procedure TProjectPropertiesForm.SaveDealPay;
  245. begin
  246. if FProjProperties.PhaseCount > 0 then Exit;
  247. FProjProperties.ContractPrice := StrToFloatDef(leContractPrice.Text, 0);
  248. FProjProperties.StartedSubsisit := StrToFloatDef(leStartedSubsist.Text, 0);
  249. FProjProperties.MaterialSubsist := StrToFloatDef(leMaterialSubsist.Text, 0);
  250. FProjectData.DealPaymentData.CalcStarted_RangePrice;
  251. end;
  252. procedure TProjectPropertiesForm.leContractPriceClick(Sender: TObject);
  253. begin
  254. if not TLabeledEdit(Sender).ReadOnly then
  255. TLabeledEdit(Sender).SelectAll;
  256. end;
  257. procedure TProjectPropertiesForm.msbBaseMouseWheel(Sender: TObject;
  258. Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint;
  259. var Handled: Boolean);
  260. begin
  261. ResetContentsCheck;
  262. end;
  263. procedure TProjectPropertiesForm.msbBaseMouseWheelDown(Sender: TObject;
  264. Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);
  265. begin
  266. SendMessage(msbBase.Handle,WM_VSCROLL,SB_LINEDOWN, 0);
  267. end;
  268. procedure TProjectPropertiesForm.msbBaseMouseWheelUp(Sender: TObject;
  269. Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);
  270. begin
  271. SendMessage(msbBase.Handle,WM_VSCROLL,SB_LINEUP, 0);
  272. end;
  273. procedure TProjectPropertiesForm.ResetContentsCheck(ATag: Integer);
  274. begin
  275. tobtnDealInfo.Down := tobtnDealInfo.Tag = ATag;
  276. tobtnTechParameters.Down := tobtnTechParameters.Tag = ATag;
  277. tobtnDealPayment.Down := tobtnDealPayment.Tag = ATag;
  278. tobtnSafe.Down := tobtnSafe.Tag = ATag;
  279. tobtnCalcParameters.Down := tobtnCalcParameters.Tag = ATag;
  280. tobtnDateTime.Down := tobtnDateTime.Tag = ATag;
  281. end;
  282. procedure TProjectPropertiesForm.msbBaseVScroll(Sender: TObject);
  283. begin
  284. ResetContentsCheck;
  285. end;
  286. procedure TProjectPropertiesForm.ResetContentsCheck;
  287. begin
  288. if msbBase.VertScrollBar.Position < 355 then
  289. ResetContentsCheck(tobtnDealInfo.Tag)
  290. else if msbBase.VertScrollBar.Position < 515 then
  291. ResetContentsCheck(tobtnTechParameters.Tag)
  292. else if msbBase.VertScrollBar.Position < 628 then
  293. ResetContentsCheck(tobtnDealPayment.Tag)
  294. else if msbBase.VertScrollBar.Position < 758 then
  295. ResetContentsCheck(tobtnSafe.Tag)
  296. else if msbBase.VertScrollBar.Position < 886 then
  297. ResetContentsCheck(tobtnCalcParameters.Tag)
  298. else
  299. ResetContentsCheck(tobtnDateTime.Tag);
  300. end;
  301. procedure TProjectPropertiesForm.tobtnDealInfoClick(Sender: TObject);
  302. begin
  303. ResetContentsCheck(TToolButton(Sender).Tag);
  304. ResetVertScrollBarPosition(TToolButton(Sender).Tag);
  305. end;
  306. procedure TProjectPropertiesForm.ResetVertScrollBarPosition(ATag: Integer);
  307. begin
  308. if ATag = tobtnDealInfo.Tag then
  309. msbBase.VertScrollBar.Position := 0
  310. else if ATag = tobtnTechParameters.Tag then
  311. msbBase.VertScrollBar.Position := 355
  312. else if ATag = tobtnDealPayment.Tag then
  313. msbBase.VertScrollBar.Position := 515
  314. else if ATag = tobtnSafe.Tag then
  315. msbBase.VertScrollBar.Position := 628
  316. else if ATag = tobtnCalcParameters.Tag then
  317. msbBase.VertScrollBar.Position := 758
  318. else if ATag = tobtnDateTime.Tag then
  319. msbBase.VertScrollBar.Position := 886;
  320. end;
  321. procedure TProjectPropertiesForm.InitDealInfo;
  322. begin
  323. leProjectName.Text := FProjProperties.ProjectName;
  324. leDealName.Text := FProjProperties.DealName;
  325. leDealIndex.Text := FProjProperties.DealIndex;
  326. leDealType.Text := FProjProperties.DealType;
  327. leBName.Text := FProjProperties.BName;
  328. leBLegal.Text := FProjProperties.BLegal;
  329. leBDate.Text := FProjProperties.BDate;
  330. leCName.Text := FProjProperties.CName;
  331. leCLegal.Text := FProjProperties.CLegal;
  332. leCDate.Text := FProjProperties.CDate;
  333. leSName.Text := FProjProperties.SName;
  334. leSLegal.Text := FProjProperties.SLegal;
  335. leSDate.Text := FProjProperties.SDate;
  336. end;
  337. procedure TProjectPropertiesForm.InitTechParameters;
  338. begin
  339. cbLoadLevel.ItemIndex := FProjProperties.LoadLevel;
  340. leStartPeg.Text := FProjProperties.StartPeg;
  341. leEndPeg.Text := FProjProperties.EndPeg;
  342. leLength.Text := FloatToStr(FProjProperties.LoadLength);
  343. leLaneCount.Text := IntToStr(FProjProperties.LaneCount);
  344. end;
  345. procedure TProjectPropertiesForm.SaveDealInfo;
  346. begin
  347. FProjProperties.ProjectName := leProjectName.Text;
  348. FProjProperties.DealName := leDealName.Text;
  349. FProjProperties.DealIndex := leDealIndex.Text;
  350. FProjProperties.DealType := leDealType.Text;
  351. FProjProperties.BName := leBName.Text;
  352. FProjProperties.BLegal := leBLegal.Text;
  353. FProjProperties.BDate := leBDate.Text;
  354. FProjProperties.CName := leCName.Text;
  355. FProjProperties.CLegal := leCLegal.Text;
  356. FProjProperties.CDate := leCDate.Text;
  357. FProjProperties.SName := leSName.Text;
  358. FProjProperties.SLegal := leSLegal.Text;
  359. FProjProperties.SDate := leSDate.Text;
  360. end;
  361. procedure TProjectPropertiesForm.SaveTechParameters;
  362. begin
  363. FProjProperties.LoadLevel := cbLoadLevel.ItemIndex;
  364. FProjProperties.StartPeg := leStartPeg.Text;
  365. FProjProperties.EndPeg := leEndPeg.Text;
  366. FProjProperties.LoadLength := StrToFloatDef(leLength.Text, 0);
  367. FProjProperties.LaneCount := StrToIntDef(leLaneCount.Text, 0);
  368. end;
  369. procedure TProjectPropertiesForm.tobtnBaseClick(Sender: TObject);
  370. procedure ResetTopButtonDown(ATag: Integer);
  371. begin
  372. tobtnBase.Down := tobtnBase.Tag = ATag;
  373. tobtnStaff.Down := tobtnStaff.Tag = ATag;
  374. tobtnView.Down := tobtnView.Tag = ATag;
  375. end;
  376. begin
  377. ResetTopButtonDown(TToolButton(Sender).Tag);
  378. jpsProperties.ActivePageIndex := TToolButton(Sender).Tag;
  379. jcbPhase.Visible := TToolButton(Sender).Tag = tobtnStaff.Tag;
  380. end;
  381. procedure TProjectPropertiesForm.InitStaffRela;
  382. var
  383. I: Integer;
  384. begin
  385. tobtnStaff.Enabled := FProjectData.PhaseIndex > 0;
  386. zaStaff.DataSet := FProjectData.StaffData.cdsStaffView;
  387. jcbPhase.Items.Clear;
  388. for I := 1 to FProjectData.ProjProperties.PhaseCount do
  389. jcbPhase.Items.Add(Format('第 %d 期', [I]));
  390. jcbPhase.ItemIndex := FProjectData.ProjProperties.PhaseCount - 1;
  391. end;
  392. procedure TProjectPropertiesForm.SetProjectData(const Value: TProjectData);
  393. begin
  394. FProjectData := Value;
  395. FStaffData := FProjectData.StaffData;
  396. FProjProperties := FProjectData.ProjProperties;
  397. InitAllPage;
  398. msbBase.VertScrollBar.Position := 0;
  399. jpsProperties.ActivePage := jpsPropertiesBase;
  400. end;
  401. procedure TProjectPropertiesForm.jcbPhaseChanged(Sender: TObject);
  402. begin
  403. FStaffData.ResetViewFilter(jcbPhase.ItemIndex + 1);
  404. end;
  405. procedure TProjectPropertiesForm.zgStaffCellGetColor(Sender: TObject;
  406. ACoord: TPoint; var AColor: TColor);
  407. begin
  408. if FStaffData.cdsStaff.FindKey([jcbPhase.ItemIndex + 1, ACoord.Y - zgStaff.FixedRowCount]) then
  409. if FStaffData.cdsStaffEnable.AsBoolean then
  410. AColor := clWindow
  411. else
  412. AColor := $DCDCDC;
  413. end;
  414. procedure TProjectPropertiesForm.zgStaffCellGetFont(Sender: TObject;
  415. ACoord: TPoint; AFont: TFont);
  416. begin
  417. if FStaffData.cdsStaff.FindKey([jcbPhase.ItemIndex + 1, ACoord.Y - zgStaff.FixedRowCount]) then
  418. if not FStaffData.cdsStaffLocked.AsBoolean and FStaffData.cdsStaffEnable.AsBoolean then
  419. AFont.Color := clWindowText
  420. else
  421. AFont.Color := $A9A9A9;
  422. end;
  423. procedure TProjectPropertiesForm.zgStaffCellCanEdit(Sender: TObject;
  424. const ACoord: TPoint; var Allow: Boolean);
  425. begin
  426. if ACoord.X < 2 then Allow := False;
  427. if FStaffData.cdsStaff.FindKey([jcbPhase.ItemIndex + 1, ACoord.Y - zgStaff.FixedRowCount]) then
  428. Allow := Allow and not FStaffData.cdsStaffLocked.AsBoolean and FStaffData.cdsStaffEnable.AsBoolean;
  429. end;
  430. procedure TProjectPropertiesForm.InitSafe;
  431. var
  432. bHasPassword: Boolean;
  433. begin
  434. bHasPassword := FProjProperties.UnlockInfoPassword <> '';
  435. pnlOrgPW.Visible := bHasPassword;
  436. leNewUnLockPassword.ReadOnly := bHasPassword;
  437. end;
  438. procedure TProjectPropertiesForm.SaveSafe;
  439. begin
  440. if leUnlockPassword.Text = FProjProperties.UnlockInfoPassword then
  441. if leNewUnLockPassword.Text = leNewUnlockPasswordAgain.Text then
  442. FProjProperties.UnlockInfoPassword := leNewUnLockPassword.Text
  443. else ErrorMessage('两次密码输入不一致,密码修改不成功!')
  444. else if leUnlockPassword.Text <> '' then
  445. ErrorMessage('原密码输入错误,密码修改不成功!');
  446. end;
  447. procedure TProjectPropertiesForm.leUnlockPasswordKeyPress(Sender: TObject;
  448. var Key: Char);
  449. begin
  450. CheckValidKey(Key);
  451. end;
  452. procedure TProjectPropertiesForm.CheckValidKey(var AKey: Char);
  453. begin
  454. if not (AKey in ['A'..'Z', 'a'..'z', '0'..'9', #8]) then
  455. AKey := #0;
  456. end;
  457. procedure TProjectPropertiesForm.leNewUnlockPasswordAgainExit(
  458. Sender: TObject);
  459. begin
  460. CheckNewPasswordAgain;
  461. end;
  462. procedure TProjectPropertiesForm.leNewUnLockPasswordExit(Sender: TObject);
  463. begin
  464. CheckNewPassword;
  465. if leNewUnlockPasswordAgain.Text <> '' then
  466. CheckNewPasswordAgain;
  467. end;
  468. procedure TProjectPropertiesForm.CheckNewPassword;
  469. var
  470. bValid: Boolean;
  471. begin
  472. bValid := CheckValidPassword(leNewUnLockPassword.Text);
  473. imgNew.Visible := not bValid;
  474. if not bValid then
  475. lblPasswordHint.Caption := leNewUnLockPassword.Hint;
  476. lblPasswordHint.Visible := not bValid;
  477. leNewUnlockPasswordAgain.ReadOnly := not bValid;
  478. end;
  479. procedure TProjectPropertiesForm.CheckNewPasswordAgain;
  480. var
  481. bValid: Boolean;
  482. begin
  483. bValid := not(CheckValidPassword(leNewUnLockPassword.Text)
  484. and (leNewUnlockPasswordAgain.Text <> leNewUnLockPassword.Text));
  485. imgNewAgain.Visible := not bValid;
  486. if not bValid then
  487. lblPasswordHint.Caption := leNewUnlockPasswordAgain.Hint;
  488. lblPasswordHint.Visible := not bValid;
  489. end;
  490. procedure TProjectPropertiesForm.leUnlockPasswordExit(Sender: TObject);
  491. begin
  492. CheckOrgPassword;
  493. end;
  494. procedure TProjectPropertiesForm.CheckOrgPassword;
  495. var
  496. bValid: Boolean;
  497. begin
  498. bValid := CheckValidPassword(leUnlockPassword.Text);
  499. imgOrg.Visible := not bValid;
  500. if not bValid then
  501. lblPasswordHint.Caption := leUnlockPassword.Hint;
  502. lblPasswordHint.Visible := not bValid;
  503. leNewUnLockPassword.ReadOnly := not bValid;
  504. end;
  505. procedure TProjectPropertiesForm.SaveCalcParameters;
  506. begin
  507. if FProjProperties.PhaseCount = 0 then
  508. begin
  509. FProjProperties.QuantityDigit := udQuantity.Position;
  510. FProjProperties.TotalPriceDigit := udTotalPrice.Position;
  511. FProjectData.ResetFloatDigitView;
  512. FProjProperties.DecimalManager.Common.Quantity.Digit := udQuantity.Position;
  513. FProjProperties.DecimalManager.Common.TotalPrice.Digit := udTotalPrice.Position;
  514. FProjProperties.DecimalManager.PriceMargin.Quantity.Digit := udQuantity.Position;
  515. FProjProperties.DecimalManager.PriceMargin.TotalPrice.Digit := udTotalPrice.Position;
  516. end;
  517. if (FProjProperties.PhaseCount = 1) and not FProjectData.PriceMarginReadOnly then
  518. FProjProperties.DecimalManager.PriceMargin.Price.Digit := udPM_PriceDigit.Position;
  519. end;
  520. procedure TProjectPropertiesForm.InitCalcParameters;
  521. begin
  522. udQuantity.Position := FProjProperties.QuantityDigit;
  523. leQuantityDigit.ReadOnly := FProjProperties.PhaseCount > 0;
  524. udQuantity.Enabled := FProjProperties.PhaseCount = 0;
  525. udTotalPrice.Position := FProjProperties.TotalPriceDigit;
  526. leTotalPriceDigit.ReadOnly := FProjProperties.PhaseCount > 0;
  527. udTotalPrice.Enabled := FProjProperties.PhaseCount = 0;
  528. udPM_PriceDigit.Position := FProjProperties.DecimalManager.PriceMargin.Price.Digit;
  529. lePM_PriceDigit.ReadOnly := FProjectData.PriceMarginReadOnly and (FProjProperties.PhaseCount > 1);
  530. udPM_PriceDigit.Enabled := not lePM_PriceDigit.ReadOnly;
  531. end;
  532. procedure TProjectPropertiesForm.SaveProjectView;
  533. begin
  534. FProjProperties.ShowReportShading := cbShowReportShading.Checked;
  535. FProjProperties.ReportShading := edtReportShading.Text;
  536. FProjProperties.ShowPriceChange := cbShowPriceChange.Checked;
  537. FProjProperties.ShowBGLCode := cbShowBGLCode.Checked;
  538. FProjProperties.ShowDesignQuantity := cbShowDesignQuantity.Checked;
  539. FProjProperties.ShowAlias := cbShowAlias.Checked;
  540. // 刷新界面显示
  541. FProjectFrame.RefreshColumnDisplay;
  542. end;
  543. procedure TProjectPropertiesForm.cbShowReportShadingClick(Sender: TObject);
  544. begin
  545. edtReportShading.Enabled := cbShowReportShading.Checked;
  546. end;
  547. procedure TProjectPropertiesForm.InitDateTime;
  548. var
  549. fs: TFormatSettings;
  550. begin
  551. GetLocaleFormatSettings(GetUserDefaultLCID, fs);
  552. fs.DateSeparator := '-';
  553. fs.ShortDateFormat := dtpBaseline.Format;
  554. dtpBaseline.Date := StrToDateDef(ProjProperties.Baseline, Date, fs);
  555. dtpDeadline.Date := StrToDateDef(ProjProperties.Deadline, Date, fs);
  556. CheckDate;
  557. end;
  558. procedure TProjectPropertiesForm.SaveDateTime;
  559. begin
  560. ProjProperties.Baseline := FormatDateTime(dtpBaseline.Format, dtpBaseline.Date);
  561. ProjProperties.Deadline := FormatDateTime(dtpDeadline.Format, dtpDeadline.Date);
  562. end;
  563. procedure TProjectPropertiesForm.CheckDate;
  564. var
  565. iBaseline, iDeadline: Integer;
  566. begin
  567. iBaseline := Trunc(dtpBaseline.Date);
  568. iDeadline := Trunc(dtpDeadline.Date);
  569. lblDateHint.Visible := iBaseline > iDeadline;
  570. end;
  571. procedure TProjectPropertiesForm.dtpBaselineChange(Sender: TObject);
  572. begin
  573. CheckDate;
  574. end;
  575. end.