| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185 | unit BillsGatherFme;interfaceuses  BillsGatherDm, Globals, sdDB,  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,   Dialogs, ZJGrid, ExtCtrls, ZjGridDBA, ZjGridTreeDBA, ComCtrls, ToolWin,  XPMenu, sdGridDBA, JimPages;type  TBillsGatherFrame = class(TFrame)    pnlBillsGather: TPanel;    zgGclBills: TZJGrid;    pnlRelaXmj: TPanel;    pnlRelaXmjType: TPanel;    tbToolsButton: TToolBar;    tobtnDetailGcl: TToolButton;    sprBillsGather: TSplitter;    xpm: TXPMenu;    tobtnDetailDeal: TToolButton;    tobtnDetailBGL: TToolButton;    jpsRela: TJimPages;    jpsRelaDetailGcl: TJimPage;    jpsRelaDetailDeal: TJimPage;    jpsRelaDetailBGL: TJimPage;    zgDetailGcl: TZJGrid;    saDetailGcl: TsdGridDBA;    saDetailDeal: TsdGridDBA;    saDetailBGL: TsdGridDBA;    zgDetailBGL: TZJGrid;    zgDetailDeal: TZJGrid;    saGclBills: TsdGridDBA;    procedure zgGclBillsCellGetColor(Sender: TObject; ACoord: TPoint;      var AColor: TColor);    procedure tobtnDetailGclClick(Sender: TObject);  private    FBillsGatherData: TBillsGatherData;    FShowPhaseData: Boolean;    FShowPriceChange: Boolean;    procedure SetColumnVisible(const AColumn: string; AVisible: Boolean);    procedure SetShowPhaseData(const Value: Boolean);    procedure SetShowPriceChange(const Value: Boolean);  public    constructor Create(AProjectFrame: TFrame; ABillsGatherData: TBillsGatherData);    destructor Destroy; override;    procedure RefreshBills;    property ShowPriceChange: Boolean read FShowPriceChange write SetShowPriceChange;    property ShowPhaseData: Boolean read FShowPhaseData write SetShowPhaseData;  end;implementation{$R *.dfm}{ TBillsGatherFrame }constructor TBillsGatherFrame.Create(AProjectFrame: TFrame;  ABillsGatherData: TBillsGatherData);begin  inherited Create(AProjectFrame);  FBillsGatherData := ABillsGatherData;  saGclBills.DataView := FBillsGatherData.sdvGclBills;  saDetailGcl.DataView := FBillsGatherData.sdvDetailGclBills;  saDetailDeal.DataView := FBillsGatherData.sdvDetailDealBills;  saDetailBGL.DataView := FBillsGatherData.sdvDetailBGLBills;end;destructor TBillsGatherFrame.Destroy;begin  inherited;end;procedure TBillsGatherFrame.RefreshBills;begin  FBillsGatherData.RefreshBills;end;procedure TBillsGatherFrame.SetColumnVisible(const AColumn: string;  AVisible: Boolean);begin  if AVisible then    saGclBills.Columns.ColumnByName(AColumn).Width := 60  else    saGclBills.Columns.ColumnByName(AColumn).Width := 0;end;procedure TBillsGatherFrame.SetShowPhaseData(const Value: Boolean);begin  FShowPhaseData := Value;  SetColumnVisible('CurDealQuantity', FShowPhaseData);  SetColumnVisible('CurDealTotalPrice', FShowPhaseData);  SetColumnVisible('CurQcQuantity', FShowPhaseData);  SetColumnVisible('CurQcTotalPrice', FShowPhaseData);  SetColumnVisible('CurPcQuantity', FShowPhaseData and FShowPriceChange);  SetColumnVisible('CurPcTotalPrice', FShowPhaseData and FShowPriceChange);  SetColumnVisible('CurGatherQuantity', FShowPhaseData);  SetColumnVisible('CurGatherTotalPrice', FShowPhaseData);  SetColumnVisible('EndDealQuantity', FShowPhaseData);  SetColumnVisible('EndDealTotalPrice', FShowPhaseData);  SetColumnVisible('EndQcQuantity', FShowPhaseData);  SetColumnVisible('EndQcTotalPrice', FShowPhaseData);  SetColumnVisible('EndPcQuantity', FShowPhaseData and FShowPriceChange);  SetColumnVisible('EndPcTotalPrice', FShowPhaseData and FShowPriceChange);  SetColumnVisible('EndGatherQuantity', FShowPhaseData);  SetColumnVisible('EndGatherTotalPrice', FShowPhaseData);end;procedure TBillsGatherFrame.SetShowPriceChange(const Value: Boolean);begin  FShowPriceChange := Value;  SetColumnVisible('NewPrice', FShowPriceChange);  SetColumnVisible('CurPcQuantity', FShowPriceChange and FShowPhaseData);  SetColumnVisible('CurPcTotalPrice', FShowPriceChange and FShowPhaseData);  SetColumnVisible('EndPcQuantity', FShowPriceChange and FShowPhaseData);  SetColumnVisible('EndPcTotalPrice', FShowPriceChange and FShowPhaseData);end;procedure TBillsGatherFrame.zgGclBillsCellGetColor(Sender: TObject;  ACoord: TPoint; var AColor: TColor);  function CheckSimilarBills(ARow1, ARow2: Integer): Boolean;  var    bHasSame, bHasDiffer: Boolean;  begin    bHasSame := SameText(zgGclBills.Cells[1, ARow1].Text, zgGclBills.Cells[1, ARow2].Text);    bHasDiffer := (not SameText(zgGclBills.Cells[2, ARow1].Text, zgGclBills.Cells[2, ARow2].Text))               or (not SameText(zgGclBills.Cells[3, ARow1].Text, zgGclBills.Cells[3, ARow2].Text))               or (not SameText(zgGclBills.Cells[4, ARow1].Text, zgGclBills.Cells[4, ARow2].Text));    Result := bHasSame and bHasDiffer;  end;  function CheckOverRange(ARecIndex: Integer): Boolean;  var    Rec: TsdDataRecord;    fQuantity, fDealQuantity, fEndDealQuantity: Double;  begin    Rec := saGclBills.DataView.Records[ARecIndex];    Result := False;    if not Assigned(Rec) then Exit;    fDealQuantity := Rec.ValueByName('DealQuantity').AsFloat;    fQuantity := Rec.ValueByName('Quantity').AsFloat;    fEndDealQuantity := Rec.ValueByName('EndDealQuantity').AsFloat;    case SupportManager.ConfigInfo.OverRangeType of      0: Result := fEndDealQuantity > fQuantity;      1: Result := fEndDealQuantity > fDealQuantity;      2: Result := (fEndDealQuantity > fQuantity) or (fEndDealQuantity > fDealQuantity);    end;  end;var  bSimilarBills: Boolean;begin  if (ACoord.Y >= zgGclBills.FixedRowCount) then  begin    if ACoord.Y = zgGclBills.FixedRowCount then      bSimilarBills := CheckSimilarBills(ACoord.Y, ACoord.Y + 1)    else if ACoord.Y < zgGclBills.RowCount - zgGclBills.FixedRowCount then      bSimilarBills := CheckSimilarBills(ACoord.Y, ACoord.Y - 1) or          CheckSimilarBills(ACoord.Y, ACoord.Y + 1)    else      bSimilarBills := CheckSimilarBills(ACoord.Y, ACoord.Y - 1);    {if bSimilarBills then      AColor := $00646AFE;}     if bSimilarBills then       AColor := $0000FFFF; // »ÆÉ«     if CheckOverRange(ACoord.Y - zgGclBills.FixedRowCount) then       AColor := $00505AFF; // ºìÉ«  end;end;procedure TBillsGatherFrame.tobtnDetailGclClick(Sender: TObject);begin  jpsRela.ActivePageIndex := TToolButton(Sender).Tag;  tobtnDetailGcl.Down := tobtnDetailGcl.Tag = TToolButton(Sender).Tag;  tobtnDetailDeal.Down := tobtnDetailDeal.Tag = TToolButton(Sender).Tag;  tobtnDetailBGL.Down := tobtnDetailBGL.Tag = TToolButton(Sender).Tag;end;end.
 |