Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 05.11.2012, 18:51
Аватар для sariman
sariman sariman вне форума
Активный
 
Регистрация: 19.11.2011
Адрес: Украина, Луганская обл.
Сообщения: 244
Версия Delphi: 7, XE, Lazarus
Репутация: выкл
По умолчанию Drag&Drop нескольких элементов "на лету" в ListBox

Здравствуйте! Столкнулся с такой проблемой, перемещение нескольких элементов в ListBox именно пкм, так как выделение у меня происходит левой, а перемещение хотелось бы правой, причем на лету - т.е. не только после того как я отпустил клавишу мышки, перемещать, а именно при зажатии. В интернете полно примеров, но они не подходят по вышеперечисленному, листбокс - это у меня плэйлист в плеере. Заранее спасибо!
Ответить с цитированием
  #2  
Старый 06.11.2012, 09:16
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

в событии OnMouseDown:
Код:
begin
  if Button=mbRight then
  begin
    // do it
  end;
end;
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #3  
Старый 06.11.2012, 17:38
Аватар для sariman
sariman sariman вне форума
Активный
 
Регистрация: 19.11.2011
Адрес: Украина, Луганская обл.
Сообщения: 244
Версия Delphi: 7, XE, Lazarus
Репутация: выкл
По умолчанию

Хаха, юморист вы)) Повторяюсь: я не знаю как реализовать Drag&Drop нескольких элементов.
Ответить с цитированием
  #4  
Старый 07.11.2012, 09:09
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Цитата:
Сообщение от sariman
я не знаю как реализовать Drag&Drop нескольких элементов.
точно так же как и одного...
Код:
procedure TForm1.ListBox1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if Button=mbRight then ListBox1.BeginDrag(True);
end;

procedure TForm1.ListBox2DragDrop(Sender, Source: TObject; X, Y: Integer);
begin
  if Source=ListBox1 then ShowMessage(IntToStr(TListBox(Source).SelCount));
end;

procedure TForm1.ListBox2DragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
  Accept:=True;
end;
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #5  
Старый 07.11.2012, 10:01
Аватар для sariman
sariman sariman вне форума
Активный
 
Регистрация: 19.11.2011
Адрес: Украина, Луганская обл.
Сообщения: 244
Версия Delphi: 7, XE, Lazarus
Репутация: выкл
По умолчанию

Элементы не перемещаются
Ответить с цитированием
  #6  
Старый 07.11.2012, 10:25
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

http://zalil.ru/33934484
левой мышкой выделяй, правой перетаскивай. с Apple Magic Mouse не проверял...
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #7  
Старый 07.11.2012, 16:12
Аватар для sariman
sariman sariman вне форума
Активный
 
Регистрация: 19.11.2011
Адрес: Украина, Луганская обл.
Сообщения: 244
Версия Delphi: 7, XE, Lazarus
Репутация: выкл
По умолчанию

Спасибо, но первое: тут даже нету исходника. Второе: вы не правильно поняли слово "на лету" - я хотел сказать, что перемещать не с одного listbox'а в другой, а просто перемещать элементы не только когда отпустил клавишу мышки, а сразу.
Ответить с цитированием
  #8  
Старый 07.11.2012, 16:16
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от sariman
я хотел сказать, что перемещать не с одного listbox'а в другой, а просто перемещать элементы не только когда отпустил клавишу мышки, а сразу.
Назови пример приложения в котором Drag&Drop происходит не при отпускании кнопки, а сразу.
Ответить с цитированием
  #9  
Старый 07.11.2012, 16:28
Аватар для sariman
sariman sariman вне форума
Активный
 
Регистрация: 19.11.2011
Адрес: Украина, Луганская обл.
Сообщения: 244
Версия Delphi: 7, XE, Lazarus
Репутация: выкл
По умолчанию

Плеер Billy, прикрепил.
Вложения
Тип файла: zip billy104k.zip (515.6 Кбайт, 6 просмотров)
Ответить с цитированием
  #10  
Старый 08.11.2012, 09:13
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

1. "исходник (основная часть, необходимая и достаточная)" есть в 4-ом сообщении
2. ну значит действительно не понял что требуется. сделай gif или avi как должно выглядеть
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #11  
Старый 08.11.2012, 17:30
Аватар для sariman
sariman sariman вне форума
Активный
 
Регистрация: 19.11.2011
Адрес: Украина, Луганская обл.
Сообщения: 244
Версия Delphi: 7, XE, Lazarus
Репутация: выкл
По умолчанию

Я кинул пример, поклацайте в нем плэйлист.
Ответить с цитированием
  #12  
Старый 09.11.2012, 16:54
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Можно сделать примерно так:
Код:
var
  OldIndex: Integer;

procedure TForm1.ListBox1DragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
var
  NewIndex, i1, i2, DiffIdx, Direct: Integer;
begin
  case State of
    dsDragEnter: OldIndex := ListBox1.ItemAtPos(Point(X, Y), True);
    dsDragMove:
      begin
        NewIndex := ListBox1.ItemAtPos(Point(X, Y), True);
        DiffIdx := NewIndex - OldIndex;

        if DiffIdx < 0 then
        begin
          i1 := 0;
          Direct := +1;
        end else
        begin
          i1 := ListBox1.Items.Count - 1;
          Direct := -1;
        end;

        ListBox1.Items.BeginUpdate;
        try
          while (i1 >= 0) and (i1 < ListBox1.Items.Count) do
          begin
            if ListBox1.Selected[i1] then
            begin
              i2 := i1 + DiffIdx;
              if (i2 < 0) or (i2 >= ListBox1.Items.Count) then Break;
              ListBox1.Items.Move(i1, i2);
              ListBox1.Selected[i2] := True;
            end;
            i1 := i1 + Direct;
          end;
        finally
          ListBox1.Items.EndUpdate;
        end;

        OldIndex := NewIndex;
      end;
  end;
end;
Ответить с цитированием
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение:
sariman (14.11.2012)
  #13  
Старый 09.11.2012, 23:09
Аватар для sariman
sariman sariman вне форума
Активный
 
Регистрация: 19.11.2011
Адрес: Украина, Луганская обл.
Сообщения: 244
Версия Delphi: 7, XE, Lazarus
Репутация: выкл
По умолчанию

Спасибо, но перемещение не происходит, может быть нужно что-то прописать в DragDrop?
Ответить с цитированием
  #14  
Старый 10.11.2012, 05:04
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от sariman
Спасибо, но перемещение не происходит, может быть нужно что-то прописать в DragDrop?
У ListBox'а установи в свойстве DragMode значение "dmAutomatic".
Ответить с цитированием
  #15  
Старый 10.11.2012, 10:06
Аватар для sariman
sariman sariman вне форума
Активный
 
Регистрация: 19.11.2011
Адрес: Украина, Луганская обл.
Сообщения: 244
Версия Delphi: 7, XE, Lazarus
Репутация: выкл
По умолчанию

Стоит ведь, странно, можете скинуть пример (исходник)? если не трудно..
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 09:55.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025