18-02-2009, 02:59 PM
هذا مثال صغير حول طريقة استعمال خاصية السحب والافلات (Drag & Drop)، ضع في مشروع جديد مكونين TListBox واكتب في الحدث OnDragOver والحدث OnDragDrop لكلا المكونين ما يلي:
ولا تنسى أن تضبط الخاصية DragMode على dmAutomatic لكلا المكونين، أو أكتب مباشرة هذا الكود في الحدث OnCreate للنموذج الرئيسي:
ملاحظة: للكتابة في حدث معين لعدة مكونات دفعة واحدة، قم بتحديد (Select) مجموعة من المكونات وانقر مرتين في الحدث الذي تريد.
والسلام عليكم.
PHP كود :
procedure TForm1.ListBox1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
Accept := Sender is TListBox;
end;
procedure TForm1.ListBox2DragDrop(Sender, Source: TObject; X, Y: Integer);
var
iTemp: Integer;
ptTemp: TPoint;
szTemp: string;
begin
{ change the x,y coordinates into a TPoint record }
ptTemp.x := x;
ptTemp.y := y;
{ Use a while loop instead of a for loop due to items possible being removed
from listboxes this prevents an out of bounds exception }
iTemp := 0;
while iTemp <= TListBox(Source).Items.Count-1 do
begin
{ look for the selected items as these are the ones we wish to move }
if TListBox(Source).selected[iTemp] then
begin
{ use a with as to make code easier to read }
with Sender as TListBox do
begin
{ need to use a temporary variable as when the item is deleted the
indexing will change }
szTemp := TListBox(Source).Items[iTemp];
{ delete the item that is being dragged }
TListBox(Source).Items.Delete(iTemp);
{ insert the item into the correct position in the listbox that it
was dropped on }
Items.Insert(itemAtPos(ptTemp, True), szTemp);
end;
end;
Inc(iTemp);
end;
end;
PHP كود :
procedure TForm1.FormCreate(Sender: TObject);
begin
ListBox1.DragMode := dmAutomatic;
ListBox2.DragMode := dmAutomatic;
end;
والسلام عليكم.

