| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464 | 
							- unit ProjGatherSelectFme;
 
- interface
 
- uses
 
-   sdIDTree, sdDB,
 
-   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 
-   Dialogs, StdCtrls, ExtCtrls, sdGridDBA, sdGridTreeDBA, ZJGrid, ZJCells;
 
- type
 
-   TAfterSelectEvent = procedure of Object;
 
-   TProjGatherSelectFrame = class(TFrame)
 
-     zgSelectProject: TZJGrid;
 
-     stdSelectProject: TsdGridTreeDBA;
 
-     pnlProjects: TPanel;
 
-     pnlProjectsTitle: TPanel;
 
-     lblProjectList: TLabel;
 
-     pnlProjLeft: TPanel;
 
-     pnlProjRight: TPanel;
 
-     pnlProjBottom: TPanel;
 
-     pnlResults: TPanel;
 
-     pnlResultTitle: TPanel;
 
-     lblResult: TLabel;
 
-     zgResult: TZJGrid;
 
-     pnlResultLeft: TPanel;
 
-     pnlResultBottom: TPanel;
 
-     pnlResultRight: TPanel;
 
-     procedure zgSelectProjectGetCellText(Sender: TObject;
 
-       const ACoord: TPoint; var Value: String; DisplayText: Boolean);
 
-     procedure zgSelectProjectSetCellText(Sender: TObject;
 
-       const ACoord: TPoint; var Value: String; DisplayText: Boolean);
 
-     procedure zgSelectProjectCellTextChanged(Sender: TObject; Col,
 
-       Row: Integer);
 
-     procedure zgSelectProjectDrawCellText(ACanvas: TCanvas;
 
-       const ARect: TRect; const ACoord: TPoint; AGrid: TZJGrid;
 
-       const Text: String; var ADefaultDraw: Boolean);
 
-     procedure zgResultGetCellText(Sender: TObject; const ACoord: TPoint;
 
-       var Value: String; DisplayText: Boolean);
 
-     procedure zgResultSetCellText(Sender: TObject; const ACoord: TPoint;
 
-       var Value: String; DisplayText: Boolean);
 
-     procedure zgSelectProjectCellGetColor(Sender: TObject; ACoord: TPoint;
 
-       var AColor: TColor);
 
-   private
 
-     FProjectID: Integer;
 
-     FValidProjs: TList;
 
-     FSelectProjs: TList;
 
-     FSpecialProjTypes: TStrings;
 
-     FSpecialProjIDs: array of Integer;
 
-     FMarkedProjs: TList;
 
-     FAfterSelectProject: TAfterSelectEvent;
 
-     function HasSelect(AProjectID: Integer): Boolean;
 
-     procedure AddProjs(ANode: TsdIDTreeNode);
 
-     procedure RemoveProjs(ANode: TsdIDTreeNode);
 
-     procedure AssignSelectTenders;
 
-     function GetTopParent: TsdIDTreeNode;
 
-     procedure AddValidProject(ANode: TsdIDTreeNode);
 
-     procedure FilterValidProject;
 
-     function IsValidProj(AID: Integer): Boolean;
 
-     procedure DoOnFilterRecord(ARecord: TsdDataRecord; var AAllow: Boolean);
 
-   public
 
-     constructor Create(AProjectID: Integer; ASpecialProjTypes: TStrings);
 
-     destructor Destroy; override;
 
-     procedure LoadHistorySelects(AProjs: TList);
 
-     procedure AssignResult(AProjs: TList);
 
-     procedure ClearMarkedProj;
 
-     function CheckProjPhaseValid(APhaseIndex: Integer): Boolean;
 
-     property AfterSelectProject: TAfterSelectEvent read FAfterSelectProject write FAfterSelectProject;
 
-   end;
 
- implementation
 
- uses
 
-   Globals, GatherProjInfo, MainFrm, Math, ZhAPI;
 
- {$R *.dfm}
 
- { TProjGatherSelectFrame }
 
- procedure TProjGatherSelectFrame.AddProjs(ANode: TsdIDTreeNode);
 
- var
 
-   iChild: Integer;
 
- begin
 
