IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

2 страниц V < 1 2  
 Ответить  Открыть новую тему 
> Работа со списком строк
сообщение
Сообщение #21


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

Репутация: -  2  +


Здраствуйте. У меня вопрос возник по механизму перетаскивания (технология Drag&Drop)..Например мне нужно перетащить объект из ListBox1 в ListBox2 и можно произвести обратную операцию (при этом из списка источника объект удаляется)..
Знаю, что работать нужно со свойствами DragCursor, DragKind,DragMode..и ещё нужны будут обработчики событий OnDragDrop и OnDragOver...
Вот только разобраться не могу, для какого ListBox (из 2-x) какой обработчик использовать и какие значения задавать для свойств DragCursor, DragKind,DragMode?

Объясните пожалуста!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #22


Гость






Значит, смотри: переносим из ListBox2 (источник) в ListBox1 (приемник)...

И источнику и приемнику назначаем DragMode = dmAutomatic, и у приемника в обработчиках OnDragOver/OnDragDrop делаем:

procedure TForm1.ListBox1DragDrop(Sender, Source: TObject; X, Y: Integer);
var currPeople: TPeople;
begin
if Source = ListBox2 then
begin
// При удалении строки из источника удаляется и объект, поэтому создаем новый !!!
currPeople := TPeople.Create(
TPeople(TListBox(Source).Items.Objects[TListBox(Source).ItemIndex]).fName,
TPeople(TListBox(Source).Items.Objects[TListBox(Source).ItemIndex]).fWorkshop,
TPeople(TListBox(Source).Items.Objects[TListBox(Source).ItemIndex]).fRange
);
// Добавляем его в приемник
TListBox(Sender).Items.AddObject(currPeople.fName, currPeople as TObject);
// Удаляем из источника
TListBox(Source).Items.Delete(TListBox(Source).ItemIndex);
end
end;

procedure TForm1.ListBox1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
// разрешаем перетаскивание только если источник - ListBox2, и в нем что-то выбрано
Accept := (Source = ListBox2) and (TListBox(Source).ItemIndex >= 0);
end;

Вот и все в принципе... Для обратной операции - меняешь в обработчиках источник (я специально сделал так, что изменить надо будет только в одном месте)
 К началу страницы 
+ Ответить 
сообщение
Сообщение #23


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

Репутация: -  2  +


Цитата(volvo @ 11.05.2008 23:13) *

Вот и все в принципе... Для обратной операции - меняешь в обработчиках источник (я специально сделал так, что изменить надо будет только в одном месте)

Спасибо большое за разъяснения!!))) Теперь разобралась!)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

2 страниц V < 1 2
 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 27.10.2020 16:10
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name