BGLFme.pas 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. unit BGLFme;
  2. interface
  3. uses
  4. BGLDm,
  5. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  6. Dialogs, ZjGridDBA, StdCtrls, DBCtrls, ZJGrid, ExtCtrls, ComCtrls,
  7. ToolWin, JimLabels, ActnList, DB, dxBar;
  8. type
  9. TBGLFrame = class(TFrame)
  10. labTitle: TJimGradLabel;
  11. ToolBar: TToolBar;
  12. tobtnNew: TToolButton;
  13. pnlBGLList: TPanel;
  14. zgBGL: TZJGrid;
  15. pnlBGLMemo: TPanel;
  16. lblPosition: TLabel;
  17. dbmPos_Reason: TDBMemo;
  18. lblDirection: TLabel;
  19. dbmDirection: TDBMemo;
  20. pnlBGBills: TPanel;
  21. zgBGBills: TZJGrid;
  22. zaBGL: TZjGridDBA;
  23. zaBGBills: TZjGridDBA;
  24. alBGL: TActionList;
  25. actnNew: TAction;
  26. actnApply: TAction;
  27. dxpmBGL: TdxBarPopupMenu;
  28. dxpmBGBills: TdxBarPopupMenu;
  29. actnBatchWritePos_Reason: TAction;
  30. pnlBGL: TPanel;
  31. sprBGL: TSplitter;
  32. actnCopyBGLBlock: TAction;
  33. procedure actnNewExecute(Sender: TObject);
  34. procedure dbmPos_ReasonExit(Sender: TObject);
  35. procedure zgBGLMouseDown(Sender: TObject; Button: TMouseButton;
  36. Shift: TShiftState; X, Y: Integer);
  37. procedure zgBGBillsMouseDown(Sender: TObject; Button: TMouseButton;
  38. Shift: TShiftState; X, Y: Integer);
  39. procedure dxpmBGLPopup(Sender: TObject);
  40. procedure actnBatchWritePos_ReasonExecute(Sender: TObject);
  41. procedure zaBGBillsGridSetCellText(Sender: TObject;
  42. const ACoord: TPoint; var Value: String);
  43. procedure actnCopyBGLBlockExecute(Sender: TObject);
  44. procedure zgBGLCopy(Sender: TObject; const ABounds: TRect;
  45. var Allow: Boolean);
  46. procedure zgBGLPaste(Sender: TObject; const ABounds: TRect;
  47. var Allow: Boolean);
  48. procedure actnCopyBGLBlockUpdate(Sender: TObject);
  49. private
  50. FBGLData: TBGLData;
  51. procedure CopyBGLBlock(ABounds: TRect);
  52. procedure PasteBGLBlock;
  53. public
  54. constructor Create(AParent: TFrame; ABGLData: TBGLData);
  55. end;
  56. implementation
  57. uses
  58. UtilMethods, MergeTextFrm, ProjectData, MainFrm, mEncryptEditions,
  59. BGLClipboard, ConstUnit;
  60. {$R *.dfm}
  61. { TBGLFrame }
  62. constructor TBGLFrame.Create(AParent: TFrame; ABGLData: TBGLData);
  63. begin
  64. inherited Create(AParent);
  65. FBGLData := ABGLData;
  66. zaBGL.DataSet := FBGLData.cdsBGLView;
  67. dbmPos_Reason.DataSource := FBGLData.dsBGL;
  68. dbmDirection.DataSource := FBGLData.dsBGL;
  69. zaBGBills.DataSet := FBGLData.cdsBGBillsView;
  70. SetDxBtnAction(actnNew, tobtnNew);
  71. end;
  72. procedure TBGLFrame.actnNewExecute(Sender: TObject);
  73. var
  74. sCode: string;
  75. begin
  76. sCode := Format('%s-%d-%d', ['', TProjectData(FBGLData.ProjectData).PhaseIndex,
  77. FBGLData.cdsBGL.RecordCount + 1]);
  78. if GetMergeText('±ä¸üÁîºÅ', sCode) then
  79. FBGLData.AddBGL(sCode);
  80. end;
  81. procedure TBGLFrame.dbmPos_ReasonExit(Sender: TObject);
  82. begin
  83. if FBGLData.cdsBGLView.State in [dsEdit] then
  84. FBGLData.cdsBGLView.Post;
  85. end;
  86. procedure TBGLFrame.zgBGLMouseDown(Sender: TObject; Button: TMouseButton;
  87. Shift: TShiftState; X, Y: Integer);
  88. begin
  89. if Button = mbRight then
  90. dxpmBGL.PopupFromCursorPos;
  91. end;
  92. procedure TBGLFrame.zgBGBillsMouseDown(Sender: TObject;
  93. Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  94. begin
  95. if Button = mbRight then
  96. dxpmBGBills.PopupFromCursorPos;
  97. end;
  98. procedure TBGLFrame.dxpmBGLPopup(Sender: TObject);
  99. begin
  100. SetDxBtnAction(actnBatchWritePos_Reason, MainForm.dxbtnBatchWritePos_Reason);
  101. SetDxBtnAction(actnCopyBGLBlock, MainForm.dxbtnCopyBillsBlock);
  102. end;
  103. procedure TBGLFrame.actnBatchWritePos_ReasonExecute(Sender: TObject);
  104. begin
  105. FBGLData.BatchWritePos_Reason;
  106. end;
  107. procedure TBGLFrame.zaBGBillsGridSetCellText(Sender: TObject;
  108. const ACoord: TPoint; var Value: String);
  109. begin
  110. if SameText(Value, zgBGBills.Cells[ACoord.X, ACoord.Y].Text) then
  111. Abort;
  112. end;
  113. procedure TBGLFrame.actnCopyBGLBlockExecute(Sender: TObject);
  114. var
  115. iCount: Integer;
  116. begin
  117. if CheckMeasureEdition then
  118. begin
  119. zgBGL.Tag := 1;
  120. iCount := zgBGL.Selection.Bottom - zgBGL.Selection.Top;
  121. zgBGL.CopyToClipboard(zgBGL.Selection.Bounds);
  122. zgBGL.Selection.SelectRow(zgBGL.Selection.Top, zgBGL.Selection.Top + iCount - 1);
  123. end;
  124. end;
  125. procedure TBGLFrame.zgBGLCopy(Sender: TObject; const ABounds: TRect;
  126. var Allow: Boolean);
  127. begin
  128. Allow := TZJGrid(Sender).Tag = 0;
  129. if not Allow then
  130. begin
  131. CopyBGLBlock(ABounds);
  132. TZJGrid(Sender).Tag := 0;
  133. end;
  134. end;
  135. procedure TBGLFrame.CopyBGLBlock(ABounds: TRect);
  136. var
  137. Clipboard: TBGLClipboard;
  138. begin
  139. Clipboard := TBGLClipboard.Create(FBGLData);
  140. try
  141. Clipboard.Copy(ABounds.Bottom - ABounds.Top);
  142. finally
  143. Clipboard.Free;
  144. end;
  145. end;
  146. procedure TBGLFrame.PasteBGLBlock;
  147. var
  148. Clipboard: TBGLClipboard;
  149. begin
  150. Clipboard := TBGLClipboard.Create(FBGLData);
  151. try
  152. Clipboard.Paste;
  153. finally
  154. Clipboard.Free;
  155. end;
  156. end;
  157. procedure TBGLFrame.zgBGLPaste(Sender: TObject; const ABounds: TRect;
  158. var Allow: Boolean);
  159. begin
  160. if HasBGLBlockFormat then
  161. begin
  162. Allow := False;
  163. PasteBGLBlock;
  164. end;
  165. end;
  166. procedure TBGLFrame.actnCopyBGLBlockUpdate(Sender: TObject);
  167. begin
  168. if G_IsTest then
  169. TAction(Sender).Visible := True
  170. else
  171. TAction(Sender).Visible := False;
  172. end;
  173. end.