Главная страница
    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.46 MB
Время: 0.005 c
3-1212053897
Сергей
2008-05-29 13:38
2009.02.15
Почему не работает сей запрос? ADO + MsAccess


2-1230902844
FEV
2009-01-02 16:27
2009.02.15
Формат файлов ASF


8-1187889577
solo.maestro
2007-08-23 21:19
2009.02.15
Замена звуковой дорожки в видеофайле


2-1231237384
RUBEY
2009-01-06 13:23
2009.02.15
Ошибка в коде отправки почты


2-1230562532
Artem
2008-12-29 17:55
2009.02.15
Место для процедур





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский