| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276 | unit CheckAndClearFrm;interfaceuses  BillsCompileDm, ZhAPI, sdIDTree, sdDB,  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, ZJGrid, StdCtrls, ExtCtrls, ZJCells;type  TNodeData = class  private    FID: Integer;    FB_Code: string;    FName: string;    FUnits: string;    FPrice: Double;    FQuantity: Double;  end;  TCheckAndClearForm = class(TForm)    pnlSearch: TPanel;    cbUnits: TCheckBox;    cbPrice: TCheckBox;    cbQuantity: TCheckBox;    btnSearch: TButton;    pnlResult: TPanel;    zgSearchResult: TZJGrid;    pnlClear: TPanel;    cbSelectAll: TCheckBox;    btnDelete: TButton;    procedure btnSearchClick(Sender: TObject);    procedure zgSearchResultMouseDown(Sender: TObject;      Button: TMouseButton; Shift: TShiftState; X, Y: Integer);    procedure zgSearchResultCellCanEdit(Sender: TObject;      const ACoord: TPoint; var Allow: Boolean);    procedure btnDeleteClick(Sender: TObject);    procedure cbSelectAllClick(Sender: TObject);  private    FBillsCompileData: TBillsCompileData;    FResults: TList;    procedure InitResultGrid;    procedure FilterResult(ANode: TsdIDTreeNode);    procedure FilterResults(ANode: TsdIDTreeNode);    procedure SearchResults;    procedure DisplayResults;    procedure SelectAllorNot(ASelect: Boolean);    procedure DeleteAllResults;    procedure DeleteSelectResults;  public    constructor Create(ABillsCompileData: TBillsCompileData);    destructor Destroy; override;  end;procedure ShowCheckAndClearForm(ABillsCompileData: TBillsCompileData);implementation{$R *.dfm}procedure ShowCheckAndClearForm(ABillsCompileData: TBillsCompileData);var  CheckClearForm: TCheckAndClearForm;begin  CheckClearForm := TCheckAndClearForm.Create(ABillsCompileData);  try    CheckClearForm.ShowModal;   finally    CheckClearForm.Free;  end;end;{ TForm1 }constructor TCheckAndClearForm.Create(ABillsCompileData: TBillsCompileData);begin  inherited Create(nil);  FBillsCompileData := ABillsCompileData;  FResults := TList.Create;  InitResultGrid;end;destructor TCheckAndClearForm.Destroy;begin  ClearObjects(FResults);  FResults.Free;  inherited;end;procedure TCheckAndClearForm.DisplayResults;var  i: Integer;  ResultNode: TNodeData;begin  zgSearchResult.RowCount := FResults.Count + 1;  for i := 0 to FResults.Count - 1 do  begin    ResultNode := TNodeData(FResults.Items[i]);    zgSearchResult.Cells[1, i+1].Text := 'False';    zgSearchResult.Cells[2, i+1].Text := ResultNode.FB_Code;    zgSearchResult.Cells[2, i+1].Align := gaCenterLeft;    zgSearchResult.Cells[3, i+1].Text := ResultNode.FName;    zgSearchResult.Cells[3, i+1].Align := gaCenterLeft;    zgSearchResult.Cells[4, i+1].Text := ResultNode.FUnits;    zgSearchResult.Cells[4, i+1].Align := gaCenterCenter;    zgSearchResult.Cells[5, i+1].Text := FloatToStr(ResultNode.FPrice);    zgSearchResult.Cells[5, i+1].Align := gaCenterRight;    zgSearchResult.Cells[6, i+1].Text := FloatToStr(ResultNode.FQuantity);    zgSearchResult.Cells[6, i+1].Align := gaCenterRight;    zgSearchResult.Rows[i+1].Data := ResultNode;  end;end;procedure TCheckAndClearForm.FilterResults(ANode: TsdIDTreeNode);begin  if not Assigned(ANode) then Exit;  if ANode.HasChildren then    FilterResults(ANode.FirstChild)  else    FilterResult(ANode);  FilterResults(ANode.NextSibling);end;procedure TCheckAndClearForm.InitResultGrid;begin  zgSearchResult.ColCount := 7;  zgSearchResult.Cells[1, 0].Text := '恁寁';  zgSearchResult.Cells[1, 0].Align := gaCenterCenter;  zgSearchResult.ColWidths[1] := 35;  zgSearchResult.CellClass.Cols[1] := TZjCheckBoxCell;  zgSearchResult.Cells[2, 0].Text := 'ラ等晤瘍';  zgSearchResult.Cells[2, 0].Align := gaCenterCenter;  zgSearchResult.ColWidths[2] := 80;  zgSearchResult.Cells[3, 0].Text := '靡備';  zgSearchResult.Cells[3, 0].Align := gaCenterCenter;  zgSearchResult.ColWidths[3] := 120;  zgSearchResult.Cells[4, 0].Text := '等弇';  zgSearchResult.Cells[4, 0].Align := gaCenterCenter;  zgSearchResult.ColWidths[4] := 40;  zgSearchResult.Cells[5, 0].Text := '等歎';  zgSearchResult.Cells[5, 0].Align := gaCenterCenter;  zgSearchResult.ColWidths[5] := 60;  zgSearchResult.Cells[6, 0].Text := '杅講';  zgSearchResult.Cells[6, 0].Align := gaCenterCenter;  zgSearchResult.ColWidths[6] := 60;end;procedure TCheckAndClearForm.SearchResults;begin  if cbUnits.Checked or cbPrice.Checked or cbQuantity.Checked then  begin    ClearObjects(FResults);    FilterResults(FBillsCompileData.BillsCompileTree.FirstNode);    DisplayResults;  end;end;procedure TCheckAndClearForm.btnSearchClick(Sender: TObject);begin  SearchResults;  cbSelectAll.Checked := False;end;procedure TCheckAndClearForm.FilterResult(ANode: TsdIDTreeNode);  function CheckCondition(ARec: TsdDataRecord): Boolean;  begin    Result := (not cbUnits.Checked or (ARec.ValueByName('Units').AsString = ''))          and (not cbPrice.Checked or (ARec.ValueByName('Price').AsFloat = 0))          and (not cbQuantity.Checked or (ARec.ValueByName('Quantity').AsFloat = 0));  end;var  ResultNode: TNodeData;begin  if CheckCondition(ANode.Rec) and FBillsCompileData.BillsCompileTree.CanDelete(ANode) then  begin    ResultNode := TNodeData.Create;    ResultNode.FID := ANode.ID;    ResultNode.FB_Code := ANode.Rec.ValueByName('B_Code').AsString;    ResultNode.FName := ANode.Rec.ValueByName('Name').AsString;    ResultNode.FUnits := ANode.Rec.ValueByName('Units').AsString;    ResultNode.FPrice := ANode.Rec.ValueByName('Price').AsFloat;    ResultNode.FQuantity := ANode.Rec.ValueByName('Quantity').AsFloat;    FResults.Add(ResultNode);  end;end;procedure TCheckAndClearForm.zgSearchResultMouseDown(Sender: TObject;  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);var  ResultNode: TNodeData;  BillsNode: TsdIDTreeNode;begin  if (ssDouble in Shift) and (zgSearchResult.CurRow > 0) and (zgSearchResult.CurCol > 1) then  begin    ResultNode := TNodeData(zgSearchResult.Rows[zgSearchResult.CurRow].Data);    BillsNode := FBillsCompileData.BillsCompileTree.FindNode(ResultNode.FID);    FBillsCompileData.sdvBillsCompile.LocateInControl(BillsNode.Rec);  end;end;procedure TCheckAndClearForm.zgSearchResultCellCanEdit(Sender: TObject;  const ACoord: TPoint; var Allow: Boolean);begin  if (ACoord.X = 1) and (ACoord.Y > 0) then    Allow := True  else    Allow := False;end;procedure TCheckAndClearForm.btnDeleteClick(Sender: TObject);begin  DeleteSelectResults;  DisplayResults;end;procedure TCheckAndClearForm.DeleteAllResults;var  i: Integer;  ResultNode: TNodeData;  BillsNode: TsdIDTreeNode;begin  for i := 0 to FResults.Count - 1 do  begin    ResultNode := TNodeData(FResults.Items[i]);    BillsNode := FBillsCompileData.BillsCompileTree.FindNode(ResultNode.FID);    if FBillsCompileData.BillsCompileTree.CanDelete(BillsNode) then      FBillsCompileData.BillsCompileTree.DeleteNode(BillsNode);  end;  ClearObjects(FResults);end;procedure TCheckAndClearForm.cbSelectAllClick(Sender: TObject);begin  SelectAllorNot(TCheckBox(Sender).Checked);end;procedure TCheckAndClearForm.SelectAllorNot(ASelect: Boolean);var  iRow: Integer;begin  for iRow := 1 to zgSearchResult.RowCount - 1 do  begin    if ASelect then      zgSearchResult.Cells[1, iRow].Text := 'True'    else      zgSearchResult.Cells[1, iRow].Text := 'False';  end;end;procedure TCheckAndClearForm.DeleteSelectResults;var  iRow: Integer;  ResultNode: TNodeData;  BillsNode: TsdIDTreeNode;begin  for iRow := 1 to zgSearchResult.RowCount - 1 do  begin    if SameText(zgSearchResult.Cells[1, iRow].Text, 'True') then    begin      ResultNode := TNodeData(zgSearchResult.Rows[iRow].Data);      BillsNode := FBillsCompileData.BillsCompileTree.FindNode(ResultNode.FID);      if FBillsCompileData.BillsCompileTree.CanDelete(BillsNode) then        FBillsCompileData.BillsCompileTree.DeleteNode(BillsNode);      FResults.Remove(ResultNode);      ResultNode.Free;    end;  end;end;end.
 |