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.
|