ProjectPropertiesFrm.pas 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694
  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. lblDigit: 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. cbDealPayAloneDigiy: TCheckBox;
  115. leDealPayTotalPriceDigit: TLabeledEdit;
  116. udDealPayTotalPriceDigit: TUpDown;
  117. pnlReportView: TPanel;
  118. lblReportShowStateTitle: TLabel;
  119. pnlReportViewBar: TPanel;
  120. cbReportShowState: TCheckBox;
  121. edtReportShowStateText: TEdit;
  122. cbReportShowStageWithoutReply: TCheckBox;
  123. leDealPhase: TLabeledEdit;
  124. procedure btnOkClick(Sender: TObject);
  125. procedure leContractPriceClick(Sender: TObject);
  126. procedure msbBaseMouseWheel(Sender: TObject; Shift: TShiftState;
  127. WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
  128. procedure msbBaseMouseWheelDown(Sender: TObject;
  129. Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);
  130. procedure msbBaseMouseWheelUp(Sender: TObject; Shift: TShiftState;
  131. MousePos: TPoint; var Handled: Boolean);
  132. procedure msbBaseVScroll(Sender: TObject);
  133. procedure tobtnDealInfoClick(Sender: TObject);
  134. procedure tobtnBaseClick(Sender: TObject);
  135. procedure jcbPhaseChanged(Sender: TObject);
  136. procedure zgStaffCellGetColor(Sender: TObject; ACoord: TPoint;
  137. var AColor: TColor);
  138. procedure zgStaffCellGetFont(Sender: TObject; ACoord: TPoint;
  139. AFont: TFont);
  140. procedure zgStaffCellCanEdit(Sender: TObject; const ACoord: TPoint;
  141. var Allow: Boolean);
  142. procedure leUnlockPasswordKeyPress(Sender: TObject; var Key: Char);
  143. procedure leNewUnlockPasswordAgainExit(Sender: TObject);
  144. procedure leNewUnLockPasswordExit(Sender: TObject);
  145. procedure leUnlockPasswordExit(Sender: TObject);
  146. procedure cbShowReportShadingClick(Sender: TObject);
  147. procedure dtpBaselineChange(Sender: TObject);
  148. procedure cbDealPayAloneDigiyClick(Sender: TObject);
  149. procedure cbReportShowStateClick(Sender: TObject);
  150. private
  151. FProjectData: TProjectData;
  152. FStaffData: TStaffData;
  153. FProjProperties: TProjProperties;
  154. FProjectFrame: TProjectFrame;
  155. procedure InitAllPage;
  156. procedure InitDealInfo;
  157. procedure InitDealPay;
  158. procedure InitTechParameters;
  159. procedure InitProjectView;
  160. procedure InitStaffRela;
  161. procedure InitSafe;
  162. procedure InitCalcParameters;
  163. procedure InitDateTime;
  164. procedure SaveDealInfo;
  165. procedure SaveDealPay;
  166. procedure SaveTechParameters;
  167. procedure SaveSafe;
  168. procedure SaveCalcParameters;
  169. procedure SaveProjectView;
  170. procedure SaveDateTime;
  171. procedure ResetContentsCheck; overload;
  172. procedure ResetContentsCheck(ATag: Integer); overload;
  173. procedure ResetVertScrollBarPosition(ATag: Integer);
  174. procedure CheckValidKey(var AKey: Char);
  175. procedure CheckOrgPassword;
  176. procedure CheckNewPassword;
  177. procedure CheckNewPasswordAgain;
  178. procedure CheckDate;
  179. procedure SetProjectData(const Value: TProjectData);
  180. public
  181. procedure Save;
  182. property ProjectData: TProjectData read FProjectData write SetProjectData;
  183. property ProjProperties: TProjProperties read FProjProperties;
  184. property ProjectFrame: TProjectFrame read FProjectFrame write FprojectFrame;
  185. end;
  186. procedure ModifyProjectProperties(ProjectFrame: TProjectFrame);
  187. implementation
  188. uses
  189. PhaseProperty, DB, UtilMethods, ZhAPI;
  190. {$R *.dfm}
  191. procedure ModifyProjectProperties(ProjectFrame: TProjectFrame);
  192. var
  193. PropertiesForm: TProjectPropertiesForm;
  194. begin
  195. PropertiesForm := TProjectPropertiesForm.Create(nil);
  196. try
  197. PropertiesForm.ClientHeight := 357;
  198. PropertiesForm.ClientWidth := 530;
  199. PropertiesForm.ProjectFrame := ProjectFrame;
  200. PropertiesForm.ProjectData := ProjectFrame.ProjectData;
  201. PropertiesForm.zgStaff.OnCellCanEdit := PropertiesForm.zgStaffCellCanEdit;
  202. if PropertiesForm.ShowModal = mrOk then
  203. PropertiesForm.Save;
  204. finally
  205. PropertiesForm.Free;
  206. end;
  207. end;
  208. { TProjectPropertiesForm }
  209. procedure TProjectPropertiesForm.InitAllPage;
  210. begin
  211. InitDealInfo;
  212. InitTechParameters;
  213. InitDealPay;
  214. InitSafe;
  215. InitCalcParameters;
  216. InitDateTime;
  217. InitStaffRela;
  218. InitProjectView;
  219. end;
  220. procedure TProjectPropertiesForm.InitProjectView;
  221. begin
  222. cbShowPriceChange.Checked := FProjProperties.ShowPriceChange;
  223. cbShowBGLCode.Checked := FProjProperties.ShowBGLCode;
  224. cbShowDesignQuantity.Checked := FProjProperties.ShowDesignQuantity;
  225. cbShowAlias.Checked := FProjProperties.ShowAlias;
  226. cbShowReportShading.Checked := FProjProperties.ShowReportShading;
  227. edtReportShading.Enabled := cbShowReportShading.Checked;
  228. edtReportShading.Text := FProjProperties.ReportShading;
  229. cbReportShowState.Checked := FProjProperties.ReportShowState;
  230. edtReportShowStateText.Text := FProjProperties.ReportShowStateText;
  231. edtReportShowStateText.Enabled := cbReportShowState.Checked;
  232. cbReportShowStageWithoutReply.Checked := FProjProperties.ReportShowStateWithoutReply;
  233. cbReportShowStageWithoutReply.Enabled := cbReportShowState.Checked;
  234. end;
  235. procedure TProjectPropertiesForm.btnOkClick(Sender: TObject);
  236. begin
  237. ModalResult := mrOk;
  238. end;
  239. procedure TProjectPropertiesForm.Save;
  240. begin
  241. SaveDealPay;
  242. SaveDealInfo;
  243. SaveTechParameters;
  244. SaveSafe;
  245. SaveCalcParameters;
  246. SaveDateTime;
  247. SaveProjectView;
  248. end;
  249. procedure TProjectPropertiesForm.InitDealPay;
  250. begin
  251. leContractPrice.Text := FloatToStr(FProjProperties.ContractPrice);
  252. leContractPrice.ReadOnly := FProjProperties.PhaseCount > 0;
  253. SetWindowLong(leContractPrice.Handle, GWL_STYLE, GetWindowLong(leContractPrice.Handle, GWL_STYLE) or ES_RIGHT);
  254. leStartedSubsist.Text := FloatToStr(FProjProperties.StartedSubsisit);
  255. leStartedSubsist.ReadOnly := FProjProperties.PhaseCount > 0;
  256. SetWindowLong(leStartedSubsist.Handle, GWL_STYLE, GetWindowLong(leStartedSubsist.Handle, GWL_STYLE) or ES_RIGHT);
  257. leMaterialSubsist.Text := FloatToStr(FProjProperties.MaterialSubsist);
  258. leMaterialSubsist.ReadOnly := FProjProperties.PhaseCount > 0;
  259. SetWindowLong(leMaterialSubsist.Handle, GWL_STYLE, GetWindowLong(leMaterialSubsist.Handle, GWL_STYLE) or ES_RIGHT);
  260. end;
  261. procedure TProjectPropertiesForm.SaveDealPay;
  262. begin
  263. if FProjProperties.PhaseCount > 0 then Exit;
  264. FProjProperties.ContractPrice := StrToFloatDef(leContractPrice.Text, 0);
  265. FProjProperties.StartedSubsisit := StrToFloatDef(leStartedSubsist.Text, 0);
  266. FProjProperties.MaterialSubsist := StrToFloatDef(leMaterialSubsist.Text, 0);
  267. FProjectData.DealPaymentData.CalcStarted_RangePrice;
  268. end;
  269. procedure TProjectPropertiesForm.leContractPriceClick(Sender: TObject);
  270. begin
  271. if not TLabeledEdit(Sender).ReadOnly then
  272. TLabeledEdit(Sender).SelectAll;
  273. end;
  274. procedure TProjectPropertiesForm.msbBaseMouseWheel(Sender: TObject;
  275. Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint;
  276. var Handled: Boolean);
  277. begin
  278. ResetContentsCheck;
  279. end;
  280. procedure TProjectPropertiesForm.msbBaseMouseWheelDown(Sender: TObject;
  281. Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);
  282. begin
  283. SendMessage(msbBase.Handle,WM_VSCROLL,SB_LINEDOWN, 0);
  284. end;
  285. procedure TProjectPropertiesForm.msbBaseMouseWheelUp(Sender: TObject;
  286. Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);
  287. begin
  288. SendMessage(msbBase.Handle,WM_VSCROLL,SB_LINEUP, 0);
  289. end;
  290. procedure TProjectPropertiesForm.ResetContentsCheck(ATag: Integer);
  291. begin
  292. tobtnDealInfo.Down := tobtnDealInfo.Tag = ATag;
  293. tobtnTechParameters.Down := tobtnTechParameters.Tag = ATag;
  294. tobtnDealPayment.Down := tobtnDealPayment.Tag = ATag;
  295. tobtnSafe.Down := tobtnSafe.Tag = ATag;
  296. tobtnCalcParameters.Down := tobtnCalcParameters.Tag = ATag;
  297. tobtnDateTime.Down := tobtnDateTime.Tag = ATag;
  298. end;
  299. procedure TProjectPropertiesForm.msbBaseVScroll(Sender: TObject);
  300. begin
  301. ResetContentsCheck;
  302. end;
  303. procedure TProjectPropertiesForm.ResetContentsCheck;
  304. begin
  305. if msbBase.VertScrollBar.Position < 355 then
  306. ResetContentsCheck(tobtnDealInfo.Tag)
  307. else if msbBase.VertScrollBar.Position < 515 then
  308. ResetContentsCheck(tobtnTechParameters.Tag)
  309. else if msbBase.VertScrollBar.Position < 628 then
  310. ResetContentsCheck(tobtnDealPayment.Tag)
  311. else if msbBase.VertScrollBar.Position < 758 then
  312. ResetContentsCheck(tobtnSafe.Tag)
  313. else if msbBase.VertScrollBar.Position < 933 then
  314. ResetContentsCheck(tobtnCalcParameters.Tag)
  315. else
  316. ResetContentsCheck(tobtnDateTime.Tag);
  317. end;
  318. procedure TProjectPropertiesForm.tobtnDealInfoClick(Sender: TObject);
  319. begin
  320. ResetContentsCheck(TToolButton(Sender).Tag);
  321. ResetVertScrollBarPosition(TToolButton(Sender).Tag);
  322. end;
  323. procedure TProjectPropertiesForm.ResetVertScrollBarPosition(ATag: Integer);
  324. begin
  325. if ATag = tobtnDealInfo.Tag then
  326. msbBase.VertScrollBar.Position := 0
  327. else if ATag = tobtnTechParameters.Tag then
  328. msbBase.VertScrollBar.Position := 355
  329. else if ATag = tobtnDealPayment.Tag then
  330. msbBase.VertScrollBar.Position := 515
  331. else if ATag = tobtnSafe.Tag then
  332. msbBase.VertScrollBar.Position := 628
  333. else if ATag = tobtnCalcParameters.Tag then
  334. msbBase.VertScrollBar.Position := 758
  335. else if ATag = tobtnDateTime.Tag then
  336. msbBase.VertScrollBar.Position := 933;
  337. end;
  338. procedure TProjectPropertiesForm.InitDealInfo;
  339. begin
  340. leProjectName.Text := FProjProperties.ProjectName;
  341. leDealName.Text := FProjProperties.DealName;
  342. leDealIndex.Text := FProjProperties.DealIndex;
  343. leDealType.Text := FProjProperties.DealType;
  344. leBName.Text := FProjProperties.BName;
  345. leBLegal.Text := FProjProperties.BLegal;
  346. leBDate.Text := FProjProperties.BDate;
  347. leCName.Text := FProjProperties.CName;
  348. leCLegal.Text := FProjProperties.CLegal;
  349. leCDate.Text := FProjProperties.CDate;
  350. leSName.Text := FProjProperties.SName;
  351. leSLegal.Text := FProjProperties.SLegal;
  352. leSDate.Text := FProjProperties.SDate;
  353. end;
  354. procedure TProjectPropertiesForm.InitTechParameters;
  355. begin
  356. cbLoadLevel.ItemIndex := FProjProperties.LoadLevel;
  357. leStartPeg.Text := FProjProperties.StartPeg;
  358. leEndPeg.Text := FProjProperties.EndPeg;
  359. leLength.Text := FloatToStr(FProjProperties.LoadLength);
  360. leLaneCount.Text := IntToStr(FProjProperties.LaneCount);
  361. leDealPhase.Text := FProjProperties.DealPhase;
  362. end;
  363. procedure TProjectPropertiesForm.SaveDealInfo;
  364. begin
  365. FProjProperties.ProjectName := leProjectName.Text;
  366. FProjProperties.DealName := leDealName.Text;
  367. FProjProperties.DealIndex := leDealIndex.Text;
  368. FProjProperties.DealType := leDealType.Text;
  369. FProjProperties.BName := leBName.Text;
  370. FProjProperties.BLegal := leBLegal.Text;
  371. FProjProperties.BDate := leBDate.Text;
  372. FProjProperties.CName := leCName.Text;
  373. FProjProperties.CLegal := leCLegal.Text;
  374. FProjProperties.CDate := leCDate.Text;
  375. FProjProperties.SName := leSName.Text;
  376. FProjProperties.SLegal := leSLegal.Text;
  377. FProjProperties.SDate := leSDate.Text;
  378. end;
  379. procedure TProjectPropertiesForm.SaveTechParameters;
  380. begin
  381. FProjProperties.LoadLevel := cbLoadLevel.ItemIndex;
  382. FProjProperties.StartPeg := leStartPeg.Text;
  383. FProjProperties.EndPeg := leEndPeg.Text;
  384. FProjProperties.LoadLength := StrToFloatDef(leLength.Text, 0);
  385. FProjProperties.LaneCount := StrToIntDef(leLaneCount.Text, 0);
  386. FProjProperties.DealPhase := leDealPhase.Text;
  387. end;
  388. procedure TProjectPropertiesForm.tobtnBaseClick(Sender: TObject);
  389. procedure ResetTopButtonDown(ATag: Integer);
  390. begin
  391. tobtnBase.Down := tobtnBase.Tag = ATag;
  392. tobtnStaff.Down := tobtnStaff.Tag = ATag;
  393. tobtnView.Down := tobtnView.Tag = ATag;
  394. end;
  395. begin
  396. ResetTopButtonDown(TToolButton(Sender).Tag);
  397. jpsProperties.ActivePageIndex := TToolButton(Sender).Tag;
  398. jcbPhase.Visible := TToolButton(Sender).Tag = tobtnStaff.Tag;
  399. end;
  400. procedure TProjectPropertiesForm.InitStaffRela;
  401. var
  402. I: Integer;
  403. begin
  404. tobtnStaff.Enabled := FProjectData.PhaseIndex > 0;
  405. zaStaff.DataSet := FProjectData.StaffData.cdsStaffView;
  406. jcbPhase.Items.Clear;
  407. for I := 1 to FProjectData.ProjProperties.PhaseCount do
  408. jcbPhase.Items.Add(Format('第 %d 期', [I]));
  409. jcbPhase.ItemIndex := FProjectData.ProjProperties.PhaseCount - 1;
  410. end;
  411. procedure TProjectPropertiesForm.SetProjectData(const Value: TProjectData);
  412. begin
  413. FProjectData := Value;
  414. FStaffData := FProjectData.StaffData;
  415. FProjProperties := FProjectData.ProjProperties;
  416. InitAllPage;
  417. msbBase.VertScrollBar.Position := 0;
  418. jpsProperties.ActivePage := jpsPropertiesBase;
  419. end;
  420. procedure TProjectPropertiesForm.jcbPhaseChanged(Sender: TObject);
  421. begin
  422. FStaffData.ResetViewFilter(jcbPhase.ItemIndex + 1);
  423. end;
  424. procedure TProjectPropertiesForm.zgStaffCellGetColor(Sender: TObject;
  425. ACoord: TPoint; var AColor: TColor);
  426. begin
  427. if FStaffData.cdsStaff.FindKey([jcbPhase.ItemIndex + 1, ACoord.Y - zgStaff.FixedRowCount]) then
  428. if FStaffData.cdsStaffEnable.AsBoolean then
  429. AColor := clWindow
  430. else
  431. AColor := $DCDCDC;
  432. end;
  433. procedure TProjectPropertiesForm.zgStaffCellGetFont(Sender: TObject;
  434. ACoord: TPoint; AFont: TFont);
  435. begin
  436. if FStaffData.cdsStaff.FindKey([jcbPhase.ItemIndex + 1, ACoord.Y - zgStaff.FixedRowCount]) then
  437. if not FStaffData.cdsStaffLocked.AsBoolean and FStaffData.cdsStaffEnable.AsBoolean then
  438. AFont.Color := clWindowText
  439. else
  440. AFont.Color := $A9A9A9;
  441. end;
  442. procedure TProjectPropertiesForm.zgStaffCellCanEdit(Sender: TObject;
  443. const ACoord: TPoint; var Allow: Boolean);
  444. begin
  445. if ACoord.X < 2 then Allow := False;
  446. if FStaffData.cdsStaff.FindKey([jcbPhase.ItemIndex + 1, ACoord.Y - zgStaff.FixedRowCount]) then
  447. Allow := Allow and not FStaffData.cdsStaffLocked.AsBoolean and FStaffData.cdsStaffEnable.AsBoolean;
  448. end;
  449. procedure TProjectPropertiesForm.InitSafe;
  450. var
  451. bHasPassword: Boolean;
  452. begin
  453. bHasPassword := FProjProperties.UnlockInfoPassword <> '';
  454. pnlOrgPW.Visible := bHasPassword;
  455. leNewUnLockPassword.ReadOnly := bHasPassword;
  456. end;
  457. procedure TProjectPropertiesForm.SaveSafe;
  458. begin
  459. if leUnlockPassword.Text = FProjProperties.UnlockInfoPassword then
  460. if leNewUnLockPassword.Text = leNewUnlockPasswordAgain.Text then
  461. FProjProperties.UnlockInfoPassword := leNewUnLockPassword.Text
  462. else ErrorMessage('两次密码输入不一致,密码修改不成功!')
  463. else if leUnlockPassword.Text <> '' then
  464. ErrorMessage('原密码输入错误,密码修改不成功!');
  465. end;
  466. procedure TProjectPropertiesForm.leUnlockPasswordKeyPress(Sender: TObject;
  467. var Key: Char);
  468. begin
  469. CheckValidKey(Key);
  470. end;
  471. procedure TProjectPropertiesForm.CheckValidKey(var AKey: Char);
  472. begin
  473. if not (AKey in ['A'..'Z', 'a'..'z', '0'..'9', #8]) then
  474. AKey := #0;
  475. end;
  476. procedure TProjectPropertiesForm.leNewUnlockPasswordAgainExit(
  477. Sender: TObject);
  478. begin
  479. CheckNewPasswordAgain;
  480. end;
  481. procedure TProjectPropertiesForm.leNewUnLockPasswordExit(Sender: TObject);
  482. begin
  483. CheckNewPassword;
  484. if leNewUnlockPasswordAgain.Text <> '' then
  485. CheckNewPasswordAgain;
  486. end;
  487. procedure TProjectPropertiesForm.CheckNewPassword;
  488. var
  489. bValid: Boolean;
  490. begin
  491. bValid := CheckValidPassword(leNewUnLockPassword.Text);
  492. imgNew.Visible := not bValid;
  493. if not bValid then
  494. lblPasswordHint.Caption := leNewUnLockPassword.Hint;
  495. lblPasswordHint.Visible := not bValid;
  496. leNewUnlockPasswordAgain.ReadOnly := not bValid;
  497. end;
  498. procedure TProjectPropertiesForm.CheckNewPasswordAgain;
  499. var
  500. bValid: Boolean;
  501. begin
  502. bValid := not(CheckValidPassword(leNewUnLockPassword.Text)
  503. and (leNewUnlockPasswordAgain.Text <> leNewUnLockPassword.Text));
  504. imgNewAgain.Visible := not bValid;
  505. if not bValid then
  506. lblPasswordHint.Caption := leNewUnlockPasswordAgain.Hint;
  507. lblPasswordHint.Visible := not bValid;
  508. end;
  509. procedure TProjectPropertiesForm.leUnlockPasswordExit(Sender: TObject);
  510. begin
  511. CheckOrgPassword;
  512. end;
  513. procedure TProjectPropertiesForm.CheckOrgPassword;
  514. var
  515. bValid: Boolean;
  516. begin
  517. bValid := CheckValidPassword(leUnlockPassword.Text);
  518. imgOrg.Visible := not bValid;
  519. if not bValid then
  520. lblPasswordHint.Caption := leUnlockPassword.Hint;
  521. lblPasswordHint.Visible := not bValid;
  522. leNewUnLockPassword.ReadOnly := not bValid;
  523. end;
  524. procedure TProjectPropertiesForm.SaveCalcParameters;
  525. begin
  526. if FProjProperties.PhaseCount = 0 then
  527. begin
  528. FProjProperties.QuantityDigit := udQuantity.Position;
  529. FProjProperties.TotalPriceDigit := udTotalPrice.Position;
  530. FProjectData.ResetFloatDigitView;
  531. FProjProperties.DecimalManager.Common.Quantity.Digit := udQuantity.Position;
  532. FProjProperties.DecimalManager.Common.TotalPrice.Digit := udTotalPrice.Position;
  533. FProjProperties.DecimalManager.PriceMargin.Quantity.Digit := udQuantity.Position;
  534. FProjProperties.DecimalManager.PriceMargin.TotalPrice.Digit := udTotalPrice.Position;
  535. FProjProperties.DealPayAloneDigit := cbDealPayAloneDigiy.Checked;
  536. FProjProperties.DecimalManager.DealPay.TotalPrice.Digit := udDealPayTotalPriceDigit.Position;
  537. end;
  538. if (FProjProperties.PhaseCount = 1) and not FProjectData.PriceMarginReadOnly then
  539. FProjProperties.DecimalManager.PriceMargin.Price.Digit := udPM_PriceDigit.Position;
  540. end;
  541. procedure TProjectPropertiesForm.InitCalcParameters;
  542. begin
  543. udQuantity.Position := FProjProperties.QuantityDigit;
  544. leQuantityDigit.ReadOnly := FProjProperties.PhaseCount > 0;
  545. udQuantity.Enabled := FProjProperties.PhaseCount = 0;
  546. udTotalPrice.Position := FProjProperties.TotalPriceDigit;
  547. leTotalPriceDigit.ReadOnly := FProjProperties.PhaseCount > 0;
  548. udTotalPrice.Enabled := FProjProperties.PhaseCount = 0;
  549. udPM_PriceDigit.Position := FProjProperties.DecimalManager.PriceMargin.Price.Digit;
  550. lePM_PriceDigit.ReadOnly := FProjectData.PriceMarginReadOnly and (FProjProperties.PhaseCount > 1);
  551. udPM_PriceDigit.Enabled := not lePM_PriceDigit.ReadOnly;
  552. cbDealPayAloneDigiy.Checked := FProjProperties.DealPayAloneDigit;
  553. cbDealPayAloneDigiy.Enabled := FProjProperties.PhaseCount = 0;
  554. udDealPayTotalPriceDigit.Position := FProjProperties.DecimalManager.DealPay.TotalPrice.Digit;
  555. leDealPayTotalPriceDigit.ReadOnly := (FProjProperties.PhaseCount > 0);
  556. leDealPayTotalPriceDigit.Enabled := cbDealPayAloneDigiy.Checked;
  557. udDealPayTotalPriceDigit.Enabled := (FProjProperties.PhaseCount = 0) and cbDealPayAloneDigiy.Checked;
  558. end;
  559. procedure TProjectPropertiesForm.SaveProjectView;
  560. begin
  561. FProjProperties.ShowReportShading := cbShowReportShading.Checked;
  562. FProjProperties.ReportShading := edtReportShading.Text;
  563. FProjProperties.ReportShowState := cbReportShowState.Checked;
  564. FProjProperties.ReportShowStateText := edtReportShowStateText.Text;
  565. FProjProperties.ReportShowStateWithoutReply := cbReportShowStageWithoutReply.Checked;
  566. FProjProperties.ShowPriceChange := cbShowPriceChange.Checked;
  567. FProjProperties.ShowBGLCode := cbShowBGLCode.Checked;
  568. FProjProperties.ShowDesignQuantity := cbShowDesignQuantity.Checked;
  569. FProjProperties.ShowAlias := cbShowAlias.Checked;
  570. // 刷新界面显示
  571. FProjectFrame.RefreshColumnDisplay;
  572. end;
  573. procedure TProjectPropertiesForm.cbShowReportShadingClick(Sender: TObject);
  574. begin
  575. edtReportShading.Enabled := cbShowReportShading.Checked;
  576. end;
  577. procedure TProjectPropertiesForm.InitDateTime;
  578. var
  579. fs: TFormatSettings;
  580. begin
  581. GetLocaleFormatSettings(GetUserDefaultLCID, fs);
  582. fs.DateSeparator := '-';
  583. fs.ShortDateFormat := dtpBaseline.Format;
  584. dtpBaseline.Date := StrToDateDef(ProjProperties.Baseline, Date, fs);
  585. dtpDeadline.Date := StrToDateDef(ProjProperties.Deadline, Date, fs);
  586. CheckDate;
  587. end;
  588. procedure TProjectPropertiesForm.SaveDateTime;
  589. begin
  590. ProjProperties.Baseline := FormatDateTime(dtpBaseline.Format, dtpBaseline.Date);
  591. ProjProperties.Deadline := FormatDateTime(dtpDeadline.Format, dtpDeadline.Date);
  592. end;
  593. procedure TProjectPropertiesForm.CheckDate;
  594. var
  595. iBaseline, iDeadline: Integer;
  596. begin
  597. iBaseline := Trunc(dtpBaseline.Date);
  598. iDeadline := Trunc(dtpDeadline.Date);
  599. lblDateHint.Visible := iBaseline > iDeadline;
  600. end;
  601. procedure TProjectPropertiesForm.dtpBaselineChange(Sender: TObject);
  602. begin
  603. CheckDate;
  604. end;
  605. procedure TProjectPropertiesForm.cbDealPayAloneDigiyClick(Sender: TObject);
  606. begin
  607. leDealPayTotalPriceDigit.ReadOnly := (FProjProperties.PhaseCount > 0);
  608. leDealPayTotalPriceDigit.Enabled := cbDealPayAloneDigiy.Checked;
  609. udDealPayTotalPriceDigit.Enabled := (FProjProperties.PhaseCount = 0) and cbDealPayAloneDigiy.Checked;
  610. end;
  611. procedure TProjectPropertiesForm.cbReportShowStateClick(Sender: TObject);
  612. begin
  613. cbReportShowStageWithoutReply.Enabled := cbReportShowState.Checked;
  614. if cbReportShowState.Checked then
  615. cbReportShowStageWithoutReply.Checked := True;
  616. edtReportShowStateText.Enabled := cbReportShowState.Checked;
  617. end;
  618. end.