如 checkboxlist1 里由上到下有以下各项:
上海
广东
山东我想把 广东这项拖到最上面,后变成这样:广东
上海
山东
如何实现? 多谢先。

解决方案 »

  1.   

    var
        FIndex: Integer;procedure TForm5.CheckListBox1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    var
      FPT: TPoint;
    begin
      FPT := Point(X, Y);
      FIndex := CheckListBox1.ItemAtPos(FPT, True);
    end;procedure TForm5.CheckListBox1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    var
      FPT: TPoint;
      FCurr: Integer;
    begin
      FPT := Point(X, Y);
      FCurr := CheckListBox1.ItemAtPos(FPT, False);
      if (FCurr <> FIndex) and (FCurr <> -1) and (FIndex <> -1) then
      begin
        if FCurr >= CheckListBox1.Items.Count then
          FCurr := CheckListBox1.Items.Count - 1;
        CheckListBox1.Items.Move(FIndex, FCurr);
      end;
    end;
      

  2.   

    items.move 和itemAtpos共同使用的结果,如果要使两者换一下,可以这样
    var
    ok:boolean;
    procedure TForm5.CheckListBox1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
    ok:=true;
    end;
    procedure TForm5.CheckListBox1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    var
      FPT: TPoint;
      FCurr: Integer;
     index:integer;
    begin
    if ok then
      index:=Checklistbox1.itemindex;
      if index<>-1 then
    begin
      FPT := Point(X, Y);
      FCurr := CheckListBox1.ItemAtPos(FPT, true);
      if FCurr<>index then
      begin
      checklistbox1.items.move(index,FCurr);
      checklistbox1.itemindex:=FCurr;
      end;
    end;
    end;
    end;
      

  3.   

    var
    ok:boolean;
    procedure TForm5.CheckListBox1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
    ok:=true;
    end;
    procedure TForm5.CheckListBox1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    var
      FPT: TPoint;
      FCurr: Integer;
     index:integer;
    begin
    if ok then
    begin//修改一下,少了个begin
      index:=Checklistbox1.itemindex;
      if index<>-1 then
    begin
      FPT := Point(X, Y);
      FCurr := CheckListBox1.ItemAtPos(FPT, true);
      if FCurr<>index then
      begin
      checklistbox1.items.move(index,FCurr);
      checklistbox1.itemindex:=FCurr;
      end;
    end;
    end;
    end;