BookmarkFme.pas 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. unit BookmarkFme;
  2. interface
  3. uses
  4. ProjectData, sdDB,
  5. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  6. Dialogs, JimPages, ZJGrid, StdCtrls, JimLabels, ExtCtrls, sdGridDBA,
  7. ActnList, dxBar;
  8. type
  9. TBookmarkType = (bmtCompile, bmtMeasure);
  10. TBookmarkFrame = class(TFrame)
  11. jpsBookmark: TJimPages;
  12. jpsBookmarkBills: TJimPage;
  13. jpsBookmarkStage: TJimPage;
  14. zgBillsBmk: TZJGrid;
  15. labBillsBmkTitle: TJimGradLabel;
  16. labStageBmkTitle: TJimGradLabel;
  17. zgStageBmk: TZJGrid;
  18. saBillsBMK: TsdGridDBA;
  19. saStageBMK: TsdGridDBA;
  20. pnlBillsMarkMemo: TPanel;
  21. lblBillsMarkMemo: TLabel;
  22. pnlStageMarkMemo: TPanel;
  23. lblStageMarkMemo: TLabel;
  24. mBillsMarkMemo: TMemo;
  25. mStageMarkMemo: TMemo;
  26. dxpmBookmark: TdxBarPopupMenu;
  27. alBookmark: TActionList;
  28. actnLocateBookmark: TAction;
  29. procedure zgBillsBmkCurrentChanged(Sender: TObject; Col, Row: Integer);
  30. procedure zgStageBmkCurrentChanged(Sender: TObject; Col, Row: Integer);
  31. procedure mBillsMarkMemoExit(Sender: TObject);
  32. procedure mStageMarkMemoExit(Sender: TObject);
  33. procedure actnLocateBookmarkUpdate(Sender: TObject);
  34. procedure actnLocateBookmarkExecute(Sender: TObject);
  35. procedure zgBillsBmkMouseDown(Sender: TObject; Button: TMouseButton;
  36. Shift: TShiftState; X, Y: Integer);
  37. procedure dxpmBookmarkPopup(Sender: TObject);
  38. private
  39. FProjectData: TProjectData;
  40. FBMType: TBookmarkType;
  41. procedure AssignedBillsMarkMemo(ARow: Integer);
  42. procedure AssignedStageMarkMemo(ARow: Integer);
  43. procedure LocateLedgerBookmark;
  44. procedure LocateMeasureBookmark;
  45. function GetMemoText(AMemo: TMemo): string;
  46. procedure SetBMType(const Value: TBookmarkType);
  47. public
  48. constructor Create(AProjectFrame: TFrame; AProjectData: TProjectData);
  49. destructor Destroy; override;
  50. procedure RefreshMarkMemo;
  51. property BMType: TBookmarkType read FBMType write SetBMType;
  52. end;
  53. implementation
  54. uses
  55. Math, PhaseData, MainFrm, UtilMethods;
  56. {$R *.dfm}
  57. { TBookmarkFrame }
  58. constructor TBookmarkFrame.Create(AProjectFrame: TFrame;
  59. AProjectData: TProjectData);
  60. begin
  61. inherited Create(AProjectFrame);
  62. FProjectData := AProjectData;
  63. saBillsBMK.DataView := FProjectData.BillsBookmarkData.sdvBillsBookmark;
  64. AssignedBillsMarkMemo(zgBillsBmk.CurRow);
  65. saStageBMK.DataView := FProjectData.BillsBookmarkData.sdvStageBookmark;
  66. AssignedStageMarkMemo(zgStageBmk.CurRow);
  67. end;
  68. destructor TBookmarkFrame.Destroy;
  69. begin
  70. inherited;
  71. end;
  72. procedure TBookmarkFrame.zgBillsBmkCurrentChanged(Sender: TObject; Col,
  73. Row: Integer);
  74. begin
  75. AssignedBillsMarkMemo(Row);
  76. end;
  77. function TBookmarkFrame.GetMemoText(AMemo: TMemo): string;
  78. var
  79. i: Integer;
  80. begin
  81. Result := '';
  82. for i := 0 to AMemo.Lines.Count - 1 do
  83. Result := Result + AMemo.Lines.Strings[i];
  84. end;
  85. procedure TBookmarkFrame.AssignedBillsMarkMemo(ARow: Integer);
  86. var
  87. Rec: TsdDataRecord;
  88. begin
  89. Rec := saBillsBMK.DataView.Records[ARow - 1];
  90. if (ARow > 0) and Assigned(Rec) then
  91. mBillsMarkMemo.Text := Rec.ValueByName('MarkMemo').AsString
  92. else
  93. mBillsMarkMemo.Text := '';
  94. mBillsMarkMemo.ReadOnly := not ((ARow > 0) and Assigned(Rec));
  95. end;
  96. procedure TBookmarkFrame.AssignedStageMarkMemo(ARow: Integer);
  97. var
  98. Rec, StageRec: TsdDataRecord;
  99. begin
  100. Rec := saStageBMK.DataView.Records[ARow - 1];
  101. if (ARow > 0) and Assigned(Rec) then
  102. begin
  103. StageRec := FProjectData.PhaseData.StageData.StageRecord(Rec.ValueByName('ID').AsInteger);
  104. mStageMarkMemo.Text := StageRec.ValueByName('MarkMemo').AsString;
  105. end
  106. else
  107. mStageMarkMemo.Text := '';
  108. mStageMarkMemo.ReadOnly := not ((ARow > 0) and Assigned(Rec));
  109. end;
  110. procedure TBookmarkFrame.zgStageBmkCurrentChanged(Sender: TObject; Col,
  111. Row: Integer);
  112. begin
  113. AssignedStageMarkMemo(Row);
  114. end;
  115. procedure TBookmarkFrame.RefreshMarkMemo;
  116. begin
  117. AssignedBillsMarkMemo(zgBillsBmk.CurRow);
  118. AssignedStageMarkMemo(zgStageBmk.CurRow);
  119. end;
  120. procedure TBookmarkFrame.mBillsMarkMemoExit(Sender: TObject);
  121. var
  122. Rec: TsdDataRecord;
  123. begin
  124. if zgBillsBmk.CurRow = 0 then Exit;
  125. Rec := saBillsBMK.DataView.Records[zgBillsBmk.CurRow - 1];
  126. if Assigned(Rec) then
  127. Rec.ValueByName('MarkMemo').AsString := GetMemoText(mBillsMarkMemo);
  128. end;
  129. procedure TBookmarkFrame.mStageMarkMemoExit(Sender: TObject);
  130. var
  131. Rec, StageRec: TsdDataRecord;
  132. begin
  133. if zgStageBmk.CurRow = 0 then Exit;
  134. Rec := saStageBMK.DataView.Records[zgStageBmk.CurRow - 1];
  135. if Assigned(Rec) then
  136. begin
  137. StageRec := FProjectData.PhaseData.StageData.StageRecord(Rec.ValueByName('ID').AsInteger);
  138. StageRec.ValueByName('MarkMemo').AsString := GetMemoText(mStageMarkMemo);
  139. end;
  140. end;
  141. procedure TBookmarkFrame.SetBMType(const Value: TBookmarkType);
  142. begin
  143. FBMType := Value;
  144. jpsBookmark.ActivePageIndex := Integer(FBMType);
  145. end;
  146. procedure TBookmarkFrame.actnLocateBookmarkUpdate(Sender: TObject);
  147. begin
  148. if FBMType = bmtCompile then
  149. TAction(Sender).Caption := '定位至台账分解'
  150. else if FBMType = bmtMeasure then
  151. TAction(Sender).Caption := '定位至计量台账';
  152. end;
  153. procedure TBookmarkFrame.actnLocateBookmarkExecute(Sender: TObject);
  154. begin
  155. if FBMType = bmtCompile then
  156. LocateLedgerBookmark
  157. else if FBMType = bmtMeasure then
  158. LocateMeasureBookmark;
  159. end;
  160. procedure TBookmarkFrame.LocateLedgerBookmark;
  161. var
  162. Rec: TsdDataRecord;
  163. begin
  164. Rec := saBillsBMK.DataView.Current;
  165. TProjectData(FProjectData).BillsCompileData.sdvBillsCompile.LocateInControl(Rec);
  166. end;
  167. procedure TBookmarkFrame.LocateMeasureBookmark;
  168. var
  169. Rec: TsdDataRecord;
  170. begin
  171. Rec := saStageBMK.DataView.Current;
  172. TProjectData(FProjectData).BillsMeasureData.sdvBillsMeasure.LocateInControl(Rec);
  173. end;
  174. procedure TBookmarkFrame.zgBillsBmkMouseDown(Sender: TObject;
  175. Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  176. begin
  177. if Button = mbRight then
  178. dxpmBookmark.PopupFromCursorPos;
  179. end;
  180. procedure TBookmarkFrame.dxpmBookmarkPopup(Sender: TObject);
  181. begin
  182. SetDxBtnAction(actnLocateBookmark, MainForm.dxbtnLocateBookmark);
  183. end;
  184. end.