⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bw_sort.pas

📁 delphi 源码 小型企业管理软件
💻 PAS
字号:
unit bw_sort;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, DBTables,ADODB;

type
  TFrmSort = class(TForm)
    ListBox1: TListBox;
    btnDown: TSpeedButton;
    btnUp: TSpeedButton;
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    procedure btnUpClick(Sender: TObject);
    procedure btnDownClick(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
  private
    sl0: TstringList;
    procedure ChangeObject(OrgItemIndex, ItemIndex: integer);
    { Private declarations }
  public
    { Public declarations }
  end;

var
  FrmSort: TFrmSort;

function DoSort(Qu_DD,Qu_DDMx:TadoTable): Boolean;

implementation

uses uDM, uFunc;

{$R *.dfm}
const
  Multiplier=1000; //用于区分原始序号和新序号的乘数

function GuoSort(sl:TstringList): Boolean;
var
  i: integer;
begin
  Application.CreateForm(TFrmSort, FrmSort);

  with FrmSort do
  try
    ListBox1.Items.Assign(sl) ;

    if sl.Count <=1 then begin
      btnUp.Enabled := False;
      btnDown.Enabled := False;
      Bitbtn2.Enabled := False;
    end;

    sl0 := sl;   //!!引出变量指针,便于按下“确定”时赋值
    Result := FrmSort.ShowModal=mrOk ;
  finally
    FreeAndNil(FrmSort);
  end;

end;

function DoSort(Qu_DD,Qu_DDMx:TadoTable): Boolean;
var
  sl: TStringList;
  i: integer;
  FMD00,Fspno,FTabMx,  //F前缀表示栏位名或表名
  customcode,mSQL,
  sspno: string;
begin
  sl := TStringList.Create;
  with Qu_DDMx do begin
    first;

    while not eof do begin
      sl.AddObject(Format('%s/%s/%s',
        [FieldByName('gxno').AsString
        ,FieldByName('gxname').AsString
        ,FieldByName('gxprice').AsString
        ]), Pointer(FieldByName('gxno').AsInteger)
        );
      next;
    end;
  end;

  try
    Result := GuoSort(sl);
    if not Result then exit;

    FMD00 := 'gxno';
//    customcode := Qu_DD.fieldbyname(IEType+'DD02').asstring;
    Fspno := 'spno';
    FTabMx := 'cpgx';

    sspno := Qu_DD.fieldbyname(Fspno).asstring;

    mSQL := Format('update %1:s set %0:s=-%0:s'
      + ' where %4:s=''%2:s'''
      ,[FMD00,FTabMx,sspno,'',Fspno]);

    for i:=0 to sl.Count-1 do begin
      mSQL := mSQL +#13#10+ Format('update %3:s set %0:s=%1:d'
      + ' where %5:s=''%6:s'' and %0:s=-%2:d'
      ,[FMD00,i+1,Integer(sl.Objects[i]),FTabMx,'',Fspno,sspno]);
    end;

    ExecQuery(mSQL);

    Qu_DDMx.Close ;
    Qu_DDMx.Open ;
  finally
    sl.Free ;
  end;

end;

procedure TFrmSort.btnUpClick(Sender: TObject);
var
  OrgItemIndex, i: integer;
begin
  with ListBox1 do begin
    if selected[0] then exit;
    for i:=0 to Items.count-1 do
      if selected[i] then begin
        Items.Move(i,i-1);
        selected[i-1] := true;
      end;
  end;
end;

procedure TFrmSort.ChangeObject(OrgItemIndex,ItemIndex: integer);
begin
end;

procedure TFrmSort.btnDownClick(Sender: TObject);
var
  OrgItemIndex, i: integer;
begin
  with ListBox1 do begin
    if selected[Items.count-1] then exit;
    for i:=Items.count-2 downto 0 do
      if selected[i] then begin
        Items.Move(i,i+1);
        selected[i+1] := true;
      end;
  end;
end;

procedure TFrmSort.BitBtn2Click(Sender: TObject);
begin
  sl0.Assign(ListBox1.Items);
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -