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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 02.01.2009, 19:01
diz diz вне форума
Прохожий
 
Регистрация: 02.01.2009
Сообщения: 4
Репутация: 10
По умолчанию ListBox и Drag&Drop

Доброго всем времени суток... обрыл весь поиск нигде не нашёл упоминания, как сделать с ListBox нечто вроде списка контактов в qip, а именно, чтобы при перетаскивании отображалась полоска с позицией куда будет помещен при перетаскивании элемент списка... Как вариант есть идея отображать при перетаскивании bevel высотой 1 пиксел и при перемещении менять позицию bevel на позицию высоты элемента над которым мышь - но как получить эту координату? А может я зря парюсь и есть готовый бесплатный компонент?
Ответить с цитированием
  #2  
Старый 02.01.2009, 21:12
Аватар для 0nni
0nni 0nni вне форума
Начинающий
 
Регистрация: 13.12.2008
Адрес: Туапсе
Сообщения: 161
Репутация: 20
По умолчанию

Просто вручную перерисовывать, я так делал.
__________________
...сказал, и загрустил от бесспорной своей правоты
Ответить с цитированием
  #3  
Старый 02.01.2009, 23:39
diz diz вне форума
Прохожий
 
Регистрация: 02.01.2009
Сообщения: 4
Репутация: 10
По умолчанию

Перерисовывать в каком плане? вопрос был немного в другом - что при перетаскивании элемента появляется полоска показывающая куда элемент должен будет поместится при бросании его...

Ну и в догонку ещё один вопрос... если список не умещается и появляется полоса прокрутки вертикальная - то когда я перетаскиваю допустим первый элемент к низу списка я подвожу курсор к низу ListBox'a - а автоматической прокрутки списка дальше не происходит... приходится отпускать элемент, прокручивать ListBox, а затем дальше делать перетаскивание... Кто нить с этим боролся?
Ответить с цитированием
  #4  
Старый 03.01.2009, 00:18
Аватар для 0nni
0nni 0nni вне форума
Начинающий
 
Регистрация: 13.12.2008
Адрес: Туапсе
Сообщения: 161
Репутация: 20
По умолчанию

Такой вариант устроит?
Код:
procedure TForm1.ListBox1DragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
var i : Integer;
    rt : TRect;
    dc : Cardinal;
begin
  if y <= 4 then istBox1.TopIndex := ListBox1.TopIndex - 1;
  if y >= ListBox1.Height - 4 then ListBox1.TopIndex := ListBox1.TopIndex + 1;

  i := ListBox1.ItemAtPos(Point(x,y), true);
  if ListBox1.Tag = i then exit;
  rt := ListBox1.ItemRect(ListBox1.Tag);
  InvalidateRect(ListBox1.Handle, @rt, true);
  ListBox1.Tag := i;
  rt := ListBox1.ItemRect(i);
  dc := GetDC(ListBox1.Handle);
    MoveToEx(dc, rt.Left, rt.Top + 1, nil);
    LineTo(dc, rt.Right, rt.Top + 1);
  ReleaseDC(ListBox1.Handle, dc);
end;
Дальше доработай.
__________________
...сказал, и загрустил от бесспорной своей правоты

Последний раз редактировалось 0nni, 03.01.2009 в 00:29.
Ответить с цитированием
  #5  
Старый 03.01.2009, 00:23
diz diz вне форума
Прохожий
 
Регистрация: 02.01.2009
Сообщения: 4
Репутация: 10
По умолчанию

Хм похоже это то что надо - завтра поковыряю, спасибо!!! Но вот со вторым вопросом до сих пор засада!!!
Ответить с цитированием
  #6  
Старый 03.01.2009, 00:31
Аватар для 0nni
0nni 0nni вне форума
Начинающий
 
Регистрация: 13.12.2008
Адрес: Туапсе
Сообщения: 161
Репутация: 20
По умолчанию

По второму вопросу, я вначале еще две строчки добавил.
__________________
...сказал, и загрустил от бесспорной своей правоты
Ответить с цитированием
  #7  
Старый 03.01.2009, 00:39
diz diz вне форума
Прохожий
 
Регистрация: 02.01.2009
Сообщения: 4
Репутация: 10
По умолчанию

Что ж, вроде тоже работает - опять же завтра доковыряю... МОжет и с последним вопросом поможеш? При перетаскивании файлов на форму я их добавляю в ListBox, это не сложно! но вот вытаскивать файлы из ListBox'a наоборот например на рабочий стол - это сложнее! Порывшись в нете я нашёл только один способ - это компонент TDropper. Работает он вроде неплохо, но тут проблемма вот в чем, нужно как то отследить перемещение мыши внутри ListBox'a и за его пределами... Т.е. пока мыш таскает запись внутри списка то тупа делаем Drag&Drop внутри компонента - а когда я вытаскиваю за пределы компонента и отпускаю допустим над рабочим столом - то тогда задействовать компонент Dropper. Но как отличить перемещение внутри и за пределами не знаю - не поможеш? А ещё лучше аськой не поделишся? Я бы поспрашал кое что
Ответить с цитированием
  #8  
Старый 03.01.2009, 00:46
Аватар для 0nni
0nni 0nni вне форума
Начинающий
 
Регистрация: 13.12.2008
Адрес: Туапсе
Сообщения: 161
Репутация: 20
По умолчанию

416676939
TDropper? Помнится для этой цели тоже какой то компонент использовал, проблем не дыло. А вот ручками не делал.
__________________
...сказал, и загрустил от бесспорной своей правоты
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter