| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218 | unit BookmarkFme;interfaceuses  ProjectData, sdDB,  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, JimPages, ZJGrid, StdCtrls, JimLabels, ExtCtrls, sdGridDBA,  ActnList, dxBar;type  TBookmarkType = (bmtCompile, bmtMeasure);  TBookmarkFrame = class(TFrame)    jpsBookmark: TJimPages;    jpsBookmarkBills: TJimPage;    jpsBookmarkStage: TJimPage;    zgBillsBmk: TZJGrid;    labBillsBmkTitle: TJimGradLabel;    labStageBmkTitle: TJimGradLabel;    zgStageBmk: TZJGrid;    saBillsBMK: TsdGridDBA;    saStageBMK: TsdGridDBA;    pnlBillsMarkMemo: TPanel;    lblBillsMarkMemo: TLabel;    pnlStageMarkMemo: TPanel;    lblStageMarkMemo: TLabel;    mBillsMarkMemo: TMemo;    mStageMarkMemo: TMemo;    dxpmBookmark: TdxBarPopupMenu;    alBookmark: TActionList;    actnLocateBookmark: TAction;    procedure zgBillsBmkCurrentChanged(Sender: TObject; Col, Row: Integer);    procedure zgStageBmkCurrentChanged(Sender: TObject; Col, Row: Integer);    procedure mBillsMarkMemoExit(Sender: TObject);    procedure mStageMarkMemoExit(Sender: TObject);    procedure actnLocateBookmarkUpdate(Sender: TObject);    procedure actnLocateBookmarkExecute(Sender: TObject);    procedure zgBillsBmkMouseDown(Sender: TObject; Button: TMouseButton;      Shift: TShiftState; X, Y: Integer);    procedure dxpmBookmarkPopup(Sender: TObject);  private    FProjectData: TProjectData;    FBMType: TBookmarkType;    procedure AssignedBillsMarkMemo(ARow: Integer);    procedure AssignedStageMarkMemo(ARow: Integer);    procedure LocateLedgerBookmark;    procedure LocateMeasureBookmark;    function GetMemoText(AMemo: TMemo): string;    procedure SetBMType(const Value: TBookmarkType);  public    constructor Create(AProjectFrame: TFrame; AProjectData: TProjectData);    destructor Destroy; override;    procedure RefreshMarkMemo;    property BMType: TBookmarkType read FBMType write SetBMType;  end;implementationuses  Math, PhaseData, MainFrm, UtilMethods;{$R *.dfm}{ TBookmarkFrame }constructor TBookmarkFrame.Create(AProjectFrame: TFrame;  AProjectData: TProjectData);begin  inherited Create(AProjectFrame);  FProjectData := AProjectData;  saBillsBMK.DataView := FProjectData.BillsBookmarkData.sdvBillsBookmark;  AssignedBillsMarkMemo(zgBillsBmk.CurRow);  saStageBMK.DataView := FProjectData.BillsBookmarkData.sdvStageBookmark;  AssignedStageMarkMemo(zgStageBmk.CurRow);end;destructor TBookmarkFrame.Destroy;begin  inherited;end;procedure TBookmarkFrame.zgBillsBmkCurrentChanged(Sender: TObject; Col,  Row: Integer);begin  AssignedBillsMarkMemo(Row);end;function TBookmarkFrame.GetMemoText(AMemo: TMemo): string;var  i: Integer;begin  Result := '';  for i := 0 to AMemo.Lines.Count - 1 do    Result := Result + AMemo.Lines.Strings[i];end;procedure TBookmarkFrame.AssignedBillsMarkMemo(ARow: Integer);var  Rec: TsdDataRecord;begin  Rec := saBillsBMK.DataView.Records[ARow - 1];  if (ARow > 0) and Assigned(Rec) then    mBillsMarkMemo.Text := Rec.ValueByName('MarkMemo').AsString  else    mBillsMarkMemo.Text := '';  mBillsMarkMemo.ReadOnly := not ((ARow > 0) and Assigned(Rec));end;procedure TBookmarkFrame.AssignedStageMarkMemo(ARow: Integer);var  Rec, StageRec: TsdDataRecord;begin  Rec := saStageBMK.DataView.Records[ARow - 1];  if (ARow > 0) and Assigned(Rec) then  begin    StageRec := FProjectData.PhaseData.StageData.StageRecord(Rec.ValueByName('ID').AsInteger);    mStageMarkMemo.Text := StageRec.ValueByName('MarkMemo').AsString;  end  else    mStageMarkMemo.Text := '';  mStageMarkMemo.ReadOnly := not ((ARow > 0) and Assigned(Rec));end;procedure TBookmarkFrame.zgStageBmkCurrentChanged(Sender: TObject; Col,  Row: Integer);begin  AssignedStageMarkMemo(Row);end;procedure TBookmarkFrame.RefreshMarkMemo;begin  AssignedBillsMarkMemo(zgBillsBmk.CurRow);  AssignedStageMarkMemo(zgStageBmk.CurRow);end;procedure TBookmarkFrame.mBillsMarkMemoExit(Sender: TObject);var  Rec: TsdDataRecord;begin  if zgBillsBmk.CurRow = 0 then Exit;  Rec := saBillsBMK.DataView.Records[zgBillsBmk.CurRow - 1];  if Assigned(Rec) then    Rec.ValueByName('MarkMemo').AsString := GetMemoText(mBillsMarkMemo);end;procedure TBookmarkFrame.mStageMarkMemoExit(Sender: TObject);var  Rec, StageRec: TsdDataRecord;begin  if zgStageBmk.CurRow = 0 then Exit;  Rec := saStageBMK.DataView.Records[zgStageBmk.CurRow - 1];  if Assigned(Rec) then  begin    StageRec := FProjectData.PhaseData.StageData.StageRecord(Rec.ValueByName('ID').AsInteger);    StageRec.ValueByName('MarkMemo').AsString := GetMemoText(mStageMarkMemo);  end;end;procedure TBookmarkFrame.SetBMType(const Value: TBookmarkType);begin  FBMType := Value;  jpsBookmark.ActivePageIndex := Integer(FBMType);end;procedure TBookmarkFrame.actnLocateBookmarkUpdate(Sender: TObject);begin  if FBMType = bmtCompile then    TAction(Sender).Caption := '定位至台账分解'  else if FBMType = bmtMeasure then    TAction(Sender).Caption := '定位至计量台账';end;procedure TBookmarkFrame.actnLocateBookmarkExecute(Sender: TObject);begin  if FBMType = bmtCompile then    LocateLedgerBookmark  else if FBMType = bmtMeasure then    LocateMeasureBookmark;end;procedure TBookmarkFrame.LocateLedgerBookmark;var  Rec: TsdDataRecord;begin  Rec := saBillsBMK.DataView.Current;  TProjectData(FProjectData).BillsCompileData.sdvBillsCompile.LocateInControl(Rec);end;procedure TBookmarkFrame.LocateMeasureBookmark;var  Rec: TsdDataRecord;begin  Rec := saStageBMK.DataView.Current;  TProjectData(FProjectData).BillsMeasureData.sdvBillsMeasure.LocateInControl(Rec);end;procedure TBookmarkFrame.zgBillsBmkMouseDown(Sender: TObject;  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);begin  if Button = mbRight then    dxpmBookmark.PopupFromCursorPos;end;procedure TBookmarkFrame.dxpmBookmarkPopup(Sender: TObject);begin  SetDxBtnAction(actnLocateBookmark, MainForm.dxbtnLocateBookmark);end;end.
 |