ارسال شده در تاریخ شهریور ۶م, ۱۳۸۸ به دست شهرام - [ 269 دیدار ]

screen1همانطور که می دانید TListBox امکان نمایش لیست هایی با قابلیت Scroll را دارد. می خواهیم با استفاده از dragging and dropping امکانی برای کاربر ایجاد کنیم که بتواند ترتیب آیتم ها را تغییر دهد. یعنی یک آیتم را بگیرد و در جای دیگری رها کند.

برای این کار در ابتدا یک TListBox با نام ListBox1 بر روی فرم خود قرار می دهید. چندین آیتم هم به آن اضافه کنید.

سپس در قسمت Public و یا Private (قبل از implementation) یک متغیر از نوع TPoint تعریف کنید:

  1. StartingPoint : TPoint;

سپس در رویداد FormCreate فرم خود این دستور را بنویسید:

  1. procedure TForm1.FormCreate(Sender: TObject) ;
  2. begin
  3. ListBox1.DragMode := dmAutomatic;
  4. end;

سپس در رویداد DragDrop مربوط به ListBox1 دستور زیر را بنویسید:

  1. procedure TForm1.ListBox1DragDrop(Sender, Source: TObject; X, Y: Integer) ;
  2. var
  3. DropPosition, StartPosition: Integer;
  4. DropPoint: TPoint;
  5. begin
  6. DropPoint.X := X;
  7. DropPoint.Y := Y;
  8. with Source as TListBox do
  9. begin
  10. StartPosition := ItemAtPos(StartingPoint,True) ;
  11. DropPosition := ItemAtPos(DropPoint,True) ;
  12. Items.Move(StartPosition, DropPosition) ;
  13. end;
  14. end;

اکنون در رویداد DragOver مربوط به ListBox1 دستور زیر را بنویسید:

  1. procedure TForm1.ListBox1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean) ;
  2. begin
  3. Accept := Source = ListBox1;
  4. end;

در آخر نیز در رویداد MouseDown مربوط به ListBox1 دستور زیر را بنویسید:

  1. procedure TForm1.ListBox1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer) ;
  2. begin
  3. StartingPoint.X := X;
  4. StartingPoint.Y := Y;
  5. end;

دریافت نمونه

۱ امتیاز۲ امتیاز۳ امتیاز۴ امتیاز۵ امتیاز (1 رای​، میانگین: 5.00 از 5)
بارگذاری ... بارگذاری ...
یک پاسخ برای “تغییر ترتیب آیتم های یک ListBox با استفاده از Drag & Drop”
نادر در تاریخ
میگه:

سلام
با تشکر از وبلاگ مفیدتون
میخواستم بدونم اگه بخوام از یه لیست باکس به یک لیست باکس با درگ دراپ دیگه ایتم اضافه کنم باید چیکار کنم
متشکرم

ارسال پاسخ