Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.05.2014, 20:27   #1
Janger
Форумчанин
 
Регистрация: 28.09.2011
Сообщений: 250
По умолчанию Перемещать строки (ListBox)

В общем, нужно использовать компонент именно ListBox. Просто с ним, много чего связано....
Суть в том, что мне надо сделать так, что бы я мышкой мог бы перетаскивать строки.
В итоге, из:
1-2-3-4
Должно получиться
1-4-3-2
передвигая строки только мышкой.
-------------------
Я искал этот вопрос в гугле, вариантов много, я их пробовал, но ни один у меня не заработал
в общем, надеюсь тут кто нибудь мне подскажет что нибудь.
Всем спасибо
Janger вне форума Ответить с цитированием
Старый 18.05.2014, 21:02   #2
ZuBy
Участник клуба
 
Аватар для ZuBy
 
Регистрация: 29.09.2008
Сообщений: 1,234
По умолчанию

Items.Exchange, не?
ZuBy вне форума Ответить с цитированием
Старый 18.05.2014, 21:20   #3
Janger
Форумчанин
 
Регистрация: 28.09.2011
Сообщений: 250
По умолчанию

Цитата:
Сообщение от ZuBy Посмотреть сообщение
Items.Exchange, не?
В принципе да.
Но у меня вопрос. В вашем варианте строки меняются местами, а можно сделать так, что бы они не менялись местами. А что бы просто, выделенная строка перемещалась?
Janger вне форума Ответить с цитированием
Старый 18.05.2014, 21:27   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

DragMode=dmAutomatic и
Код:
procedure TForm1.ListBox1DragDrop(Sender, Source: TObject; X, Y: Integer);
begin
  if Source=ListBox1 then ListBox1.Items.Move(ListBox1.ItemIndex,ListBox1.ItemAtPos(Point(X,Y),True));
end;

procedure TForm1.ListBox1DragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
var xItemIndex: Integer;
begin
  xItemIndex:=ListBox1.ItemAtPos(Point(X,Y),True);
  Accept:=(Source=ListBox1) and (xItemIndex>=0) and (xItemIndex<>ListBox1.ItemIndex);
end;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 18.05.2014, 21:34   #5
Janger
Форумчанин
 
Регистрация: 28.09.2011
Сообщений: 250
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
DragMode=dmAutomatic и
Код:
procedure TForm1.ListBox1DragDrop(Sender, Source: TObject; X, Y: Integer);
begin
  if Source=ListBox1 then ListBox1.Items.Move(ListBox1.ItemIndex,ListBox1.ItemAtPos(Point(X,Y),True));
end;

procedure TForm1.ListBox1DragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
var xItemIndex: Integer;
begin
  xItemIndex:=ListBox1.ItemAtPos(Point(X,Y),True);
  Accept:=(Source=ListBox1) and (xItemIndex>=0) and (xItemIndex<>ListBox1.ItemIndex);
end;
Вот! Спасибо! Это то что мне было нужно. Спасибо!
Janger вне форума Ответить с цитированием
Старый 02.03.2021, 20:23   #6
cb251132
Пользователь
 
Регистрация: 29.06.2008
Сообщений: 23
По умолчанию

Здравствуйте, прошу уточнить если для реализации задачи перетаскивания строк между двумя компонентами методом Drag and Drop обработчики событий уже заняты, то как решить вопрос перемещения строк в одном из этих двух этих компонентов отдельно?
cb251132 вне форума Ответить с цитированием
Старый 02.03.2021, 20:34   #7
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Цитата:
Сообщение от cb251132 Посмотреть сообщение
Здравствуйте, прошу уточнить если для реализации задачи перетаскивания строк между двумя компонентами методом Drag and Drop обработчики событий уже заняты, то как решить вопрос перемещения строк в одном из этих двух этих компонентов отдельно?
Писать общий обработчик и обрабатывать Sender.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Старый 02.03.2021, 20:39   #8
cb251132
Пользователь
 
Регистрация: 29.06.2008
Сообщений: 23
По умолчанию

Цитата:
Сообщение от Pavia Посмотреть сообщение
Писать общий обработчик и обрабатывать Sender.
Благодарю за ответ.
cb251132 вне форума Ответить с цитированием
Старый 10.03.2021, 10:03   #9
Heneken87
Форумчанин
 
Регистрация: 27.04.2012
Сообщений: 219
По умолчанию

Цитата:
Сообщение от cb251132 Посмотреть сообщение
Здравствуйте, прошу уточнить если для реализации задачи перетаскивания строк между двумя компонентами методом Drag and Drop обработчики событий уже заняты, то как решить вопрос перемещения строк в одном из этих двух этих компонентов отдельно?
Еще вариант это унаследоваться от класса (наверное TListBox) и перехватывать сообщение винды. Ваши "занятые"события останутся не тронуты.
Пишу много и развернуто
Heneken87 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изменение строки в ListBox Ericnex Компоненты Delphi 4 19.03.2013 19:45
ListBox строки и картинки sxcine Мультимедиа в Delphi 3 02.02.2012 20:21
вывод строки в listbox c++ world12_tk Помощь студентам 2 17.09.2011 12:01
Перемещать строки вверх-вниз, с помощью стрелок. Rio309 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 6 27.10.2008 21:47
Строки в ListBox Ray1987 Компоненты Delphi 2 10.04.2007 00:57