Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.05.13;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.01 c
1-39711
HDD
2002-04-25 07:05
2002.05.13
Помогите пожалуйста!


4-39884
Woolen
2002-03-09 14:54
2002.05.13
Определение завершения работы Windows


7-39869
NW
2002-02-14 19:07
2002.05.13
Виртуальный логический диск


14-39828
novomod
2002-03-29 19:04
2002.05.13
Файл. Sulfnbk.


3-39652
Rail
2002-04-17 13:58
2002.05.13
Чем отличается Deny и Revoke в MS SQL Server