| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354 | 
							- unit tpSelectTendersFrm;
 
- interface
 
- uses
 
-   sdIDTree,
 
-   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 
-   Dialogs, StdCtrls, ExtCtrls, ZJGrid, JimPages, ActnList, sdGridDBA,
 
-   sdGridTreeDBA;
 
- type
 
-   TSelectTendersForm = class(TForm)
 
-     btnOk: TButton;
 
-     btnCancel: TButton;
 
-     stdTenderSelect: TsdGridTreeDBA;
 
-     lblTenderResult: TLabel;
 
-     Panel1: TPanel;
 
-     pnlTenderSelectTitle: TPanel;
 
-     lblTenderSelect: TLabel;
 
-     pnlSelect: TPanel;
 
-     zgTenderSelect: TZJGrid;
 
-     pnlSelectTitle: TPanel;
 
-     lblTenderList: TLabel;
 
-     pnlResult: TPanel;
 
-     zgResult: TZJGrid;
 
-     pnlResultTitle: TPanel;
 
-     lblResultList: TLabel;
 
-     pnlDivision: TPanel;
 
-     procedure zgTenderSelectDrawCellText(ACanvas: TCanvas;
 
-       const ARect: TRect; const ACoord: TPoint; AGrid: TZJGrid;
 
-       const Text: String; var ADefaultDraw: Boolean);
 
-     procedure zgTenderSelectShowHint(var HintStr: String;
 
-       var CanShow: Boolean; var HintInfo: THintInfo; const ACoord: TPoint);
 
-     procedure zgTenderSelectCellTextChanged(Sender: TObject; Col,
 
-       Row: Integer);
 
-     procedure zgTenderSelectSetCellText(Sender: TObject;
 
-       const ACoord: TPoint; var Value: String; DisplayText: Boolean);
 
-     procedure zgTenderSelectGetCellText(Sender: TObject;
 
-       const ACoord: TPoint; var Value: String; DisplayText: Boolean);
 
-     procedure btnOkClick(Sender: TObject);
 
-   private
 
-     FSelects: TList;
 
-     procedure AddRows(ANode: TsdIDTreeNode);
 
-     procedure RemoveRows(ANode: TsdIDTreeNode);
 
-     procedure InitResultGrid;
 
-     procedure AssignResultGrid;
 
-     procedure AssignResult;
 
-     function GetSelectCount: Integer;
 
-     function GetSelectTotalPrice: Double;
 
-   public
 
-     constructor Create(AHistorys: TList);
 
-     destructor Destroy; override;
 
-     procedure AssignSelectTenders(ATender: TList);
 
-     property SelectCount: Integer read GetSelectCount;
 
-     property SelectTotalPrice: Double read GetSelectTotalPrice;
 
-   end;
 
- function SelectTendersToPart(ATenders: TList): Boolean;
 
- implementation
 
- uses
 
-   Globals, MainFrm, ProjectManagerDm, sdDB, UtilMethods;
 
- function SelectTendersToPart(ATenders: TList): Boolean;
 
- var
 
-   vSelectFrm: TSelectTendersForm;
 
- begin
 
-   vSelectFrm := TSelectTendersForm.Create(ATenders);
 
-   try
 
-     Result := vSelectFrm.ShowModal = mrOk;
 
-     if Result then
 
-       vSelectFrm.AssignSelectTenders(ATenders);
 
-   finally
 
-     vSelectFrm.Free;
 
-   end;
 
- end;
 
- {$R *.dfm}
 
- constructor TSelectTendersForm.Create(AHistorys: TList);
 
- begin
 
-   inherited Create(nil);
 
-   stdTenderSelect.DataView := ProjectManager.sdvProjectsSpare;
 
-   FSelects := TList.Create;
 
-   FSelects.Assign(AHistorys);
 
-   InitResultGrid;
 
- end;
 
- destructor TSelectTendersForm.Destroy;
 
- begin
 
-   FSelects.Free;
 
-   inherited;
 
- end;
 
- procedure TSelectTendersForm.zgTenderSelectDrawCellText(ACanvas: TCanvas;
 
-   const ARect: TRect; const ACoord: TPoint; AGrid: TZJGrid;
 
-   const Text: String; var ADefaultDraw: Boolean);
 
