123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276 |
- unit CheckAndClearFrm;
- interface
- uses
- 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.
|