-   if FSelectProjs.IndexOf(Pointer(ANode.ID)) = -1 then
 
-     FSelectProjs.Add(Pointer(ANode.id));
 
-   for iChild := 0 to ANode.ChildCount - 1 do
 
-     AddProjs(ANode.ChildNodes[iChild]);
 
- end;
 
- procedure TProjGatherSelectFrame.AddValidProject(ANode: TsdIDTreeNode);
 
- var
 
-   iChild: Integer;
 
- begin
 
-   FValidProjs.Add(ANode);
 
-   for iChild := 0 to ANode.ChildCount - 1 do
 
-     AddValidProject(ANode.ChildNodes[iChild]);
 
- end;
 
- procedure TProjGatherSelectFrame.AssignSelectTenders;
 
-   procedure InitResultGrid;
 
-   var
 
-     i: Integer;
 
-   begin
 
-     zgResult.ColCount := 2;
 
-     zgResult.RowCount := 1;
 
-     zgResult.Cells[1, 0].Text := 'ËùÑ¡ÏîÄ¿';
 
-     zgResult.ColWidths[1] := 308;
 
-     if Assigned(FSpecialProjTypes) then
 
-     begin
 
-       zgResult.ColWidths[1] := 308 - (Min(FSpecialProjTypes.Count, 2)*45);
 
-       for i := 0 to FSpecialProjTypes.Count - 1 do
 
-       begin
 
-         zgResult.ColCount := zgResult.ColCount + 1;
 
-         zgResult.Cells[2+i, 0].Text := FSpecialProjTypes.Strings[i];
 
-         zgResult.ColWidths[2+i] := 45;
 
-         zgResult.CellClass.Cols[2+i] := TZjCheckBoxCell;
 
-       end;
 
-     end;
 
-   end;
 
- var
 
-   stnNode: TsdIDTreeNode;
 
-   i, iProjectID: Integer;
 
- begin
 
-   InitResultGrid;
 
-   for i := 0 to FSelectProjs.Count - 1 do
 
-   begin
 
-     iProjectID := Integer(FSelectProjs.Items[i]);
 
-     stnNode := stdSelectProject.IDTree.FindNode(iProjectID);
 
-     if stnNode.Rec.ValueByName('Type').AsInteger = 1 then
 
-     begin
 
-       zgResult.RowCount := zgResult.RowCount + 1;
 
-       zgResult.Cells[1, zgResult.RowCount - 1].Text :=
 
-         stnNode.Rec.ValueByName('Name').AsString;
 
-       zgResult.Cells[1, zgResult.RowCount - 1].Align := gaCenterLeft;
 
-       zgResult.Rows[zgResult.RowCount - 1].Data := stnNode;
 
-     end;
 
-   end;
 
- end;
 
- constructor TProjGatherSelectFrame.Create(AProjectID: Integer;
 
-   ASpecialProjTypes: TStrings);
 
- var
 
-   i: Integer;
 
- begin
 
-   inherited Create(nil);  
 
-   FMarkedProjs := TList.Create;
 
-   FSelectProjs := TList.Create;
 
-   FProjectID := AProjectID;
 
-   FValidProjs := TList.Create;
 
-   // È¡Ïû¹ýÂË
 
-   //FilterValidProject;
 
-   //ProjectManager.sdvProjectsSpare.OnFilterRecord := DoOnFilterRecord;
 
-   ProjectManager.sdvProjectsSpare.Filtered := True;
 
-   stdSelectProject.DataView := ProjectManager.sdvProjectsSpare;
 
-   FSpecialProjTypes := ASpecialProjTypes;
 
-   if FSpecialProjTypes <> nil then
 
-   begin
 
-     SetLength(FSpecialProjIDs, FSpecialProjTypes.Count);
 
-     for i := 0 to ASpecialProjTypes.Count - 1 do
 
-       FSpecialProjIDs[i] := -1;
 
-   end;
 
- end;
 
- destructor TProjGatherSelectFrame.Destroy;
 
- begin
 
-   //ProjectManager.sdvProjectsSpare.Filtered := False;
 
-   //ProjectManager.sdvProjectsSpare.OnFilterRecord := nil;
 
