Конференция "KOL" » Drag'n'Drop в ListBox [Delphi]
 
  • Elec3C © (09.12.07 20:12) [0]
    Можете привести пример Drag'n'Drop(перемещение элемента) в ListBox.
  • Compiler (09.12.07 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 © (10.12.07 00:54) [2]
    Мне нужно перемещение итемов в листбоксе, а не добавление пути файла.
  • ANTPro © (10.12.07 01:37) [3]
  • Elec3C © (10.12.07 16:52) [4]

    > ANTPro ©

    Так эт у меня есть, но всё же...если не трудно - напишите.
  • Sapersky (10.12.07 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 © (10.12.07 19:17) [6]
    Спасибо. А в чём заключается кривость?
  • Sapersky (10.12.07 20:44) [7]
    Н-ну, кривость скорее идеологическая - никакой инкапсуляции, отдельно какая-то функция и какие-то переменные валяются... для встраивания в новый проект нужно хоть пару строчек, но написать.
    Впрочем, в demotvnlvdrag ещё хуже, автор про встраиваемость вообще не думал.
  • Elec3C © (10.12.07 23:46) [8]

    > Sapersky

    Да и так всё прекрасно работает))
 
Конференция "KOL" » Drag'n'Drop в ListBox [Delphi]
Есть новые Нет новых   [134431   +10][b:0][p:0.002]