ZJJLFme.pas 9.1 KB

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