-   FValidProjs.Free;
 
-   FSelectProjs.Free;
 
-   FMarkedProjs.Free;
 
-   inherited;
 
- end;
 
- procedure TProjGatherSelectFrame.DoOnFilterRecord(ARecord: TsdDataRecord;
 
-   var AAllow: Boolean);
 
- begin
 
-   AAllow := Assigned(ARecord) and IsValidProj(ARecord.ValueByName('ID').AsInteger);
 
- end;
 
- procedure TProjGatherSelectFrame.FilterValidProject;
 
- var
 
-   vTopParent: TsdIDTreeNode;
 
-   i: Integer;
 
- begin
 
-   vTopParent := GetTopParent;
 
-   AddValidProject(vTopParent);
 
- end;
 
- function TProjGatherSelectFrame.GetTopParent: TsdIDTreeNode;
 
- begin
 
-   Result := ProjectManager.ProjectsTree.FindNode(FProjectID);
 
-   while Assigned(Result.Parent) do
 
-     Result := Result.Parent;
 
- end;
 
- function TProjGatherSelectFrame.HasSelect(AProjectID: Integer): Boolean;
 
- begin
 
-   Result := FSelectProjs.IndexOf(Pointer(AProjectID)) <> -1;
 
- end;
 
- function TProjGatherSelectFrame.IsValidProj(AID: Integer): Boolean;
 
- var
 
-   i: Integer;
 
-   vNode: TsdIDTreeNode;
 
- begin
 
-   Result := False;
 
-   for i := 0 to FValidProjs.Count - 1 do
 
-   begin
 
-     vNode := TsdIDTreeNode(FValidProjs.Items[i]);
 
-     if vNode.ID = AID then
 
-     begin
 
-       Result := True;
 
-       Break;
 
-     end;
 
-   end;
 
- end;
 
- procedure TProjGatherSelectFrame.LoadHistorySelects(AProjs: TList);
 
- var
 
-   i: Integer;
 
-   vGatherProjInfo: TGatherProjInfo;
 
- begin
 
-   for i := 0 to AProjs.Count - 1 do
 
-   begin
 
-     vGatherProjInfo := TGatherProjInfo(AProjs.Items[i]);
 
-     FSelectProjs.Add(Pointer(vGatherProjInfo.ProjectID));
 
-     if Assigned(FSpecialProjTypes) then
 
-     begin
 
-       if (vGatherProjInfo.ProjType > 0) and (vGatherProjInfo.ProjType <= FSpecialProjTypes.Count) then
 
-         FSpecialProjIDs[vGatherProjInfo.ProjType-1] := vGatherProjInfo.ProjectID;
 
-     end;
 
-   end;
 
-   AssignSelectTenders;
 
- end;
 
- procedure TProjGatherSelectFrame.RemoveProjs(ANode: TsdIDTreeNode);
 
- var
 
-   iChild: Integer;
 
-   i: Integer;
 
- begin
 
-   if FSelectProjs.IndexOf(Pointer(ANode.ID)) <> -1 then
 
-   begin
 
-     FSelectProjs.Remove(Pointer(ANode.id));
 
-     for i := Low(FSpecialProjIDs) to High(FSpecialProjIDs) do
 
-       if FSpecialProjIDs[i] = ANode.ID then
 
-         FSpecialProjIDs[i] := -1;
 
-   end;
 
-   for iChild := 0 to ANode.ChildCount - 1 do
 
-     RemoveProjs(ANode.ChildNodes[iChild]);
 
- end;
 
- procedure TProjGatherSelectFrame.zgSelectProjectGetCellText(
 
-   Sender: TObject; const ACoord: TPoint; var Value: String;
 
-   DisplayText: Boolean);
 
- var
 
-   stnNode: TsdIDTreeNode;
 
- begin
 
-   if ACoord.X = 1 then
 
-   begin
 
-     stnNode := stdSelectProject.IDTree.Items[ACoord.Y - 1];
 
-     if Assigned(stnNode) and HasSelect(stnNode.ID) then
 
-       Value := 'True';
 
-   end;
 
- end;
 
