Недавно добавленные исходники

•  TDictionary Custom Sort  3 225

•  Fast Watermark Sources  2 990

•  3D Designer  4 750

•  Sik Screen Capture  3 259

•  Patch Maker  3 467

•  Айболит (remote control)  3 528

•  ListBox Drag & Drop  2 904

•  Доска для игры Реверси  80 776

•  Графические эффекты  3 843

•  Рисование по маске  3 171

•  Перетаскивание изображений  2 544

•  Canvas Drawing  2 672

•  Рисование Луны  2 500

•  Поворот изображения  2 092

•  Рисование стержней  2 120

•  Paint on Shape  1 525

•  Генератор кроссвордов  2 183

•  Головоломка Paletto  1 730

•  Теорема Монжа об окружностях  2 158

•  Пазл Numbrix  1 649

•  Заборы и коммивояжеры  2 016

•  Игра HIP  1 262

•  Игра Go (Го)  1 200

•  Симулятор лифта  1 422

•  Программа укладки плитки  1 177

•  Генератор лабиринта  1 512

•  Проверка числового ввода  1 297

•  HEX View  1 466

•  Физический маятник  1 322

•  Задача коммивояжера  1 357

 
скрыть


Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Delphi Sources

Изменение позиций элементов ListBox с помощью Drag and Drop 2



Автор: Nick Hodges (Monterey, CA)

Я хотел бы изменить порядок следования элементов в неотсортированном списке ListBox методом drag&drop, т.е. просто перетаскивая их мышью на нужное место. Будет еще лучше, если при удержании кнопки мыши перетаскиваемый элемент визуально перемещал бы вверх или вниз сам список (для определения своего нового месторасположения) до тех пор, пока клавиша мыши не будет отпущена (как я понял, автоматическое скроллирование - В.О.).

Попробуйте для начала это:


unit Draglb;

interface

uses
  SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
  Forms, Dialogs, StdCtrls;

type
  TDragListBox = class(TListBox)
  private
    { Private declarations }
  protected
    { Protected declarations }
  public
    { Public declarations }
    procedure DragOver(Sender, Source: TObject; X, Y: Integer; State:
      TDragState; var Accept: Boolean);
    procedure DragDrop(Sender, Source: TObject; X, Y: Integer);
    constructor Create(AOwner: TComponent); override;
    { Published declarations }
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Custom', [TDragListBox]);
end;

constructor TDragListBox.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  DragMode := dmAutomatic;
  OnDragDrop := DragDrop;
  OnDragOver := DragOver;
end;

procedure TDragListBox.DragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
  Accept := Source = Self;
end;

procedure TDragListBox.DragDrop(Sender, Source: TObject; X, Y: Integer);
var
  Value: Integer;
begin
  if Sender = Self then
  begin
    Value := Self.ItemAtPos(Point(x, y), True);

    if Value = -1 then
    begin
      Self.Items.Add(Self.Items[Self.ItemIndex]);
      Self.Items.Delete(Self.ItemIndex);
    end
    else
    begin
      Self.Items.Insert(Value {+ 1}, Self.Items[Self.ItemIndex]);
      Self.Items.Delete(Self.ItemIndex);
    end;
  end;
end;

end.

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





Похожие по теме исходники

Изменение цвета изображения

CheckListBox Draw

Search text in ListBox

ListBox Hints

 

ListBox Elements Sort

Transparent ListBox

ListBox ComboBox

File icons in TFileListBox

 

ListBox Drag & Drop

Текст Drag & Drop

Drag and Drop Text

Quick Drag & Drop

 

Dragster Tree Relay

Backup and Restore

Market Monitoring and Billing

Black and White Effects

 

Sand Dog

Wave and MIDI In-Out

Vista and 7 Sound

Improved Buttons and ProgressBar

 

Desktop Sands

Rotation and Symmetry

Dropper (пипетка Фотошоп)




Copyright © 2004-2024 "Delphi Sources" by BrokenByte Software. Delphi World FAQ

Группа ВКонтакте