ZJJLFme.pas 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299
  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. TPhaseData(FZJJLData.PhaseData).PhaseProperty.ZJJLType := 0;
  170. GenerateZJJL;
  171. end;
  172. procedure TZJJLFrame.GenerateZJJL;
  173. var
  174. iType: Integer;
  175. begin
  176. with TProjectData(TPhaseData(FZJJLData.PhaseData).ProjectData) do
  177. ProjProperties.ZJJLPreText := lePreText.Text;
  178. iType := TPhaseData(FZJJLData.PhaseData).PhaseProperty.ZJJLType;
  179. case iType of
  180. 0: FZJJLData.GenerateAll;
  181. 1: FZJJLData.GenerateAllByB_Code;
  182. end;
  183. RefreshTitle;
  184. if (saZJJL.DataView.RecordCount > 0) then
  185. saZJJL.DataView.LocateInControl(saZJJL.DataView.Records[0]);
  186. zgDetailInfo.Invalidate;
  187. end;
  188. procedure TZJJLFrame.actnGenerateGclZJJLExecute(Sender: TObject);
  189. begin
  190. TPhaseData(FZJJLData.PhaseData).PhaseProperty.ZJJLType := 1;
  191. GenerateZJJL;
  192. end;
  193. procedure TZJJLFrame.actnGenerateUpdate(Sender: TObject);
  194. begin
  195. with TProjectData(TPhaseData(FZJJLData.PhaseData).ProjectData) do
  196. TAction(Sender).Enabled := not StageDataReadOnly;
  197. end;
  198. procedure TZJJLFrame.zgDetailInfoGetCellText(Sender: TObject;
  199. const ACoord: TPoint; var Value: String; DisplayText: Boolean);
  200. function GetDefaultValue(ARec: TsdDataRecord; AFieldName: string): string;
  201. begin
  202. if Assigned(ARec) and (AFieldName <> '') then
  203. Result := ARec.ValueByName(AFieldName).AsString
  204. else
  205. Result := '';
  206. end;
  207. function GetText(ARow: TRowIndex): string;
  208. var
  209. Rec: TsdDataRecord;
  210. begin
  211. Rec := saZJJL.DataView.Current;
  212. if DisplayText then
  213. Result := RowFormats[ARow] + GetDefaultValue(Rec, RowFields[ARow])
  214. else
  215. Result := GetDefaultValue(Rec, RowFields[ARow]);
  216. end;
  217. begin
  218. if (ACoord.Y >= 0) and (ACoord.Y <= 10) then
  219. Value := GetText(TRowIndex(ACoord.Y));
  220. end;
  221. procedure TZJJLFrame.InitDetailGrid;
  222. var
  223. iRowIndex: Integer;
  224. begin
  225. zgDetailInfo.DefaultColWidth := zgDetailInfo.Width - 25;
  226. for iRowIndex := 0 to zgDetailInfo.RowCount - 1 do
  227. zgDetailInfo[0, iRowIndex].Align := gaTopLeft;
  228. zgDetailInfo.RowHeights[Integer(riFormulaMemoValue)] := 57;
  229. zgDetailInfo.Cells[0, Integer(riFormulaMemoValue)].Align := gaTopLeft;
  230. zgDetailInfo.RowHeights[Integer(riRelaFileValue)] := 57;
  231. zgDetailInfo.Cells[0, Integer(riRelaFileValue)].Align := gaTopLeft;
  232. end;
  233. procedure TZJJLFrame.zgZJJLCurrentChanged(Sender: TObject; Col,
  234. Row: Integer);
  235. begin
  236. zgDetailInfo.Invalidate;
  237. end;
  238. procedure TZJJLFrame.zgDetailInfoSetCellText(Sender: TObject;
  239. const ACoord: TPoint; var Value: String; DisplayText: Boolean);
  240. var
  241. Rec: TsdDataRecord;
  242. sFieldName: string;
  243. begin
  244. Rec := saZJJL.DataView.Current;
  245. if Assigned(Rec) then
  246. begin
  247. sFieldName := RowFields[TRowIndex(ACoord.Y)];
  248. if (sFieldName <> '') then
  249. begin
  250. saZJJL.DataView.Text[saZJJL.DataView.IndexOf(Rec), saZJJL.DataView.FindColumn(sFieldName).Index] := Value;
  251. end;
  252. end;
  253. end;
  254. procedure TZJJLFrame.zgDetailInfoCellCanEdit(Sender: TObject;
  255. const ACoord: TPoint; var Allow: Boolean);
  256. var
  257. sFieldName: string;
  258. begin
  259. sFieldName := RowFields[TRowIndex(ACoord.Y)];
  260. Allow := (sFieldName <> '') and Assigned(saZJJL.DataView.Current);
  261. end;
  262. end.