- procedure TProjGatherSelectFrame.zgSelectProjectSetCellText(
 
-   Sender: TObject; const ACoord: TPoint; var Value: String;
 
-   DisplayText: Boolean);
 
- var
 
-   stnNode: TsdIDTreeNode;
 
- begin
 
-   if ACoord.X = 1 then
 
-   begin
 
-     stnNode := stdSelectProject.IDTree.Items[ACoord.Y - 1];
 
-     if Value = 'True' then
 
-       AddProjs(stnNode)
 
-     else
 
-       RemoveProjs(stnNode);
 
-   end;
 
-   zgSelectProject.InvalidateCol(1);
 
- end;
 
- procedure TProjGatherSelectFrame.zgSelectProjectCellTextChanged(
 
-   Sender: TObject; Col, Row: Integer);
 
- begin
 
-   if (Col = 1) then
 
-   begin
 
-     AssignSelectTenders;
 
-     if Assigned(FAfterSelectProject) then
 
-       FAfterSelectProject;
 
-   end;
 
- end;
 
- procedure TProjGatherSelectFrame.zgSelectProjectDrawCellText(
 
-   ACanvas: TCanvas; const ARect: TRect; const ACoord: TPoint;
 
-   AGrid: TZJGrid; const Text: String; var ADefaultDraw: Boolean);
 
-   procedure GetBitmap(AImage: TBitmap);
 
-   begin
 
-     with stdSelectProject.IDTree.Items[ACoord.Y - 1] do
 
-       if Rec.ValueByName('Type').AsInteger = 0 then
 
-         if Expanded and HasChildren then
 
-           MainForm.Images.GetBitmap(34, AImage)
 
-         else
 
-           MainForm.Images.GetBitmap(34, AImage)
 
-       else
 
-         MainForm.Images.GetBitmap(11, AImage);
 
-   end;
 
- const
 
-   rIconWidth = 16;
 
-   rIconHeight = 16;
 
- var
 
-   Img: TBitmap;
 
-   Cell: TZjCell;
 
-   rImg: TRect;
 
- begin
 
-  if (ACoord.X = 2) and (ACoord.Y > zgSelectProject.FixedRowCount - 1) then
 
-   begin
 
-     Cell := zgSelectProject.Cells[ACoord.X, ACoord.Y];
 
-     Img := TBitmap.Create;
 
-     try
 
-       GetBitmap(Img);
 
-       case Cell.Align of
 
-         gaTopLeft, gaTopCenter, gaTopRight:
 
-           rImg := Rect(ARect.Left + 2, ARect.Top, ARect.Left + rIconWidth, ARect.Top + rIconHeight);
 
-         gaCenterLeft, gaCenterCenter, gaCenterRight:
 
-           rImg := Rect(ARect.Left + 2, ARect.Top + (ARect.Bottom - ARect.Top - rIconHeight) div 2, ARect.Left + rIconWidth, ARect.Bottom - (ARect.Bottom - ARect.Top - rIconHeight) div 2);
 
-         gaBottomLeft, gaBottomCenter, gaBottomRight:
 
-           rImg := Rect(ARect.Left + 2, ARect.Bottom - rIconHeight, ARect.Left + rIconWidth, ARect.Bottom);
 
-       end;
 
-       ACanvas.StretchDraw(rImg, Img);
 
-       WriteText(ACanvas, Rect(ARect.Left + rIconWidth, ARect.Top, ARect.Right, ARect.Bottom)
 
-         , 2, 2, Text, Cell.Align, False);
 
-       ADefaultDraw := False;
 
-     finally
 
-       Img.Free;
 
-     end;
 
-   end;
 
- end;
 
- procedure TProjGatherSelectFrame.zgResultGetCellText(Sender: TObject;
 
-   const ACoord: TPoint; var Value: String; DisplayText: Boolean);
 
- begin
 
-   if (ACoord.X > 1) and (ACoord.Y > 0) then
 
-   begin
 
-     if Assigned(zgResult.Rows[ACoord.Y].Data) and (TsdIDTreeNode(zgResult.Rows[ACoord.Y].Data).ID = FSpecialProjIDs[ACoord.X-2]) then
 
-       Value := 'True'
 
