📄 bw_sort.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 + -