ZJJLFme.pas 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306
  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. TPhaseData(FZJJLData.PhaseData).PhaseProperty.ZJJLType := 0;
  177. GenerateZJJL;
  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. TPhaseData(FZJJLData.PhaseData).PhaseProperty.ZJJLType := 1;
  198. GenerateZJJL;
  199. end;
  200. procedure TZJJLFrame.actnGenerateUpdate(Sender: TObject);
  201. begin
  202. with TProjectData(TPhaseData(FZJJLData.PhaseData).ProjectData) do
  203. TAction(Sender).Enabled := not StageDataReadOnly;
  204. end;
  205. procedure TZJJLFrame.zgDetailInfoGetCellText(Sender: TObject;
  206. const ACoord: TPoint; var Value: String; DisplayText: Boolean);
  207. function GetDefaultValue(ARec: TsdDataRecord; AFieldName: string): string;
  208. begin
  209. if Assigned(ARec) and (AFieldName <> '') then
  210. Result := ARec.ValueByName(AFieldName).AsString
  211. else
  212. Result := '';
  213. end;
  214. function GetText(ARow: TRowIndex): string;
  215. var
  216. Rec: TsdDataRecord;
  217. begin
  218. Rec := saZJJL.DataView.Current;
  219. if DisplayText then
  220. Result := RowFormats[ARow] + GetDefaultValue(Rec, RowFields[ARow])
  221. else
  222. Result := GetDefaultValue(Rec, RowFields[ARow]);
  223. end;
  224. begin
  225. if (ACoord.Y >= 0) and (ACoord.Y <= 10) then
  226. Value := GetText(TRowIndex(ACoord.Y));
  227. end;
  228. procedure TZJJLFrame.InitDetailGrid;
  229. var
  230. iRowIndex: Integer;
  231. begin
  232. zgDetailInfo.DefaultColWidth := zgDetailInfo.Width - 25;
  233. for iRowIndex := 0 to zgDetailInfo.RowCount - 1 do
  234. zgDetailInfo[0, iRowIndex].Align := gaTopLeft;
  235. zgDetailInfo.RowHeights[Integer(riFormulaMemoValue)] := 57;
  236. zgDetailInfo.Cells[0, Integer(riFormulaMemoValue)].Align := gaTopLeft;
  237. zgDetailInfo.RowHeights[Integer(riRelaFileValue)] := 57;
  238. zgDetailInfo.Cells[0, Integer(riRelaFileValue)].Align := gaTopLeft;
  239. end;
  240. procedure TZJJLFrame.zgZJJLCurrentChanged(Sender: TObject; Col,
  241. Row: Integer);
  242. begin
  243. zgDetailInfo.Invalidate;
  244. end;
  245. procedure TZJJLFrame.zgDetailInfoSetCellText(Sender: TObject;
  246. const ACoord: TPoint; var Value: String; DisplayText: Boolean);
  247. var
  248. Rec: TsdDataRecord;
  249. sFieldName: string;
  250. begin
  251. Rec := saZJJL.DataView.Current;
  252. if Assigned(Rec) then
  253. begin
  254. sFieldName := RowFields[TRowIndex(ACoord.Y)];
  255. if (sFieldName <> '') then
  256. begin
  257. saZJJL.DataView.Text[saZJJL.DataView.IndexOf(Rec), saZJJL.DataView.FindColumn(sFieldName).Index] := Value;
  258. end;
  259. end;
  260. end;
  261. procedure TZJJLFrame.zgDetailInfoCellCanEdit(Sender: TObject;
  262. const ACoord: TPoint; var Allow: Boolean);
  263. var
  264. sFieldName: string;
  265. begin
  266. sFieldName := RowFields[TRowIndex(ACoord.Y)];
  267. Allow := (sFieldName <> '') and Assigned(saZJJL.DataView.Current);
  268. end;
  269. end.