ZJJLFme.pas 8.9 KB

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