ZJJLFme.pas 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327
  1. unit ZJJLFme;
  2. interface
  3. uses
  4. ZJJLDm,
  5. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  6. Dialogs, ExtCtrls, StdCtrls, DBCtrls, Mask, JimLabels, DB, ComCtrls,
  7. ToolWin, ActnList, ZjGridDBA, ZJGrid, dxBar, sdGridDBA, sdDB;
  8. type
  9. TRowIndex = (riBGLCode, riPegName, riBeginPeg, riEndPeg, riFBFXName, riUnitName, riDrawingCode,
  10. riFormulaMemoTitle, riFormulaMemoValue, riRelaFileTitle, riRelaFileValue);
  11. const
  12. RowFields: array [TRowIndex] of string = ('BGLCode', 'PegName', 'BeginPeg', 'EndPeg', 'FBFXName', 'UnitName', 'DrawingCode',
  13. '', 'FormulaMemo', '', 'RelaFile');
  14. RowFormats: array [TRowIndex] of string = ('变更令号:', '部位:', '起始桩号:', '终止桩号:', '分部分项工程:', '计量单元:', '图号:',
  15. '计算式说明:', '', '计算草图几何尺寸:', '');
  16. type
  17. TZJJLFrame = class(TFrame)
  18. labTitle: TJimGradLabel;
  19. alBGL: TActionList;
  20. actnGenerate: TAction;
  21. pnlTop: TPanel;
  22. pnlButton: TPanel;
  23. tobaTop: TToolBar;
  24. tobtnGenerate: TToolButton;
  25. lePreText: TLabeledEdit;
  26. pnlZJJL: TPanel;
  27. zgZJJL: TZJGrid;
  28. pnlListTitle: TPanel;
  29. pnlListBar: TPanel;
  30. lblListTitle: TLabel;
  31. pnlZJJLProperty: TPanel;
  32. pnlDataTitle: TPanel;
  33. lblDataTiel: TLabel;
  34. pnlDataBar: TPanel;
  35. dxpmZJJL: TdxBarPopupMenu;
  36. actnLocateBills: TAction;
  37. dxpmAutoGenerate: TdxBarPopupMenu;
  38. actnGenerateFxZJJL: TAction;
  39. actnGenerateGclZJJL: TAction;
  40. saZJJL: TsdGridDBA;
  41. zgDetailInfo: TZJGrid;
  42. actnGenerateGclGatherZJJL: TAction;
  43. procedure actnGenerateExecute(Sender: TObject);
  44. procedure lePreTextExit(Sender: TObject);
  45. procedure zgZJJLMouseDown(Sender: TObject; Button: TMouseButton;
  46. Shift: TShiftState; X, Y: Integer);
  47. procedure dxpmZJJLPopup(Sender: TObject);
  48. procedure actnLocateBillsExecute(Sender: TObject);
  49. procedure actnLocateBillsUpdate(Sender: TObject);
  50. procedure dxpmAutoGeneratePopup(Sender: TObject);
  51. procedure actnGenerateFxZJJLExecute(Sender: TObject);
  52. procedure actnGenerateGclZJJLExecute(Sender: TObject);
  53. procedure actnGenerateUpdate(Sender: TObject);
  54. procedure zgDetailInfoGetCellText(Sender: TObject;
  55. const ACoord: TPoint; var Value: String; DisplayText: Boolean);
  56. procedure zgDetailInfoSetCellText(Sender: TObject;
  57. const ACoord: TPoint; var Value: String; DisplayText: Boolean);
  58. procedure zgDetailInfoCellCanEdit(Sender: TObject;
  59. const ACoord: TPoint; var Allow: Boolean);
  60. procedure actnGenerateGclGatherZJJLExecute(Sender: TObject);
  61. private
  62. FZJJLData: TZJJLData;
  63. FDataReadOnly: Boolean;
  64. procedure SetDataReadOnly(const Value: Boolean);
  65. procedure RefreshTitle;
  66. procedure RefreshDetailGrid;
  67. procedure GenerateZJJL;
  68. procedure InitDetailGrid;
  69. public
  70. constructor Create(AParent: TFrame; AZJJLData: TZJJLData);
  71. destructor Destroy; override;
  72. procedure ResetFrameLink(AZJJLData: TZJJLData);
  73. property DataReadOnly: Boolean read FDataReadOnly write SetDataReadOnly;
  74. end;
  75. implementation
  76. uses
  77. MergeTextFrm, PhaseData, MainFrm, ProjectData, UtilMethods,
  78. PhaseProperty, Math;
  79. {$R *.dfm}
  80. { TZJJLFrame }
  81. constructor TZJJLFrame.Create(AParent: TFrame; AZJJLData: TZJJLData);
  82. begin
  83. inherited Create(AParent);
  84. ResetFrameLink(AZJJLData);
  85. if TPhaseData(FZJJLData.PhaseData).Active then
  86. begin
  87. with TPhaseData(FZJJLData.PhaseData).PhaseProperty do
  88. lePreText.Text := ZJJLPreText;
  89. end;
  90. RefreshTitle;
  91. FZJJLData.RefreshDetailGrid := RefreshDetailGrid;
  92. end;
  93. destructor TZJJLFrame.Destroy;
  94. begin
  95. inherited;
  96. end;
  97. procedure TZJJLFrame.ResetFrameLink(AZJJLData: TZJJLData);
  98. begin
  99. FZJJLData := AZJJLData;
  100. saZJJL.DataView := FZJJLData.sdvZJJL;
  101. InitDetailGrid;
  102. if (saZJJL.DataView.RecordCount > 0) then
  103. saZJJL.DataView.LocateInControl(saZJJL.DataView.Records[0]);
  104. FZJJLData.RefreshDetailGrid := RefreshDetailGrid;
  105. zgDetailInfo.Invalidate;
  106. end;
  107. procedure TZJJLFrame.actnGenerateExecute(Sender: TObject);
  108. var
  109. bIsRefer: Boolean;
  110. P: TPoint;
  111. begin
  112. with TProjectData(TPhaseData(FZJJLData.PhaseData).ProjectData) do
  113. bIsRefer := ProjProperties.AuditStatus = 0;
  114. if bIsRefer then
  115. begin
  116. P := pnlButton.ClientToScreen(Point(tobtnGenerate.Left, tobtnGenerate.Top + tobtnGenerate.Height));
  117. dxpmAutoGenerate.Popup(P.X, P.Y);
  118. end
  119. else
  120. GenerateZJJL;
  121. end;
  122. procedure TZJJLFrame.lePreTextExit(Sender: TObject);
  123. begin
  124. with TProjectData(TPhaseData(FZJJLData.PhaseData).ProjectData) do
  125. begin
  126. ProjProperties.ZJJLPreText := lePreText.Text;
  127. PhaseData.PhaseProperty.ZJJLPreText := lePreText.Text;
  128. end;
  129. end;
  130. procedure TZJJLFrame.SetDataReadOnly(const Value: Boolean);
  131. begin
  132. FDataReadOnly := Value;
  133. actnGenerate.Enabled := not FDataReadOnly;
  134. lePreText.Enabled := not FDataReadOnly;
  135. saZJJL.Columns.ColumnByName('Code').ReadOnly := FDataReadOnly;
  136. saZJJL.Columns.ColumnByName('CertificateCode').ReadOnly := FDataReadOnly;
  137. lePreText.Enabled := not Value;
  138. end;
  139. procedure TZJJLFrame.zgZJJLMouseDown(Sender: TObject; Button: TMouseButton;
  140. Shift: TShiftState; X, Y: Integer);
  141. begin
  142. if Button = mbRight then
  143. dxpmZJJL.PopupFromCursorPos
  144. else if (ssDouble in Shift) and (zgZJJL.CurCol = 1) and (zgZJJL.CurRow > 0) then
  145. begin
  146. if saZJJL.DataView.RecordCount > 0 then
  147. FZJJLData.LocateBills;
  148. end;
  149. end;
  150. procedure TZJJLFrame.dxpmZJJLPopup(Sender: TObject);
  151. begin
  152. SetDxBtnAction(actnLocateBills, MainForm.dxbtnLocateBills);
  153. end;
  154. procedure TZJJLFrame.actnLocateBillsExecute(Sender: TObject);
  155. begin
  156. FZJJLData.LocateBills;
  157. end;
  158. procedure TZJJLFrame.actnLocateBillsUpdate(Sender: TObject);
  159. begin
  160. TAction(Sender).Enabled := Assigned(FZJJLData.sdvZJJL.Current);
  161. end;
  162. procedure TZJJLFrame.RefreshTitle;
  163. var
  164. iType: Integer;
  165. begin
  166. if not TPhaseData(FZJJLData.PhaseData).Active then Exit;
  167. iType := TPhaseData(FZJJLData.PhaseData).PhaseProperty.ZJJLType;
  168. case iType of
  169. 0: labTitle.Caption := '中间计量(0号台账)';
  170. 1: labTitle.Caption := '中间计量(总量控制)';
  171. 2: labTitle.Caption := '中间计量(计量汇总)';
  172. end;
  173. end;
  174. procedure TZJJLFrame.dxpmAutoGeneratePopup(Sender: TObject);
  175. begin
  176. SetDxBtnAction(actnGenerateFxZJJL, MainForm.dxbtnFxZJJL);
  177. SetDxBtnAction(actnGenerateGclZJJL, MainForm.dxbtnGclZJJL);
  178. SetDxBtnAction(actnGenerateGclGatherZJJL, MainForm.dxbtnGclGatherZJJL);
  179. end;
  180. procedure TZJJLFrame.actnGenerateFxZJJLExecute(Sender: TObject);
  181. begin
  182. with TPhaseData(FZJJLData.PhaseData).PhaseProperty do
  183. begin
  184. ZJJLType := 0;
  185. GenerateZJJL;
  186. end;
  187. end;
  188. procedure TZJJLFrame.GenerateZJJL;
  189. var
  190. iType: Integer;
  191. begin
  192. with TProjectData(TPhaseData(FZJJLData.PhaseData).ProjectData) do
  193. ProjProperties.ZJJLPreText := lePreText.Text;
  194. iType := TPhaseData(FZJJLData.PhaseData).PhaseProperty.ZJJLType;
  195. case iType of
  196. 0: FZJJLData.GenerateAll;
  197. 1: FZJJLData.GenerateAllByB_Code;
  198. 2: FZJJLData.GenerateAllByB_CodeGather;
  199. end;
  200. RefreshTitle;
  201. if (saZJJL.DataView.RecordCount > 0) then
  202. saZJJL.DataView.LocateInControl(saZJJL.DataView.Records[0]);
  203. zgDetailInfo.Invalidate;
  204. end;
  205. procedure TZJJLFrame.actnGenerateGclZJJLExecute(Sender: TObject);
  206. begin
  207. with TPhaseData(FZJJLData.PhaseData).PhaseProperty do
  208. begin
  209. ZJJLType := 1;
  210. GenerateZJJL;
  211. end;
  212. end;
  213. procedure TZJJLFrame.actnGenerateUpdate(Sender: TObject);
  214. begin
  215. with TProjectData(TPhaseData(FZJJLData.PhaseData).ProjectData) do
  216. TAction(Sender).Enabled := not StageDataReadOnly;
  217. end;
  218. procedure TZJJLFrame.zgDetailInfoGetCellText(Sender: TObject;
  219. const ACoord: TPoint; var Value: String; DisplayText: Boolean);
  220. function GetDefaultValue(ARec: TsdDataRecord; AFieldName: string): string;
  221. begin
  222. if Assigned(ARec) and (AFieldName <> '') then
  223. Result := ARec.ValueByName(AFieldName).AsString
  224. else
  225. Result := '';
  226. end;
  227. function GetText(ARow: TRowIndex): string;
  228. var
  229. Rec: TsdDataRecord;
  230. begin
  231. Rec := saZJJL.DataView.Current;
  232. if DisplayText then
  233. Result := RowFormats[ARow] + GetDefaultValue(Rec, RowFields[ARow])
  234. else
  235. Result := GetDefaultValue(Rec, RowFields[ARow]);
  236. end;
  237. begin
  238. if (ACoord.Y >= 0) and (ACoord.Y <= 10) then
  239. Value := GetText(TRowIndex(ACoord.Y));
  240. end;
  241. procedure TZJJLFrame.InitDetailGrid;
  242. var
  243. iRowIndex: Integer;
  244. begin
  245. zgDetailInfo.DefaultColWidth := zgDetailInfo.Width - 25;
  246. for iRowIndex := 0 to zgDetailInfo.RowCount - 1 do
  247. zgDetailInfo[0, iRowIndex].Align := gaTopLeft;
  248. zgDetailInfo.RowHeights[Integer(riFormulaMemoValue)] := 57;
  249. zgDetailInfo.Cells[0, Integer(riFormulaMemoValue)].Align := gaTopLeft;
  250. zgDetailInfo.RowHeights[Integer(riRelaFileValue)] := 57;
  251. zgDetailInfo.Cells[0, Integer(riRelaFileValue)].Align := gaTopLeft;
  252. end;
  253. procedure TZJJLFrame.zgDetailInfoSetCellText(Sender: TObject;
  254. const ACoord: TPoint; var Value: String; DisplayText: Boolean);
  255. var
  256. Rec: TsdDataRecord;
  257. sFieldName: string;
  258. begin
  259. Rec := saZJJL.DataView.Current;
  260. if Assigned(Rec) then
  261. begin
  262. sFieldName := RowFields[TRowIndex(ACoord.Y)];
  263. if (sFieldName <> '') then
  264. begin
  265. saZJJL.DataView.Text[saZJJL.DataView.IndexOf(Rec), saZJJL.DataView.FindColumn(sFieldName).Index] := Value;
  266. end;
  267. end;
  268. end;
  269. procedure TZJJLFrame.zgDetailInfoCellCanEdit(Sender: TObject;
  270. const ACoord: TPoint; var Allow: Boolean);
  271. var
  272. sFieldName: string;
  273. begin
  274. sFieldName := RowFields[TRowIndex(ACoord.Y)];
  275. Allow := (not FDataReadOnly) and (sFieldName <> '') and Assigned(saZJJL.DataView.Current);
  276. end;
  277. procedure TZJJLFrame.actnGenerateGclGatherZJJLExecute(Sender: TObject);
  278. begin
  279. with TPhaseData(FZJJLData.PhaseData).PhaseProperty do
  280. begin
  281. ZJJLType := Integer(ztGclGather);
  282. GenerateZJJL;
  283. end;
  284. end;
  285. procedure TZJJLFrame.RefreshDetailGrid;
  286. begin
  287. zgDetailInfo.Invalidate;
  288. end;
  289. end.