ZJJLFme.pas 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323
  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. procedure actnGenerateExecute(Sender: TObject);
  43. procedure lePreTextExit(Sender: TObject);
  44. procedure zgZJJLMouseDown(Sender: TObject; Button: TMouseButton;
  45. Shift: TShiftState; X, Y: Integer);
  46. procedure dxpmZJJLPopup(Sender: TObject);
  47. procedure actnLocateBillsExecute(Sender: TObject);
  48. procedure actnLocateBillsUpdate(Sender: TObject);
  49. procedure dxpmAutoGeneratePopup(Sender: TObject);
  50. procedure actnGenerateFxZJJLExecute(Sender: TObject);
  51. procedure actnGenerateGclZJJLExecute(Sender: TObject);
  52. procedure actnGenerateUpdate(Sender: TObject);
  53. procedure zgDetailInfoGetCellText(Sender: TObject;
  54. const ACoord: TPoint; var Value: String; DisplayText: Boolean);
  55. procedure zgZJJLCurrentChanged(Sender: TObject; Col, Row: Integer);
  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. private
  61. FZJJLData: TZJJLData;
  62. FDataReadOnly: Boolean;
  63. procedure SetDataReadOnly(const Value: Boolean);
  64. procedure RefreshTitle;
  65. procedure GenerateZJJL;
  66. procedure DetailGridCellTextChanged(Sender: TObject; Col, Row: Integer);
  67. procedure InitDetailGrid;
  68. public
  69. constructor Create(AParent: TFrame; AZJJLData: TZJJLData);
  70. destructor Destroy; override;
  71. procedure ResetFrameLink(AZJJLData: TZJJLData);
  72. property DataReadOnly: Boolean read FDataReadOnly write SetDataReadOnly;
  73. end;
  74. implementation
  75. uses
  76. MergeTextFrm, PhaseData, MainFrm, ProjectData, UtilMethods,
  77. PhaseProperty, Math;
  78. {$R *.dfm}
  79. { TZJJLFrame }
  80. constructor TZJJLFrame.Create(AParent: TFrame; AZJJLData: TZJJLData);
  81. begin
  82. inherited Create(AParent);
  83. ResetFrameLink(AZJJLData);
  84. with TProjectData(TPhaseData(FZJJLData.PhaseData).ProjectData) do
  85. lePreText.Text := ProjProperties.ZJJLPreText;
  86. RefreshTitle;
  87. end;
  88. destructor TZJJLFrame.Destroy;
  89. begin
  90. inherited;
  91. end;
  92. procedure TZJJLFrame.ResetFrameLink(AZJJLData: TZJJLData);
  93. begin
  94. FZJJLData := AZJJLData;
  95. saZJJL.DataView := FZJJLData.sdvZJJL;
  96. InitDetailGrid;
  97. if (saZJJL.DataView.RecordCount > 0) then
  98. saZJJL.DataView.LocateInControl(saZJJL.DataView.Records[0]);
  99. zgDetailInfo.Invalidate;
  100. end;
  101. procedure TZJJLFrame.actnGenerateExecute(Sender: TObject);
  102. var
  103. bIsRefer: Boolean;
  104. P: TPoint;
  105. begin
  106. with TProjectData(TPhaseData(FZJJLData.PhaseData).ProjectData) do
  107. bIsRefer := ProjProperties.AuditStatus = 0;
  108. if bIsRefer then
  109. begin
  110. P := pnlButton.ClientToScreen(Point(tobtnGenerate.Left, tobtnGenerate.Top + tobtnGenerate.Height));
  111. dxpmAutoGenerate.Popup(P.X, P.Y);
  112. end
  113. else
  114. GenerateZJJL;
  115. end;
  116. procedure TZJJLFrame.lePreTextExit(Sender: TObject);
  117. begin
  118. with TProjectData(TPhaseData(FZJJLData.PhaseData).ProjectData) do
  119. ProjProperties.ZJJLPreText := lePreText.Text;
  120. end;
  121. procedure TZJJLFrame.SetDataReadOnly(const Value: Boolean);
  122. begin
  123. FDataReadOnly := Value;
  124. actnGenerate.Enabled := not FDataReadOnly;
  125. lePreText.Enabled := not FDataReadOnly;
  126. saZJJL.Columns.ColumnByName('Code').ReadOnly := FDataReadOnly;
  127. saZJJL.Columns.ColumnByName('CertificateCode').ReadOnly := FDataReadOnly;
  128. end;
  129. procedure TZJJLFrame.zgZJJLMouseDown(Sender: TObject; Button: TMouseButton;
  130. Shift: TShiftState; X, Y: Integer);
  131. begin
  132. if Button = mbRight then
  133. dxpmZJJL.PopupFromCursorPos
  134. else if (ssDouble in Shift) and (zgZJJL.CurCol = 1) and (zgZJJL.CurRow > 0) then
  135. begin
  136. if saZJJL.DataView.RecordCount > 0 then
  137. FZJJLData.LocateBills;
  138. end;
  139. end;
  140. procedure TZJJLFrame.dxpmZJJLPopup(Sender: TObject);
  141. begin
  142. SetDxBtnAction(actnLocateBills, MainForm.dxbtnLocateBills);
  143. end;
  144. procedure TZJJLFrame.actnLocateBillsExecute(Sender: TObject);
  145. begin
  146. FZJJLData.LocateBills;
  147. end;
  148. procedure TZJJLFrame.actnLocateBillsUpdate(Sender: TObject);
  149. begin
  150. TAction(Sender).Enabled := Assigned(FZJJLData.sdvZJJL.Current);
  151. end;
  152. procedure TZJJLFrame.RefreshTitle;
  153. var
  154. iType: Integer;
  155. begin
  156. if not TPhaseData(FZJJLData.PhaseData).Active then Exit;
  157. iType := TPhaseData(FZJJLData.PhaseData).PhaseProperty.ZJJLType;
  158. case iType of
  159. 0: labTitle.Caption := '中间计量(0号台账)';
  160. 1: labTitle.Caption := '中间计量(总量控制)';
  161. end;
  162. end;
  163. procedure TZJJLFrame.dxpmAutoGeneratePopup(Sender: TObject);
  164. begin
  165. SetDxBtnAction(actnGenerateFxZJJL, MainForm.dxbtnFxZJJL);
  166. SetDxBtnAction(actnGenerateGclZJJL, MainForm.dxbtnGclZJJL);
  167. end;
  168. procedure TZJJLFrame.actnGenerateFxZJJLExecute(Sender: TObject);
  169. begin
  170. with TPhaseData(FZJJLData.PhaseData).PhaseProperty do
  171. begin
  172. if (ZJJLType = 0) or QuestMessage('当前为“总量控制”格式,切换至“0号台账”将清空数据并重新生成,确定要切换吗?') then
  173. begin
  174. ZJJLType := 0;
  175. GenerateZJJL;
  176. end;
  177. end;
  178. end;
  179. procedure TZJJLFrame.GenerateZJJL;
  180. var
  181. iType: Integer;
  182. begin
  183. with TProjectData(TPhaseData(FZJJLData.PhaseData).ProjectData) do
  184. ProjProperties.ZJJLPreText := lePreText.Text;
  185. iType := TPhaseData(FZJJLData.PhaseData).PhaseProperty.ZJJLType;
  186. case iType of
  187. 0: FZJJLData.GenerateAll;
  188. 1: FZJJLData.GenerateAllByB_Code;
  189. end;
  190. RefreshTitle;
  191. if (saZJJL.DataView.RecordCount > 0) then
  192. saZJJL.DataView.LocateInControl(saZJJL.DataView.Records[0]);
  193. zgDetailInfo.Invalidate;
  194. end;
  195. procedure TZJJLFrame.actnGenerateGclZJJLExecute(Sender: TObject);
  196. begin
  197. with TPhaseData(FZJJLData.PhaseData).PhaseProperty do
  198. begin
  199. if (ZJJLType = 1) or (QuestMessage('当前为“0号台账”格式,切换至“总量控制”将清空数据并重新生成,确定要切换吗?')) then
  200. begin
  201. ZJJLType := 1;
  202. GenerateZJJL;
  203. end;
  204. end;
  205. end;
  206. procedure TZJJLFrame.actnGenerateUpdate(Sender: TObject);
  207. begin
  208. with TProjectData(TPhaseData(FZJJLData.PhaseData).ProjectData) do
  209. TAction(Sender).Enabled := not StageDataReadOnly;
  210. end;
  211. procedure TZJJLFrame.DetailGridCellTextChanged(Sender: TObject; Col,
  212. Row: Integer);
  213. var
  214. Rec: TsdDataRecord;
  215. begin
  216. Rec := saZJJL.DataView.Current;
  217. if not Assigned(Rec) then Exit;
  218. if (Row = 8) then
  219. Rec.ValueByName('FormulaMemo').AsString := TZJGrid(Sender).Cells[Col, Row].Text
  220. else if (Row = 10) then
  221. Rec.ValueByName('RelaFile').AsString := TZJGrid(Sender).Cells[Col, Row].Text;
  222. end;
  223. procedure TZJJLFrame.zgDetailInfoGetCellText(Sender: TObject;
  224. const ACoord: TPoint; var Value: String; DisplayText: Boolean);
  225. function GetDefaultValue(ARec: TsdDataRecord; AFieldName: string): string;
  226. begin
  227. if Assigned(ARec) and (AFieldName <> '') then
  228. Result := ARec.ValueByName(AFieldName).AsString
  229. else
  230. Result := '';
  231. end;
  232. function GetText(ARow: TRowIndex): string;
  233. var
  234. Rec: TsdDataRecord;
  235. begin
  236. Rec := saZJJL.DataView.Current;
  237. if DisplayText then
  238. Result := RowFormats[ARow] + GetDefaultValue(Rec, RowFields[ARow])
  239. else
  240. Result := GetDefaultValue(Rec, RowFields[ARow]);
  241. end;
  242. begin
  243. Value := GetText(TRowIndex(ACoord.Y));
  244. end;
  245. procedure TZJJLFrame.InitDetailGrid;
  246. var
  247. iRowIndex: Integer;
  248. begin
  249. zgDetailInfo.DefaultColWidth := zgDetailInfo.Width - 25;
  250. for iRowIndex := 0 to zgDetailInfo.RowCount - 1 do
  251. zgDetailInfo[0, iRowIndex].Align := gaTopLeft;
  252. zgDetailInfo.RowHeights[Integer(riFormulaMemoValue)] := 57;
  253. zgDetailInfo.RowHeights[Integer(riRelaFileValue)] := 57;
  254. end;
  255. procedure TZJJLFrame.zgZJJLCurrentChanged(Sender: TObject; Col,
  256. Row: Integer);
  257. begin
  258. zgDetailInfo.Invalidate;
  259. end;
  260. procedure TZJJLFrame.zgDetailInfoSetCellText(Sender: TObject;
  261. const ACoord: TPoint; var Value: String; DisplayText: Boolean);
  262. var
  263. Rec: TsdDataRecord;
  264. sFieldName: string;
  265. begin
  266. Rec := saZJJL.DataView.Current;
  267. if Assigned(Rec) then
  268. begin
  269. sFieldName := RowFields[TRowIndex(ACoord.Y)];
  270. if (sFieldName <> '') then
  271. begin
  272. saZJJL.DataView.Text[saZJJL.DataView.IndexOf(Rec), saZJJL.DataView.FindColumn(sFieldName).Index] := Value;
  273. end;
  274. end;
  275. end;
  276. procedure TZJJLFrame.zgDetailInfoCellCanEdit(Sender: TObject;
  277. const ACoord: TPoint; var Allow: Boolean);
  278. var
  279. sFieldName: string;
  280. begin
  281. sFieldName := RowFields[TRowIndex(ACoord.Y)];
  282. Allow := sFieldName <> '';
  283. end;
  284. end.