📄 invsupliersearch.pas
字号:
unit InvSuplierSearch;
interface
uses Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls,
Buttons, ExtCtrls, ComCtrls, EnhLV, GLLV, Dialogs, InvDef;
type
TfrmSupSearch = class(TForm)
stsBarCnt: TStatusBar;
Panel2: TPanel;
Panel3: TPanel;
Label1: TLabel;
edtSuplierCode: TEdit;
Label2: TLabel;
edtSuplierName: TEdit;
btnConfirm: TBitBtn;
btnCancel: TBitBtn;
btnSearch: TBitBtn;
ListViewSup: TGradLineListView;
procedure FormCreate(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure btnSearchClick(Sender: TObject);
procedure btnConfirmClick(Sender: TObject);
procedure btnCancelClick(Sender: TObject);
procedure ListViewSupDblClick(Sender: TObject);
private
{ Private declarations }
Procedure SetListViewColumn;
Function SetListView(StartIX,SelRecID: LongInt; igroup: Integer; scode,sname: string): Integer;
procedure MakeItemCaption(Item: TListItem);
public
{ Public declarations }
FSelectedSuplier: PSHIGEN;
end;
var
frmSupSearch: TfrmSupSearch;
FAllSuplierList: TList;
FColumnCnt, ListSortKey: Integer;
FListViewClear,
FOnMakeItemCaption: Boolean;
implementation
uses InvDM;
{$R *.dfm}
// TListSortCompare --
function ListSortCompare(Item1, Item2: Pointer): Longint;
var DataType: Integer;
Str1, Str2: string;
Int1, Int2: Integer;
Dbl1, Dbl2: Double;
begin
Result := 0;
Str1 := ''; Str2 := '';
Int1 := 0; Int2 := 0;
Dbl1 := 0; Dbl2 := 0;
case Abs(ListSortKey) of
1: begin //--
Int1 := TSHIGEN(Item1^).SIGEN_CD;
Int2 := TSHIGEN(Item2^).SIGEN_CD;
DataType := 1;
end;
2: begin //--
Str1 := TSHIGEN(Item1^).SIGEN_NM;
Str2 := TSHIGEN(Item2^).SIGEN_NM;
DataType := 0;
end;
else Exit;
end;
case DataType of
0: if Str1 < Str2 then Result := -1
else if Str1 > Str2 then Result := 1
else Result := 0;
1: if Int1 < Int2 then Result := -1
else if Int1 > Int2 then Result := 1
else Result := 0;
2: if Dbl1 < Dbl2 then Result := -1
else if Dbl1 > Dbl2 then Result := 1
else Result := 0;
else Result := 0;
end;
if ListSortKey < 0 then Result := Result * -1;
end;
procedure TfrmSupSearch.FormCreate(Sender: TObject);
begin
FAllSuplierList := TList.Create;
FAllSuplierList.Clear;
end;
procedure TfrmSupSearch.FormShow(Sender: TObject);
begin
SetListViewColumn;
SetListView(0, -1, 4, '', '');
end;
procedure TfrmSupSearch.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
//
end;
procedure TfrmSupSearch.btnSearchClick(Sender: TObject);
begin
Modalresult := mrNone;
SetListView(0, -1, 4, trim(edtSuplierCode.Text), trim(edtSuplierName.Text));
end;
procedure TfrmSupSearch.btnConfirmClick(Sender: TObject);
var lcp: PSHIGEN;
begin
ModalResult := mrNone;
if ((ListViewSup.Selected=nil)or(ListViewSup.Selected.Data=nil)) then
begin
FSelectedSuplier := nil;
MessageDlg('没有选定一个供应商编号,不能点击确定!',mtError,[mbOK],0);
Exit;
end
else begin
FSelectedSuplier := PSHIGEN(ListViewSup.Selected.Data);
ModalResult := mrOK;
end;
end;
procedure TfrmSupSearch.btnCancelClick(Sender: TObject);
begin
Modalresult := mrCancel;
close;
end;
procedure TfrmSupSearch.SetListViewColumn;
var
Column: TListColumn;
begin
ListViewSup.Columns.Clear;
FColumnCnt := 0;
//--
Column := ListViewSup.Columns.Add;
Column.Width := ListViewSup.Font.Size * 10;
Column.Caption := '供应商编号';
Inc(FColumnCnt);
//--
Column := ListViewSup.Columns.Add;
Column.Width := ListViewSup.Font.Size * 40;
Column.Caption := '供应商名称';
Inc(FColumnCnt);
end;
Function TfrmSupSearch.SetListView(StartIX,SelRecID: LongInt; igroup: Integer; scode,sname: string): Integer;
var i,j: Integer;
lcP: PSHIGEN;
Item: TListItem;
ItemCNT,SelNo: Integer;
begin
Screen.Cursor := crHourGlass;
ItemCNT := 0;
if StartIX <= 0 then begin
FListViewClear := true;
with ListViewSup.Items do begin
BeginUpdate;
Clear;
EndUpdate;
end;
FListViewClear := false;
end;
SetListViewColumn;
//--
ListViewSup.Items.BeginUpdate;
SelNo := 0;
//FQueryList.Sort(TListSortCompare(@ListSortCompare));
dm_Inventory.Readresource(FAllSuplierList, igroup, scode, sname);
FOnMakeItemCaption := True;
try
for i := 0 to FAllSuplierList.Count-1 do begin
lcP := FAllSuplierList.Items[i];
if lcp^.SIGEN_CD=0 then continue;
Item := ListViewSup.Items.Add;
for j := 0 to FColumnCnt-1 do Item.Subitems.Add('');
lcP^.ITEM := Item;
Item.Data := lcP;
MakeItemCaption(Item);
Inc(ItemCNT);
if SelRecID = lcP^.REC_ID then SelNo := i;
end;
finally
FOnMakeItemCaption := False;
ListViewSup.Items.EndUpdate;
if ListViewSup.Items.Count > 0 then ListViewSup.TopItem.Selected := True;
stsBarCnt.Panels[0].Text := '符合条件的记录有:'+ IntToStr(ListViewSup.Items.Count)+' 条';
Screen.Cursor := crDefault;
end;
if SelRecID > 0 then Result := SelNo
else Result := ItemCNT;
end;
/////////////////////////////////////////////////////////////////////////
procedure TfrmSupSearch.MakeItemCaption(Item: TListItem);
//-- Init int value and '' to 0 value
function IntToStrNull(INum: Integer): string;
begin
if INum = 0 then Result := ''
else Result := IntToStr(INum);
end;
var lcP: PSHIGEN;
skind: string;
begin
if Item = nil then Exit;
if Item.Data = nil then Exit;
lcP := Item.Data;
Item.Caption := IntToStr(lcp^.SIGEN_CD);
Item.SubItems[00] := lcp^.SIGEN_NM;
end;
procedure TfrmSupSearch.ListViewSupDblClick(Sender: TObject);
begin
if ListViewSup.Selected.Selected then btnConfirm.Click;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -