Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Drag'n'Drop в ListBox [Delphi]


Elec3C ©   (2007-12-09 20:12:00) 

Можете привести пример Drag'n'Drop(перемещение элемента) в ListBox.


Elec3C   (2007-12-10 23:46:00) [1]


> Sapersky

Да и так всё прекрасно работает))


Sapersky   (2007-12-10 20:44:00) [2]

Н-ну, кривость скорее идеологическая - никакой инкапсуляции, отдельно какая-то функция и какие-то переменные валяются... для встраивания в новый проект нужно хоть пару строчек, но написать.
Впрочем, в demotvnlvdrag ещё хуже, автор про встраиваемость вообще не думал.


Elec3C   (2007-12-10 19:17:00) [3]

Спасибо. А в чём заключается кривость?


Sapersky   (2007-12-10 18:41:00) [4]

Есть такой (несколько кривоватый) вариант. Используется в OnMessage. Требуется 2 переменные:
ListDragSrc : Integer = -1; ListDragDst : Integer = -1;

Type
 TDragDropRes = (drNone, drDrag, drDrop, drDropSucc);

function LBoxDragDrop(LBox : PControl; Const Msg : TMSG;
                     Var DragSrcIndex, DragDstIndex : Integer): TDragDropRes;
Var i : Integer;
   s : String;
   cur : PChar;
begin
Result := drNone;
Case Msg.message of

 WM_MOUSEMOVE : If ((Msg.wParam and MK_LBUTTON) <> 0) then begin
   Result := drDrag;
   If (DragSrcIndex = -1) then DragSrcIndex := LBox.CurIndex else begin
     i := LBox.Perform(LB_ITEMFROMPOINT, 0, Msg.lParam);

     If (i <> DragDstIndex) and (i < LBox.Count) then begin
       If (i <> -1) and (i <> DragSrcIndex) then cur := IDC_HAND
                                            else cur := IDC_ARROW;
       LBox.Cursor := LoadCursor( 0, cur );
       DragDstIndex := i;
     end;
   end;

 end;

 WM_LBUTTONUP : begin
   Result := drDrop;
   i := DragDstIndex;
   If (i <> -1) and (i <> DragSrcIndex) then begin
     LBox.Cursor := LoadCursor( 0, IDC_ARROW );
     s := LBox.Items[DragSrcIndex];
     LBox.Delete(DragSrcIndex);
     LBox.Insert(i, s);
     LBox.CurIndex := i;
     Result := drDropSucc;
   end;
   DragDstIndex := -1;
   DragSrcIndex := -1;
 end;
end;
end;


Elec3C   (2007-12-10 16:52:00) [5]


> ANTPro ©

Так эт у меня есть, но всё же...если не трудно - напишите.


ANTPro   (2007-12-10 01:37:00) [6]

http://www.kolnmck.ru/files/demo/demotvnlvdrag.7z
http://www.kolnmck.ru/files/demo/dnd.7z
---
Должно помочь, хоть и не ListBox :)


Elec3C   (2007-12-10 00:54:00) [7]

Мне нужно перемещение итемов в листбоксе, а не добавление пути файла.


Compiler   (2007-12-09 21:54:00) [8]

procedure TForm1.ListBox1DropFiles(Sender: PControl;
 const FileList: KOL_String; const Pt: TPoint);
var
 s:string;
begin
s:=FileList;
while Pos(#13,s)<>0 do
listbox1.Add( Parse(s,#13));
listbox1.Add(FileList)
end;


Наверх

Титульная страница Поиск, карта сайта Написать письмо