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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.08.2008, 11:55   #1
MAKEDON
The First Person!
Форумчанин
 
Аватар для MAKEDON
 
Регистрация: 07.08.2007
Сообщений: 228
По умолчанию Drag&Drop в ListBox'ах

Доброго времени суток! У меня тут возникла проблема с перемещением строки из одного листбокса в другой! Вот код, но не могу понять в чем ошибся!

Код:
procedure TForm1.ListBox2DragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
if source = listbox1 then accept:= true else accept:= false;
end;

procedure TForm1.ListBox2DragDrop(Sender, Source: TObject; X, Y: Integer);
begin
with source as  Tlistbox do
items.Delete(ItemIndex) ;
listbox2.Items.Add(items[ItemIndex])
end;
Программа обычно делает то что вы ей сказали сделать, а не то что бы вы хотели, чтобы она сделала.

Последний раз редактировалось MAKEDON; 21.08.2008 в 14:44.
MAKEDON вне форума Ответить с цитированием
Старый 21.08.2008, 12:35   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Разбираться не буду просто рабочий пример покажу:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    ListBox1: TListBox;
    ListBox2: TListBox;
    procedure ListBox2EndDrag(Sender, Target: TObject; X, Y: Integer);
    procedure ListBox2DragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
    procedure ListBox2DragDrop(Sender, Source: TObject; X, Y: Integer);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.ListBox2EndDrag(Sender, Target: TObject; X, Y: Integer);
begin
caption:='ads';
end;

procedure TForm1.ListBox2DragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
//
end;

procedure TForm1.ListBox2DragDrop(Sender, Source: TObject; X, Y: Integer);
var i:integer;
begin
//
i:=TListBox(Sender).ItemAtPos(point(x,y),true);
if (i<>-1) then begin
 TListBox(Sender).Items.Insert(i,TListBox(Source).Items[TListBox(Source).ItemIndex]);
end else
 TListBox(Sender).Items.Add(TListBox(Source).Items[TListBox(Source).ItemIndex]);

end;

procedure TForm1.FormCreate(Sender: TObject);
begin
ListBox1.DragMode:=dmAutomatic;
ListBox2.DragMode:=dmAutomatic;

end;

end.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.08.2008, 12:56   #3
MAKEDON
The First Person!
Форумчанин
 
Аватар для MAKEDON
 
Регистрация: 07.08.2007
Сообщений: 228
По умолчанию

Объясни плиз эту часть..что то не понимаю..

Код:
procedure TForm1.ListBox2DragDrop(Sender, Source: TObject; X, Y: Integer);   
var i:integer;   
begin   
//   
i:=TListBox(Sender).ItemAtPos(point(x,y),true);   
if (i<>-1) then begin   
 TListBox(Sender).Items.Insert(i,TListBox(Source).Items[TListBox(Source).ItemIndex]);   
end else   
 TListBox(Sender).Items.Add(TListBox(Source).Items[TListBox(Source).ItemIndex]);   
  
end;
Программа обычно делает то что вы ей сказали сделать, а не то что бы вы хотели, чтобы она сделала.

Последний раз редактировалось MAKEDON; 21.08.2008 в 12:57. Причина: Орфография
MAKEDON вне форума Ответить с цитированием
Старый 21.08.2008, 13:12   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

После того как ты отпустил мышу здесь получаем номер Итема в целевом списке по координатам мыши
Код:
i:=TListBox(Sender).ItemAtPos(point(x,y),true);
Таким образом получим местоположение куда нуна перетащить.
Далее если мыша указывает на непустое место, или точнее указывает на один из итемов в цели добавляем его после итема над которым мыша:
Код:
if (i<>-1) then begin      
 TListBox(Sender).Items.Insert(i,TListBox(Source).Items[TListBox(Source).ItemIndex]);
Иначе добавляем в конец.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
drag $ drop в DBGrid AlexandrSid Общие вопросы Delphi 13 21.06.2010 10:55
Помогите с drag-and-drop Cezar Win Api 3 19.10.2008 15:48
Drag&Drop по сети в Delphi vovan-brn Помощь студентам 0 28.05.2008 23:12
Drag&Drop shtuceron Общие вопросы Delphi 3 09.04.2008 19:04
Drag and Drop Xardas Общие вопросы Delphi 8 20.01.2008 23:09