![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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;