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

Вниз

Drag n Drop в ListBox   Найти похожие ветки 

 
Elec3C ©   (2007-12-09 20:12) [0]

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


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

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;


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

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


 
ANTPro ©   (2007-12-10 01:37) [3]

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


 
Elec3C ©   (2007-12-10 16:52) [4]


> ANTPro ©

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


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

Есть такой (несколько кривоватый) вариант. Используется в 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 19:17) [6]

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


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

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


 
Elec3C ©   (2007-12-10 23:46) [8]


> Sapersky

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



Страницы: 1 вся ветка

Текущий архив: 2009.02.15;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.013 c
4-1205580795
Леха
2008-03-15 14:33
2009.02.15
Ловушки(Hook)


15-1229697522
zorik
2008-12-19 17:38
2009.02.15
Проектирование бизнес-логики работы с БД


15-1229612286
axis_of_evil
2008-12-18 17:58
2009.02.15
Silicon Graphics Octane


15-1228372329
nnov
2008-12-04 09:32
2009.02.15
Включеная флэшка картридера


2-1230721519
demon
2008-12-31 14:05
2009.02.15
Как узнать создан ли класс?