| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301 | unit stgGclSelectFileFrm;interfaceuses  stgGclGatherControl,  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, StdCtrls, ExtCtrls, sdGridDBA, sdGridTreeDBA, ZJGrid, sdIDTree;type  TstgGclSelectFileForm = class(TForm)    pnlGatherFiles: TPanel;    pnlSelect: TPanel;    zgTenderSelect: TZJGrid;    pnlSelectTitle: TPanel;    lblTenderList: TLabel;    stdTenderSelect: TsdGridTreeDBA;    pnlDivision: TPanel;    pnlResult: TPanel;    zgResult: TZJGrid;    pnlResultTitle: TPanel;    lblResultList: TLabel;    pnlBottom: TPanel;    btnOk: TButton;    btnCancel: TButton;    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 zgTenderSelectSetCellText(Sender: TObject;      const ACoord: TPoint; var Value: String; DisplayText: Boolean);    procedure zgTenderSelectGetCellText(Sender: TObject;      const ACoord: TPoint; var Value: String; DisplayText: Boolean);    procedure zgTenderSelectCellTextChanged(Sender: TObject; Col,      Row: Integer);    procedure btnOkClick(Sender: TObject);  private    FSelects: TList;    procedure AddRows(ANode: TsdIDTreeNode);    procedure RemoveRows(ANode: TsdIDTreeNode);    procedure InitResultGrid;    procedure AssignResultGrid;    procedure AssignResult;    function GetSelectCount: Integer;  public    constructor Create(AGatherControl: TstgGclGatherControl);    destructor Destroy; override;    procedure AssignSelect(AGatherControl: TstgGclGatherControl);    property SelectCount: Integer read GetSelectCount;  end;function SelectFileForSubTenderGclGather(AGatherControl: TstgGclGatherControl): Boolean;implementationuses MainFrm, Globals, UtilMethods;{$R *.dfm}function SelectFileForSubTenderGclGather(AGatherControl: TstgGclGatherControl): Boolean;var  vSelectFrm: TstgGclSelectFileForm;begin  vSelectFrm := TstgGclSelectFileForm.Create(AGatherControl);  try    Result := vSelectFrm.ShowModal = mrOk;    if Result then      vSelectFrm.AssignSelect(AGatherControl);  finally    vSelectFrm.Free;  end;end;procedure TstgGclSelectFileForm.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 TstgGclSelectFileForm.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 TstgGclSelectFileForm.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 TstgGclSelectFileForm.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 TstgGclSelectFileForm.zgTenderSelectCellTextChanged(Sender: TObject;  Col, Row: Integer);begin  if (Col = 1) then    zgTenderSelect.InvalidateCol(1);end;procedure TstgGclSelectFileForm.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 TstgGclSelectFileForm.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 TstgGclSelectFileForm.InitResultGrid;begin  zgResult.ColCount := 2;  zgResult.RowCount := 1;  zgResult.Cells[1, 0].Text := '所选项目';  zgResult.ColWidths[1] := 365;end;procedure TstgGclSelectFileForm.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;procedure TstgGclSelectFileForm.AssignSelect(AGatherControl: TstgGclGatherControl);begin  AGatherControl.Projects.Assign(FSelects);end;constructor TstgGclSelectFileForm.Create(AGatherControl: TstgGclGatherControl);begin  inherited Create(nil);  stdTenderSelect.DataView := ProjectManager.sdvProjectsSpare;  FSelects := TList.Create;  FSelects.Assign(AGatherControl.Projects);  InitResultGrid;end;destructor TstgGclSelectFileForm.Destroy;begin  FSelects.Free;  inherited;end;procedure TstgGclSelectFileForm.AssignResult;begin  InitResultGrid;  AssignResultGrid;end;procedure TstgGclSelectFileForm.btnOkClick(Sender: TObject);begin  if SelectCount = 0 then    WarningMessage('请选择需要汇总的分包标段。', Handle)  else    ModalResult := mrOk;end;function TstgGclSelectFileForm.GetSelectCount: Integer;begin  Result := zgResult.RowCount - zgResult.FixedRowCount;end;end.
 |