-   procedure GetBitmap(AImage: TBitmap);
 
-   begin
 
-     with stdTenderSelect.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 > zgTenderSelect.FixedRowCount - 1) then
 
-   begin
 
-     Cell := zgTenderSelect.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 TSelectTendersForm.zgTenderSelectShowHint(var HintStr: String;
 
-   var CanShow: Boolean; var HintInfo: THintInfo; const ACoord: TPoint);
 
- var
 
-   vCell: TZjCell;
 
-   vNode: TsdIDTreeNode;
 
-   iLevelWidth: Integer;
 
-   rText: TRect;
 
-   procedure CalcTextRect(var R: TRect);
 
-   var
 
-     DC: HDC;
 
-     iTextHeight: Integer;
 
-   begin
 
-     DC := CreateCompatibleDC(0);
 
-     try
 
-       SelectObject(DC, vCell.Font.Handle);
 
-       iTextHeight := DrawText(DC, PChar(vCell.Text), Length(vCell.Text), R, DT_SINGLELINE or DT_VCenter
 
-         or DT_NOCLIP or DT_CALCRECT);
 
-     finally
 
-       DeleteDC(DC);
 
-     end;
 
-   end;
 
- begin
 
-   if ACoord.Y < 1 then Exit;
 
-   vCell := zgTenderSelect.Cells[ACoord.X, ACoord.Y];
 
-   with HintInfo do
 
-   begin
 
-     vNode := stdTenderSelect.IDTree.Items[ACoord.Y - 1];
 
-     if not Assigned(vNode) then Exit;
 
-     iLevelWidth := (vNode.Level + 1) * 20 + 16;
 
-     rText := CursorRect;
 
-     CalcTextRect(rText);
 
-     if (rText.Right - rText.Left + iLevelWidth > CursorRect.Right - CursorRect.Left) or
 
-       (rText.Right > ClientWidth) then
 
-     begin
 
-       CanShow := True;
 
-       HintStr := vCell.Text;
 
-       GetCursorPos(HintPos);
 
-     end;
 
-   end;
 
- end;
 
- procedure TSelectTendersForm.InitResultGrid;
 
- begin
 
-   zgResult.ColCount := 2;
 
-   zgResult.RowCount := 1;
 
-   zgResult.Cells[1, 0].Text := '所选项目';
 
-   zgResult.ColWidths[1] := 225;
 
- end;
 
- procedure TSelectTendersForm.AssignResult;
 
- const
 
-   sResult = '共选中标段 %d 个,金额合计 %s 元';
 
- var
 
-   sTotalPrice: string;
 
- begin
 
-   InitResultGrid;
 
-   AssignResultGrid;
 
-   sTotalPrice := FormatFloat('##,###,###,###.##', SelectTotalPrice);
 
-   lblTenderResult.Caption := Format(sResult, [SelectCount, sTotalPrice]);
 
- end;
 
- procedure TSelectTendersForm.zgTenderSelectCellTextChanged(Sender: TObject;
 
-   Col, Row: Integer);
 
- begin
 
-   if (Col = 1) then
 
-     zgTenderSelect.InvalidateCol(1);
 
- end;
 
- procedure TSelectTendersForm.zgTenderSelectSetCellText(Sender: TObject;
 
-   const ACoord: TPoint; var Value: String; DisplayText: Boolean);
 
- var
 
-   stnNode: TsdIDTreeNode;
 
- begin
 
-   if ACoord.X = 1 then
 
-   begin
 
-     stnNode := stdTenderSelect.IDTree.Items[ACoord.Y - 1];
 
-     if Value = 'True' then
 
-       AddRows(stnNode)
 
-     else
 
-       RemoveRows(stnNode);
 
-     AssignResult;
 
-   end;
 
- end;
 
- procedure TSelectTendersForm.AddRows(ANode: TsdIDTreeNode);
 
- var
 
-   iChild: Integer;
 
- begin
 
-   if not Assigned(ANode) then Exit;
 
-   if FSelects.IndexOf(Pointer(ANode.ID)) = -1 then
 
-     FSelects.Add(Pointer(ANode.ID));
 
-   if ANode.HasChildren then
 
-     for iChild := 0 to ANode.ChildCount - 1 do
 
