Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "KOL";
Текущий архив: 2009.02.15;
Скачать: [xml.tar.bz2];

Вниз

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 вся ветка

Форум: "KOL";
Текущий архив: 2009.02.15;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.005 c
11-1197220362
Elec3C
2007-12-09 20:12
2009.02.15
Drag n Drop в ListBox


2-1231239884
Alex_00h
2009-01-06 14:04
2009.02.15
Значения группе элементов в цикле


4-1202733177
JohnJ
2008-02-11 15:32
2009.02.15
управление программой, написанной на labview


2-1230585306
AlexF
2008-12-30 00:15
2009.02.15
Разослать почту


2-1230627520
LDV
2008-12-30 11:58
2009.02.15
SystemMenu





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский