unit BillsGatherFme; interface uses 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.