-     else
 
-       Value := 'False';
 
-   end;
 
- end;
 
- procedure TProjGatherSelectFrame.zgResultSetCellText(Sender: TObject;
 
-   const ACoord: TPoint; var Value: String; DisplayText: Boolean);
 
- var
 
-   iProjID, i: Integer;
 
-   stnNode: TsdIDTreeNode;
 
- begin
 
-   if (ACoord.X > 1) and (ACoord.Y > 0) then
 
-   begin
 
-     stnNode := TsdIDTreeNode(zgResult.Rows[ACoord.Y].Data);
 
-     iProjID := stnNode.ID;
 
-     if FSpecialProjIDs[ACoord.X-2] <> iProjID then
 
-     begin
 
-       for i := Low(FSpecialProjIDs) to High(FSpecialProjIDs) do
 
-       begin
 
-         if FSpecialProjIDs[i] = iProjID then
 
-           FSpecialProjIDs[i] := -1
 
-       end;
 
-       FSpecialProjIDs[ACoord.X-2] := iProjID;
 
-     end
 
-     else
 
-       FSpecialProjIDs[ACoord.X-2] := -1;
 
-     for i := 0 to FSpecialProjTypes.Count - 1 do
 
-       zgResult.InvalidateCol(i+2);
 
-   end;
 
- end;
 
- procedure TProjGatherSelectFrame.AssignResult(AProjs: TList);
 
-   function SpecialProjType(AID: Integer): Integer;
 
-   var
 
-     i: Integer;
 
-   begin
 
-     Result := 0;
 
-     for i := Low(FSpecialProjIDs) to High(FSpecialProjIDs) do
 
-     begin
 
-       if AID = FSpecialProjIDs[i] then
 
-       begin
 
-         Result := i+1;
 
-         Break;
 
-       end;
 
-     end;
 
-   end;
 
- var
 
-   iRow: Integer;
 
-   stnNode: TsdIDTreeNode;
 
-   vGatherProj: TGatherProjInfo;
 
- begin
 
-   AProjs.Clear;
 
-   for iRow := 1 to zgResult.RowCount - 1 do
 
-   begin
 
-     stnNode := TsdIDTreeNode(zgResult.Rows[iRow].Data);
 
-     vGatherProj := TGatherProjInfo.Create(stnNode, -1, SpecialProjType(stnNode.ID));
 
-     AProjs.Add(vGatherProj);
 
-   end;
 
- end;
 
- function TProjGatherSelectFrame.CheckProjPhaseValid(
 
-   APhaseIndex: Integer): Boolean;
 
- var
 
-   iRow: Integer;
 
-   stnNode: TsdIDTreeNode;
 
- begin
 
-   FMarkedProjs.Clear;
 
-   for iRow := 1 to zgResult.RowCount - 1 do
 
-   begin
 
-     stnNode := TsdIDTreeNode(zgResult.Rows[iRow].Data);
 
-     if stnNode.Rec.ValueByName('PhaseCount').AsInteger < APhaseIndex then
 
-       FMarkedProjs.Add(Pointer(stnNode.ID));
 
-   end;
 
-   Result := FMarkedProjs.Count = 0;
 
-   zgSelectProject.Invalidate;
 
- end;
 
- procedure TProjGatherSelectFrame.zgSelectProjectCellGetColor(
 
-   Sender: TObject; ACoord: TPoint; var AColor: TColor);
 
- var
 
-   vProj: TsdIDTreeNode;
 
- begin
 
-   if ACoord.Y > 0 then
 
-   begin
 
-     vProj := stdSelectProject.IDTree.Items[ACoord.Y - 1];
 
-     if Assigned(vProj) then
 
-     begin
 
-       if FMarkedProjs.IndexOf(Pointer(vProj.ID)) <> -1 then
 
-         AColor := $00646AFE
 
-       else
 
-         AColor := clWindow;
 
-     end;
 
-   end;
 
- end;
 
- procedure TProjGatherSelectFrame.ClearMarkedProj;
 
- begin
 
-   FMarkedProjs.Clear;
 
-   zgSelectProject.Invalidate;
 
- end;
 
- end.
 
 
  |