ITPub博客

首页 > 应用开发 > IT综合 > listbox多选状态下的自拖与互拖 (转)

listbox多选状态下的自拖与互拖 (转)

原创 IT综合 作者:worldblog 时间:2007-12-12 09:18:55 0 删除 编辑
listbox多选状态下的自拖与互拖 (转)[@more@]

unit Unit1;

Mail">file://yanlei:E_mail yanleiigis@21cn.com

interface

 

uses
  windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
  ListBox1: TListBox;
  ListBox2: TListBox;
  procedure ListBox1DragDrop(Sender, source: Tobject; X, Y: Integer);
  procedure ListBox1DragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
  procedure FormCreate(Sender: TObject);
  private
  { Private declarations }
  public
  { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.ListBox1DragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
var
  aPoint: TPoint;
begin
  aPoint.x := x;
  aPoint.y := y;


  if (source is Tlistbox) then
  if ((source as Tlistbox).SelCount > 0) and
  ((sender as Tlistbox).ItemAtPos(apoint, true) <> -1)
  and ((sender as Tlistbox).itematpos(apoint, true) <> (sender as Tlistbox).itemindex) then
  begin
  accept := true;
  end;
end;

 

procedure TForm1.ListBox1DragDrop(Sender, Source: TObject; X, Y: Integer);
var
  aPoint: TPoint;
  st: string;
  p: integer;
  i, num: integer;
  MYlBox: TStrings;
begin
  aPoint.x := x;
  aPoint.y := y;

  p := (sender as Tlistbox).itematpos(aPoint, true);

  MYlBox := Tstringlist.Create;
  try
  Num := (source as Tlistbox).Items.Count;
  for i := num - 1 downto 0 do
  begin
  if (source as Tlistbox).selected[i] then
  begin
  st := (source as Tlistbox).Items[i];
  MYlBox.Add(st)

  end;
  end;
  if p > -1 then
  begin
  for i := 0 to Mylbox.Count - 1 do
  begin

  (sender as Tlistbox).Items.Insert(p, mylbox[i])

  end;
  end
  else
  begin
  for i := Mylbox.Count - 1 downto 0 do
  begin
  (sender as Tlistbox).Items.Add(mylbox[i])

  end;

  end;
  (source as Tlistbox).DeleteSelected;
  if P > -1 then
  (sender as Tlistbox).Selected[p] := true;
  finally
  mylbox.Free;
  end;

end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  listbox2.OnDragDrop := listbox1.OnDragDrop;
  listbox2.OnDragOver := listbox1.OnDragOver;
  listbox1.MultiSelect := true;
  listbox2.MultiSelect := true;
  listbox1.DragMode := dmAutomatic;
  listbox2.DragMode := dmAutomatic;

end;

end.


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10752043/viewspace-991522/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    6241
  • 访问量
    2449535