[BlueLeaf1336]> PROGRAM> Natural Born Junk>

Drag&Dropサンプル(ListBox版)

historyTOP

2002/11/12:作成

memoTOP

ドラッグアンドドロップのやり方ってほとんど定型なので、覚書き。

codeTOP

(*
    *******************************************************
    一つのリストボックス内でのドラッグアンドドロップテンプレート
    *******************************************************
*)
(*
    =======================================================
    ドラッグ開始
    =======================================================
*)
procedure TForm1.ListBox1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
    index: integer;
begin
    //マウス位置の文字列のインデックス取得
    index := TListBox(Sender).ItemAtPos(Point(X, Y), True);
    //ない場合は終了
    if index = -1 then
    begin
        Exit;
    end else
    //ある場合は少し動いてから開始
    begin
        TListBox(Sender).BeginDrag(False, 5);
    end;
end;
(*
    =======================================================
    ドラッグ中
    =======================================================
*)
procedure TForm1.ListBox1DragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
var
    index: integer;
begin
    index := TListBox(Sender).ItemAtPos(Point(X, Y), True);
    //移動先にも文字列があって、かつ、自分自身の場合
    Accept := (index <> -1) and (TListBox(Sender) = TListBox(Source));
end;
(*
    =======================================================
    ドロップ
    =======================================================
*)
procedure TForm1.ListBox1DragDrop(Sender, Source: TObject; X, Y: Integer);
var
    index: integer;
begin
    index := TListBox(Sender).ItemAtPos(Point(X, Y), True);
    //移動版
    TListBox(Sender).Items.Move(TListBox(Sender).ItemIndex, index);
    //入れ替え版
    //TListBox(Sender).Items.Exchange(TListBox(Sender).ItemIndex, index);
end;

EOFTOP