Главная страница
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.015 c
2-1231224543
Igor'
2009-01-06 09:49
2009.02.15
Как узнать название поля DBGridEh -где изменилось значение?


15-1229929327
Slider007
2008-12-22 10:02
2009.02.15
С днем рождения ! 21 декабря 2008 воскресенье


3-1214981326
Erick
2008-07-02 10:48
2009.02.15
Сортировка строкового поля как числового(D10/FoxPro/ADO)


3-1215351058
Kolan
2008-07-06 17:30
2009.02.15
LIKE в SQLite или как без него обойтись.


15-1229613114
Andy BitOff
2008-12-18 18:11
2009.02.15
DevExpress и BandedView или как-то по другому.