ZJJLFme.pas 9.0 KB

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