ZJJLFme.pas 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326
  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 zgZJJLCurrentChanged(Sender: TObject; Col, Row: Integer);
  57. procedure zgDetailInfoSetCellText(Sender: TObject;
  58. const ACoord: TPoint; var Value: String; DisplayText: Boolean);
  59. procedure zgDetailInfoCellCanEdit(Sender: TObject;
  60. const ACoord: TPoint; var Allow: Boolean);
  61. procedure actnGenerateGclGatherZJJLExecute(Sender: TObject);
  62. private
  63. FZJJLData: TZJJLData;
  64. FDataReadOnly: Boolean;
  65. procedure SetDataReadOnly(const Value: Boolean);
  66. procedure RefreshTitle;
  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. end;
  92. destructor TZJJLFrame.Destroy;
  93. begin
  94. inherited;
  95. end;
  96. procedure TZJJLFrame.ResetFrameLink(AZJJLData: TZJJLData);
  97. begin
  98. FZJJLData := AZJJLData;
  99. saZJJL.DataView := FZJJLData.sdvZJJL;
  100. InitDetailGrid;
  101. if (saZJJL.DataView.RecordCount > 0) then
  102. saZJJL.DataView.LocateInControl(saZJJL.DataView.Records[0]);
  103. zgDetailInfo.Invalidate;
  104. end;
  105. procedure TZJJLFrame.actnGenerateExecute(Sender: TObject);
  106. var
  107. bIsRefer: Boolean;
  108. P: TPoint;
  109. begin
  110. with TProjectData(TPhaseData(FZJJLData.PhaseData).ProjectData) do
  111. bIsRefer := ProjProperties.AuditStatus = 0;
  112. if bIsRefer then
  113. begin
  114. P := pnlButton.ClientToScreen(Point(tobtnGenerate.Left, tobtnGenerate.Top + tobtnGenerate.Height));
  115. dxpmAutoGenerate.Popup(P.X, P.Y);
  116. end
  117. else
  118. GenerateZJJL;
  119. end;
  120. procedure TZJJLFrame.lePreTextExit(Sender: TObject);
  121. begin
  122. with TProjectData(TPhaseData(FZJJLData.PhaseData).ProjectData) do
  123. begin
  124. ProjProperties.ZJJLPreText := lePreText.Text;
  125. PhaseData.PhaseProperty.ZJJLPreText := lePreText.Text;
  126. end;
  127. end;
  128. procedure TZJJLFrame.SetDataReadOnly(const Value: Boolean);
  129. begin
  130. FDataReadOnly := Value;
  131. actnGenerate.Enabled := not FDataReadOnly;
  132. lePreText.Enabled := not FDataReadOnly;
  133. saZJJL.Columns.ColumnByName('Code').ReadOnly := FDataReadOnly;
  134. saZJJL.Columns.ColumnByName('CertificateCode').ReadOnly := FDataReadOnly;
  135. lePreText.Enabled := not Value;
  136. end;
  137. procedure TZJJLFrame.zgZJJLMouseDown(Sender: TObject; Button: TMouseButton;
  138. Shift: TShiftState; X, Y: Integer);
  139. begin
  140. if Button = mbRight then
  141. dxpmZJJL.PopupFromCursorPos
  142. else if (ssDouble in Shift) and (zgZJJL.CurCol = 1) and (zgZJJL.CurRow > 0) then
  143. begin
  144. if saZJJL.DataView.RecordCount > 0 then
  145. FZJJLData.LocateBills;
  146. end;
  147. end;
  148. procedure TZJJLFrame.dxpmZJJLPopup(Sender: TObject);
  149. begin
  150. SetDxBtnAction(actnLocateBills, MainForm.dxbtnLocateBills);
  151. end;
  152. procedure TZJJLFrame.actnLocateBillsExecute(Sender: TObject);
  153. begin
  154. FZJJLData.LocateBills;
  155. end;
  156. procedure TZJJLFrame.actnLocateBillsUpdate(Sender: TObject);
  157. begin
  158. TAction(Sender).Enabled := Assigned(FZJJLData.sdvZJJL.Current);
  159. end;
  160. procedure TZJJLFrame.RefreshTitle;
  161. var
  162. iType: Integer;
  163. begin
  164. if not TPhaseData(FZJJLData.PhaseData).Active then Exit;
  165. iType := TPhaseData(FZJJLData.PhaseData).PhaseProperty.ZJJLType;
  166. case iType of
  167. 0: labTitle.Caption := '中间计量(0号台账)';
  168. 1: labTitle.Caption := '中间计量(总量控制)';
  169. 2: labTitle.Caption := '中间计量(计量汇总)';
  170. end;
  171. end;
  172. procedure TZJJLFrame.dxpmAutoGeneratePopup(Sender: TObject);
  173. begin
  174. SetDxBtnAction(actnGenerateFxZJJL, MainForm.dxbtnFxZJJL);
  175. SetDxBtnAction(actnGenerateGclZJJL, MainForm.dxbtnGclZJJL);
  176. SetDxBtnAction(actnGenerateGclGatherZJJL, MainForm.dxbtnGclGatherZJJL);
  177. end;
  178. procedure TZJJLFrame.actnGenerateFxZJJLExecute(Sender: TObject);
  179. begin
  180. with TPhaseData(FZJJLData.PhaseData).PhaseProperty do
  181. begin
  182. ZJJLType := 0;
  183. GenerateZJJL;
  184. end;
  185. end;
  186. procedure TZJJLFrame.GenerateZJJL;
  187. var
  188. iType: Integer;
  189. begin
  190. with TProjectData(TPhaseData(FZJJLData.PhaseData).ProjectData) do
  191. ProjProperties.ZJJLPreText := lePreText.Text;
  192. iType := TPhaseData(FZJJLData.PhaseData).PhaseProperty.ZJJLType;
  193. case iType of
  194. 0: FZJJLData.GenerateAll;
  195. 1: FZJJLData.GenerateAllByB_Code;
  196. 2: FZJJLData.GenerateAllByB_CodeGather;
  197. end;
  198. RefreshTitle;
  199. if (saZJJL.DataView.RecordCount > 0) then
  200. saZJJL.DataView.LocateInControl(saZJJL.DataView.Records[0]);
  201. zgDetailInfo.Invalidate;
  202. end;
  203. procedure TZJJLFrame.actnGenerateGclZJJLExecute(Sender: TObject);
  204. begin
  205. with TPhaseData(FZJJLData.PhaseData).PhaseProperty do
  206. begin
  207. ZJJLType := 1;
  208. GenerateZJJL;
  209. end;
  210. end;
  211. procedure TZJJLFrame.actnGenerateUpdate(Sender: TObject);
  212. begin
  213. with TProjectData(TPhaseData(FZJJLData.PhaseData).ProjectData) do
  214. TAction(Sender).Enabled := not StageDataReadOnly;
  215. end;
  216. procedure TZJJLFrame.zgDetailInfoGetCellText(Sender: TObject;
  217. const ACoord: TPoint; var Value: String; DisplayText: Boolean);
  218. function GetDefaultValue(ARec: TsdDataRecord; AFieldName: string): string;
  219. begin
  220. if Assigned(ARec) and (AFieldName <> '') then
  221. Result := ARec.ValueByName(AFieldName).AsString
  222. else
  223. Result := '';
  224. end;
  225. function GetText(ARow: TRowIndex): string;
  226. var
  227. Rec: TsdDataRecord;
  228. begin
  229. Rec := saZJJL.DataView.Current;
  230. if DisplayText then
  231. Result := RowFormats[ARow] + GetDefaultValue(Rec, RowFields[ARow])
  232. else
  233. Result := GetDefaultValue(Rec, RowFields[ARow]);
  234. end;
  235. begin
  236. if (ACoord.Y >= 0) and (ACoord.Y <= 10) then
  237. Value := GetText(TRowIndex(ACoord.Y));
  238. end;
  239. procedure TZJJLFrame.InitDetailGrid;
  240. var
  241. iRowIndex: Integer;
  242. begin
  243. zgDetailInfo.DefaultColWidth := zgDetailInfo.Width - 25;
  244. for iRowIndex := 0 to zgDetailInfo.RowCount - 1 do
  245. zgDetailInfo[0, iRowIndex].Align := gaTopLeft;
  246. zgDetailInfo.RowHeights[Integer(riFormulaMemoValue)] := 57;
  247. zgDetailInfo.Cells[0, Integer(riFormulaMemoValue)].Align := gaTopLeft;
  248. zgDetailInfo.RowHeights[Integer(riRelaFileValue)] := 57;
  249. zgDetailInfo.Cells[0, Integer(riRelaFileValue)].Align := gaTopLeft;
  250. end;
  251. procedure TZJJLFrame.zgZJJLCurrentChanged(Sender: TObject; Col,
  252. Row: Integer);
  253. begin
  254. zgDetailInfo.Invalidate;
  255. end;
  256. procedure TZJJLFrame.zgDetailInfoSetCellText(Sender: TObject;
  257. const ACoord: TPoint; var Value: String; DisplayText: Boolean);
  258. var
  259. Rec: TsdDataRecord;
  260. sFieldName: string;
  261. begin
  262. Rec := saZJJL.DataView.Current;
  263. if Assigned(Rec) then
  264. begin
  265. sFieldName := RowFields[TRowIndex(ACoord.Y)];
  266. if (sFieldName <> '') then
  267. begin
  268. saZJJL.DataView.Text[saZJJL.DataView.IndexOf(Rec), saZJJL.DataView.FindColumn(sFieldName).Index] := Value;
  269. end;
  270. end;
  271. end;
  272. procedure TZJJLFrame.zgDetailInfoCellCanEdit(Sender: TObject;
  273. const ACoord: TPoint; var Allow: Boolean);
  274. var
  275. sFieldName: string;
  276. begin
  277. sFieldName := RowFields[TRowIndex(ACoord.Y)];
  278. Allow := (not FDataReadOnly) and (sFieldName <> '') and Assigned(saZJJL.DataView.Current);
  279. end;
  280. procedure TZJJLFrame.actnGenerateGclGatherZJJLExecute(Sender: TObject);
  281. begin
  282. with TPhaseData(FZJJLData.PhaseData).PhaseProperty do
  283. begin
  284. ZJJLType := Integer(ztGclGather);
  285. GenerateZJJL;
  286. end;
  287. end;
  288. end.