123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223 |
- unit PhaseCompareFme;
- interface
- uses
- PhaseCompareDm, BillsTree,
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, ZJGrid, ExtCtrls, sdGridDBA, sdGridTreeDBA;
- type
- TPhaseCompareFrame = class(TFrame)
- stdPhaseCompare: TsdGridTreeDBA;
- pnlPhaseCompare: TPanel;
- zgPhaseCompare: TZJGrid;
- procedure zgPhaseCompareCellGetColor(Sender: TObject; ACoord: TPoint;
- var AColor: TColor);
- private
- FPhaseCompareData: TPhaseCompareData;
- FCompareStageCount: Integer;
- procedure ClearStageColumns;
- procedure InitStageColumns;
- procedure BeginExpandNode;
- procedure EndExpandNode;
- procedure SetCompareStageCount(const Value: Integer);
- public
- constructor Create(AProjectFrame: TFrame; PhaseCompareData: TPhaseCompareData);
- procedure ExpandNodeTo(ALevel: Integer);
- procedure ExpandXmjNode;
- procedure ExpandCurPhase;
- property CompareStageCount: Integer read FCompareStageCount write SetCompareStageCount;
- end;
- implementation
- uses
- ProjectData, PhaseData, sdIDTree, UtilMethods;
- {$R *.dfm}
- { TPhaseCompareFrame }
- procedure TPhaseCompareFrame.BeginExpandNode;
- begin
- zgPhaseCompare.OnCellGetColor := nil;
- BeginUpdateWindow(zgPhaseCompare.Handle);
- stdPhaseCompare.DisableControl;
- end;
- procedure TPhaseCompareFrame.ClearStageColumns;
- var
- iStage: Integer;
- vCol: TsdGridColumn;
- begin
- for iStage := 0 to FCompareStageCount - 1 do
- begin
- vCol := stdPhaseCompare.Column('Quantity' + IntToStr(iStage));
- if Assigned(vCol) then
- stdPhaseCompare.Columns.Delete(vCol.Index);
- vCol := stdPhaseCompare.Column('TotalPrice' + IntToStr(iStage));
- if Assigned(vCol) then
- stdPhaseCompare.Columns.Delete(vCol.Index);
- end;
- end;
- constructor TPhaseCompareFrame.Create(AProjectFrame: TFrame;
- PhaseCompareData: TPhaseCompareData);
- begin
- inherited Create(AProjectFrame);
- FPhaseCompareData := PhaseCompareData;
- FCompareStageCount := 0;
- with TProjectData(FPhaseCompareData.ProjectData).PhaseData do
- if Active then
- CompareStageCount := PhaseProperty.AuditCount + 1;
- stdPhaseCompare.IDTree := FPhaseCompareData.CompareTree;
- end;
- procedure TPhaseCompareFrame.EndExpandNode;
- begin
- stdPhaseCompare.EnableControl;
- EndUpdateWindow(zgPhaseCompare.Handle);
- zgPhaseCompare.OnCellGetColor := zgPhaseCompareCellGetColor;
- zgPhaseCompare.Invalidate;
- end;
- procedure TPhaseCompareFrame.ExpandXmjNode;
- begin
- BeginExpandNode;
- try
- FPhaseCompareData.ExpandXmjNode;
- finally
- EndExpandNode;
- end;
- end;
- procedure TPhaseCompareFrame.ExpandNodeTo(ALevel: Integer);
- begin
- BeginExpandNode;
- try
- FPhaseCompareData.ExpandNodeTo(ALevel);
- finally
- EndExpandNode;
- end;
- end;
- procedure TPhaseCompareFrame.InitStageColumns;
- function StageName(AStageIndex: Integer): string;
- begin
- if AStageIndex = 0 then
- Result := '原报'
- else
- Result := Format('%d 审', [AStageIndex]);
- end;
- procedure AddStageColumns(AStageIndex: Integer);
- var
- vColumn: TsdGridColumn;
- begin
- vColumn := stdPhaseCompare.Columns.Add;
- vColumn.FieldName := Format('Quantity%d', [AStageIndex]);
- vColumn.Title.Caption := Format('%s|数量', [StageName(AStageIndex)]);
- vColumn.Title.CaptionAcrossCols := '2';
- vColumn.Width := 60;
- vColumn.Alignment :=taRightJustify;
- vColumn.ReadOnly := True;
-
- vColumn := stdPhaseCompare.Columns.Add;
- vColumn.FieldName := Format('TotalPrice%d', [AStageIndex]);
- vColumn.Title.Caption := Format('|金额', [StageName(AStageIndex)]);
- vColumn.Width := 60;
- vColumn.Alignment := taRightJustify;
- vColumn.ReadOnly := True;
- end;
- var
- iStage: Integer;
- begin
- for iStage := 0 to CompareStageCount - 1 do
- AddStageColumns(iStage);
- end;
- procedure TPhaseCompareFrame.SetCompareStageCount(const Value: Integer);
- begin
- ClearStageColumns;
- FCompareStageCount := Value;
- InitStageColumns;
- end;
- procedure TPhaseCompareFrame.zgPhaseCompareCellGetColor(Sender: TObject;
- ACoord: TPoint; var AColor: TColor);
- function CheckSameQuantity: Boolean;
- var
- iCol: Integer;
- begin
- iCol := 5;
- Result := True;
- while Result and (iCol + 2 < zgPhaseCompare.ColCount) do
- begin
- with zgPhaseCompare do
- Result := Cells[iCol, ACoord.Y].Text = Cells[iCol + 2, ACoord.Y].Text;
- Inc(iCol, 2);
- end;
- end;
- function CheckSameTotalPrice: Boolean;
- var
- iCol: Integer;
- begin
- iCol := 6;
- Result := True;
- while Result and (iCol + 2 < zgPhaseCompare.ColCount) do
- begin
- with zgPhaseCompare do
- Result := Cells[iCol, ACoord.Y].Text = Cells[iCol + 2, ACoord.Y].Text;
- Inc(iCol, 2);
- end;
- end;
- var
- stnNode: TsdIDTreeNode;
- iCreatePhaseID: Integer;
- begin
- if ACoord.Y > stdPhaseCompare.IDTree.Count + 1 then Exit;
- stnNode := stdPhaseCompare.IDTree.Items[ACoord.Y - 2];
- iCreatePhaseID := stnNode.Rec.ValueByName('CreatePhaseID').AsInteger;
- // 根据层次底色不同
- if stnNode.ParentID = 1 then
- AColor := $00FBCAC4
- else if (stnNode.Rec.ValueByName('B_Code').AsString = '') and (stnNode.Level > 0) then
- AColor := $00F9E8DF;
- // 根据节点创建期数底色不同
- if iCreatePhaseID > 0 then
- begin
- if iCreatePhaseID > TProjectData(FPhaseCompareData.ProjectData).PhaseIndex then
- AColor := clSilver
- else if iCreatePhaseID = TProjectData(FPhaseCompareData.ProjectData).PhaseIndex then
- AColor := clInfoBk;
- end;
- // 各阶段数量或者金额不等,该行底色标红
- if (zgPhaseCompare.ColCount > 7) and not stnNode.HasChildren then
- begin
- if not CheckSameQuantity or not CheckSameTotalPrice then
- AColor := $00646AFE;
- end;
- end;
- procedure TPhaseCompareFrame.ExpandCurPhase;
- begin
- BeginExpandNode;
- try
- FPhaseCompareData.ExpandCurPhase;
- finally
- EndExpandNode;
- end;
- end;
- end.
|