-       AddRows(ANode.ChildNodes[iChild]);
 
- end;
 
- procedure TSelectTendersForm.RemoveRows(ANode: TsdIDTreeNode);
 
- var
 
-   iChild: Integer;
 
- begin
 
-   if not Assigned(ANode) then Exit;
 
-   if FSelects.IndexOf(Pointer(ANode.ID)) > -1 then
 
-     FSelects.Remove(Pointer(ANode.ID));
 
-   if ANode.HasChildren then
 
-     for iChild := 0 to ANode.ChildCount - 1 do
 
-       RemoveRows(ANode.ChildNodes[iChild]);
 
- end;
 
- procedure TSelectTendersForm.zgTenderSelectGetCellText(Sender: TObject;
 
-   const ACoord: TPoint; var Value: String; DisplayText: Boolean);
 
- var
 
-   stnNode: TsdIDTreeNode;
 
- begin
 
-   if ACoord.X = 1 then
 
-   begin
 
-     stnNode := stdTenderSelect.IDTree.Items[ACoord.Y - 1];
 
-     if Assigned(stnNode) and (FSelects.IndexOf(Pointer(stnNode.ID)) > -1) then
 
-       Value := 'True';
 
-   end;
 
- end;
 
- procedure TSelectTendersForm.AssignResultGrid;
 
- var
 
-   i, iID: Integer;
 
-   vNode: TsdIDTreeNode;
 
- begin
 
-   for i := 0 to FSelects.Count - 1 do
 
-   begin
 
-     iID := Integer(FSelects.Items[i]);
 
-     vNode := stdTenderSelect.IDTree.FindNode(iID);
 
-     if vNode.Rec.ValueByName('Type').AsInteger = 1 then
 
-     begin
 
-       zgResult.RowCount := zgResult.RowCount + 1;
 
-       zgResult.Cells[1, zgResult.RowCount - 1].Text := vNode.Rec.ValueByName('Name').AsString;
 
-       zgResult.Cells[1, zgResult.RowCount - 1].Align := gaCenterLeft;
 
-       zgResult.Rows[zgResult.RowCount - 1].Data := vNode;
 
-     end;
 
-   end;
 
- end;
 
- function TSelectTendersForm.GetSelectCount: Integer;
 
- begin
 
-   Result := zgResult.RowCount - 1;
 
- end;
 
- function TSelectTendersForm.GetSelectTotalPrice: Double;
 
- var
 
-   iRow: Integer;
 
-   vNode: TsdIDTreeNode;
 
- begin
 
-   Result := 0;
 
-   for iRow := 1 to zgResult.RowCount - 1 do
 
-   begin
 
-     vNode := TsdIDTreeNode(zgResult.Rows[iRow].Data);
 
-     if Assigned(vNode) then
 
-       Result := Result + vNode.Rec.ValueByName('DealTotalPrice').AsFloat;
 
-   end;
 
- end;
 
- procedure TSelectTendersForm.btnOkClick(Sender: TObject);
 
-   function CheckValid(var AMessage: string): Boolean;
 
-   begin
 
-     Result := False;
 
-     if SelectCount = 0 then
 
-       AMessage := '请勾选需统一划分的标段。'
 
-     else if SelectTotalPrice <= 0 then
 
-       AMessage := '当前勾选的标段,合计金额为0,请检查标段数据是否正确。'
 
-     else
 
-       Result := True;
 
-   end;
 
- var
 
-   iCount: Integer;
 
-   sMessage: string;
 
- begin
 
-   if not CheckValid(sMessage) then
 
-   begin
 
-     WarningMessage(sMessage);
 
-     Exit;
 
-   end
 
-   else
 
-     ModalResult := mrOk;
 
- end;
 
- procedure TSelectTendersForm.AssignSelectTenders(ATender: TList);
 
- //var
 
-   //iRow: Integer;
 
- begin
 
-   ATender.Assign(FSelects);
 
-   //for iRow := 1 to zgResult.RowCount - 1 do
 
-   //begin
 
-   //  if Assigned(zgResult.Rows[iRow].Data) then
 
-   //    ATender.Add(Pointer(TsdIDTreeNode(zgResult.Rows[iRow].Data).ID));
 
-   //end;
 
- end;
 
- end.
 
 
  |