Форум: "Основная";
Текущий архив: 2002.05.13;
Скачать: [xml.tar.bz2];
ВнизListBox и перетаскивание елементов Найти похожие ветки
← →
Sound (2002-04-29 10:44) [0]Есть компонент ListBox в котором содержатся некое количество Items"ов. Как сделать так что бы пользователь мог менять местами эти Итемсы (перетаскивать их курсором мышки)?
← →
Alx2 (2002-04-29 10:47) [1]см. в Help тему Drag and Drop
← →
Игорь Шевченко (2002-04-29 10:48) [2]День добрый,
unit main;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
ListBox1: TListBox;
procedure ListBox1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure ListBox1DragDrop(Sender, Source: TObject; X, Y: Integer);
procedure ListBox1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.ListBox1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Button = mbLeft then
ListBox1.BeginDrag({not (Button = mbLeft)}false);
end;
procedure TForm1.ListBox1DragDrop(Sender, Source: TObject; X, Y: Integer);
begin
if Source = ListBox1 then
with ListBox1,ListBox1.Items do
Move(ItemIndex, ItemAtPos(Point(X, Y), True));
end;
procedure TForm1.ListBox1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
Accept:=Source = ListBox1;
end;
end.
С уважением,
← →
Alx2 (2002-04-29 11:08) [3]Еще вариант (с использованием поля Tag):
ListBox1.DragMode должно быть dmAutomatic.
Procedure TForm1.ListBox1DragDrop(Sender, Source: TObject; X, Y: Integer);
Var
idx: Integer;
S : String;
Begin
If Sender = ListBox1 Then
Begin
idx := ListBox1.ItemAtPos(Point(X, Y), True);
If idx > -1 Then
ListBox1.Items.Move(ListBox1.Tag,idx);
End;
End;
Procedure TForm1.ListBox1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; Var Accept: Boolean);
Var idx: Integer;
Begin
Accept := (Sender = ListBox1) And (ListBox1.Tag < ListBox1.Items.Count);
idx := ListBox1.ItemAtPos(Point(X, Y), True);
Accept := Accept And (idx > -1);
If Accept Then
ListBox1.ItemIndex := idx;
End;
Procedure TForm1.ListBox1StartDrag(Sender: TObject;
Var DragObject: TDragObject);
Begin
If Sender = ListBox1 Then
ListBox1.Tag := ListBox1.ItemIndex;
End;
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.05.13;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.01 c