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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.02.2013, 06:00   #1
igh0st
Форумчанин
 
Аватар для igh0st
 
Регистрация: 05.07.2010
Сообщений: 136
По умолчанию Компонент грида с таскабельными записями

Чтобы можно было мышкой зацепить запись и переместить ее выше/ниже, при этом чтобы текущая позиция вставки как-то идентифицировалась, например как в AIMP, когда меняется позиция выранного трека - подсвечивается жирной линией. Может кто встречал, я что-то на вскидку не могу ничего подобрать. Можно конечно запрограммировать штатную гриду или ListView через BeginDrag, но там не будет подстветки позиции вставки.
igh0st вне форума Ответить с цитированием
Старый 22.02.2013, 07:11   #2
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Drag And Drop в Listbox. Особенно первая ссылка.
Жирную линию рисовать самому на Canvas в обработчике OnDragOver.

Добавлено -----------------------------------------------------------------------------------------------
Код:
procedure TForm1.ListBox1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
var
  r: TRect;
  i: Integer;
begin
  Accept := (Source = ListBox1) and (ListBox1.ItemIndex >= 0);
  if Accept then with ListBox1 do begin
    i := ItemAtPos (Point(X,Y+(ItemHeight div 2)), False);
    if i = -1 then
      r := ItemRect (Count)
    else
      r := ItemRect (i);
    ListBox1.Refresh;
    Canvas.Pen.Width := 3;
    Canvas.Pen.Color := clBlack;
    Canvas.MoveTo (r.Left, r.Top);
    Canvas.LineTo (r.Right, r.Top);
  end;
end;

procedure TForm1.ListBox1DragDrop(Sender, Source: TObject; X, Y: Integer);
var
  i: Integer;
  s: String;
  o: TObject;
begin
  if Source = ListBox1 then with ListBox1 do begin
    s := Items.Strings [ItemIndex];
    o := Items.Objects [ItemIndex];
    i := ItemAtPos (Point(X,Y+(ItemHeight div 2)), False);
    if i > ItemIndex then i := i - 1;
    Items.Delete(ItemIndex);
    if i = -1 then
      Items.AddObject (s, o)
    else
      Items.InsertObject (i, s, o);
  end;
end;

Последний раз редактировалось Sibedir; 22.02.2013 в 07:48.
Sibedir вне форума Ответить с цитированием
Старый 22.02.2013, 07:33   #3
igh0st
Форумчанин
 
Аватар для igh0st
 
Регистрация: 05.07.2010
Сообщений: 136
По умолчанию

Цитата:
Сообщение от Sibedir Посмотреть сообщение
Drag And Drop в Listbox. Особенно первая ссылка.
Жирную линию рисовать самому на Canvas в обработчике OnDragOver.
Спасибо, но это уже совсем крайний вариант. Всё-таки хотелось бы какое-нибудь профессиональное решение, с автоорисовкой сепаратора и полупрозрачным изображением строки, которую тащат. Задача-то по-большому счету достаточно востребованная, на мой взгляд.
igh0st вне форума Ответить с цитированием
Старый 22.02.2013, 07:44   #4
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Ищите сторонние компоненты.
Sibedir вне форума Ответить с цитированием
Старый 22.02.2013, 08:31   #5
Host-2013
Пользователь
 
Регистрация: 02.02.2013
Сообщений: 63
По умолчанию

goRowMoving goColMoving уже не катят?
Host-2013 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Чекбокс в заголовке грида и процедура Claster Помощь студентам 3 13.09.2011 11:20
Правильная раскраска строк грида $T@LKER Компоненты Delphi 2 02.09.2011 15:25
Раскраска строк грида $T@LKER Общие вопросы Delphi 0 01.09.2011 16:52
столбцы грида в список Aleksandr Общие вопросы Delphi 2 03.06.2011 16:02
Видимость колонок Грида Aleksandr Общие вопросы Delphi 2 26.04.2011 17:15