-
Можете привести пример Drag'n'Drop(перемещение элемента) в ListBox.
-
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;
-
Мне нужно перемещение итемов в листбоксе, а не добавление пути файла.
-
-
> ANTPro ©
Так эт у меня есть, но всё же...если не трудно - напишите.
-
Есть такой (несколько кривоватый) вариант. Используется в 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;
-
Спасибо. А в чём заключается кривость?
-
Н-ну, кривость скорее идеологическая - никакой инкапсуляции, отдельно какая-то функция и какие-то переменные валяются... для встраивания в новый проект нужно хоть пару строчек, но написать. Впрочем, в demotvnlvdrag ещё хуже, автор про встраиваемость вообще не думал.
-
> Sapersky
Да и так всё прекрасно работает))
|