Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Drag and Drop со списками

Delphi , Синтаксис , Drag and Drop

Drag and Drop со списками

Code:
{
This example shows how to drag&drop within a TListBox.
The Demo Program also shows how to implement an autoscroll-feature.
}
 
procedure TForm1.ListBox1DragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
  Accept := Sender is TListBox;
end;
 
procedure TForm1.ListBox1DragDrop(Sender, Source: TObject; X, Y: Integer);
var
  iTemp: Integer;
  ptTemp: TPoint;
  szTemp: string;
begin
 { change the x,y coordinates into a TPoint record }
  ptTemp.x := x;
  ptTemp.y := y;
 
 { Use a while loop instead of a for loop due to items possible being removed
  from listboxes this prevents an out of bounds exception }
  iTemp := 0;
   while iTemp <= TListBox(Source).Items.Count-1 do
 begin
    { look for the selected items as these are the ones we wish to move }
    if TListBox(Source).selected[iTemp] then
    begin
      { use a with as to make code easier to read }
      with Sender as TListBox do
      begin
      { need to use a temporary variable as when the item is deleted the
       indexing will change }
        szTemp := TListBox(Source).Items[iTemp];
 
        { delete the item that is being dragged  }
        TListBox(Source).Items.Delete(iTemp);
 
      { insert the item into the correct position in the listbox that it
      was dropped on }
        Items.Insert(itemAtPos(ptTemp, True), szTemp);
      end;
    end;
    Inc(iTemp);
 end;
end;
Взято с сайта: http://www.swissdelphicenter.ch

Пример реализации функции drag-and-drop в компоненте TListBox в Delphi. Демо-приложение также демонстрирует реализацию функции autoscroll.

Процедура ListBox1DragOver вызывается, когда пользователь перетаскивает элемент над списком. Она устанавливает параметр Accept в значение True, если перетаскиваемый элемент будет опущен на другой список, что указывает на то, что операция опускания разрешена.

Процедура ListBox1DragDrop вызывается, когда пользователь опускает элемент над списком. Она обрабатывает операцию опускания, перемещая выбранные элементы из источника в целевой список.

Схема работы кода:

  1. Переменная ptTemp используется для хранения координат места опускания.
  2. Цикл while используется вместо цикла for для итерации по элементам источника, потому что элементы могут быть удалены из списка во время процесса итерации.
  3. Выбранные элементы идентифицируются с помощью свойства Selected[iTemp], а если элемент выбран, то он перемещается из источника в целевой список с помощью метода Items.Insert.

Альтернативное решение:

Вместо использования цикла while для итерации по элементам источника можно использовать цикл for с временной переменной для хранения индекса текущего элемента. Это может быть более эффективно и легче для чтения:

procedure TForm1.ListBox1DragDrop(Sender, Source: TObject; X, Y: Integer);
var
  iTemp: Integer;
begin
   // ...
  for iTemp := 0 to TListBox(Source).Items.Count - 1 do
  begin
    if TListBox(Source).Selected[iTemp] then
    begin
       // ...
    end;
  end;
end;

Кроме того, можно использовать метод TListbox.Items.Move вместо удаления и вставки элементов по одному. Это может быть более эффективно:

procedure TForm1.ListBox1DragDrop(Sender, Source: TObject; X, Y: Integer);
var
  iTemp: Integer;
begin
   // ...
  for iTemp := 0 to TListBox(Source).Items.Count - 1 do
  begin
    if TListBox(Source).Selected[iTemp] then
    begin
      TListbox(Source).Items.Move(iTemp, 0);
      TListBox(Sender).Items.Insert(0, TListbox(Source).Items[0]);
    end;
  end;
end;

Обратите внимание, что эти альтернативные решения предполагают, что вы хотите переместить выбранные элементы из источника в целевой список. Если вы хотите скопировать или связать элементы вместо перемещения, вам нужно будет изменить код соответствующим образом.

Представлен пример кода на языке Delphi, демонстрирующий использование функции Drag and Drop для перемещения элементов из одного списка в другой.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Drag and Drop ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 13:23:11/0.0056681632995605/1