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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 06.03.2016, 14:30
Аватар для Stalker2-42
Stalker2-42 Stalker2-42 вне форума
Новичок
 
Регистрация: 28.09.2013
Сообщения: 94
Версия Delphi: 2010
Репутация: 10
По умолчанию Прокрутка ListView при перетаскивании элемента (LVN_BEGINDRAG). WinAPI

Здравствуйте.

Задача в следующем:
Как реализовать прокрутку ListView при перетаскивание элемента (LVN_BEGINDRAG), если курсор находится в верхней или нижней части ListView.
Drag'n'Drop работает, но перемещение могу делать только в видимой части списка.
Как сделать, понятие не имею.

Помогите пожалуйста.
Ответить с цитированием
  #2  
Старый 06.03.2016, 15:49
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Так попробуй:
Код:
procedure TForm9.ListView1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
Const
  HotArea = 10;
begin
 if Y in[ListView1.Height - HotArea..ListView1.Height]
 then SendMessage(ListView1.Handle, WM_VSCROLL, SB_LINEDOWN, 0);
 if Y in [0..HotArea]
 then SendMessage(ListView1.Handle, WM_VSCROLL, SB_LINEUP, 0);
 Accept := True;
end;
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #3  
Старый 06.03.2016, 15:51
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Странный косяк на форуме с обработкой синтаксиса.
В исходном сообщении "if Y in [" пробел есть, а после обработки нет "if Y in["
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #4  
Старый 06.03.2016, 16:15
Аватар для Stalker2-42
Stalker2-42 Stalker2-42 вне форума
Новичок
 
Регистрация: 28.09.2013
Сообщения: 94
Версия Delphi: 2010
Репутация: 10
По умолчанию

Цитата:
Сообщение от Страдалецъ
Так попробуй:
Код:
procedure TForm9.ListView1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
Const
  HotArea = 10;
begin
 if Y in[ListView1.Height - HotArea..ListView1.Height]
 then SendMessage(ListView1.Handle, WM_VSCROLL, SB_LINEDOWN, 0);
 if Y in [0..HotArea]
 then SendMessage(ListView1.Handle, WM_VSCROLL, SB_LINEUP, 0);
 Accept := True;
end;


DragOver?
Я Только через API, без VCL, делаю.
Так что DragOver мне не понятно.
Ответить с цитированием
  #5  
Старый 06.03.2016, 17:23
Аватар для Stalker2-42
Stalker2-42 Stalker2-42 вне форума
Новичок
 
Регистрация: 28.09.2013
Сообщения: 94
Версия Delphi: 2010
Репутация: 10
По умолчанию

Цитата:
Сообщение от Страдалецъ
Так попробуй:

Попробовал, но через таймер, примерно 300 мс.

Код:
procedure ABC(uTimerID, uMsg, dwUser, dw1, dw2 : Integer); stdcall;
Const
  HotArea = 10;
begin
  if P.Y in[LVRect.Bottom - HotArea..LVRect.Bottom] then
    SendMessage(LV, WM_VSCROLL, SB_LINEDOWN, 0);
  if P.Y in [{0..HotArea}24..50] then
    SendMessage(LV, WM_VSCROLL, SB_LINEUP, 0);
  ListView_RedrawItems(LV, indexlv - 5, IndexLV + 5); // без этого остаются следы
  UpdateWindow(lv);  //
end;
IndexLV -- возвращает номер item над которым мышка.
IndexLV := ListView_HitTest()

И во время движения содержимого ListView исчезает изображение переносимого итема, что с redraw, что без него.

Как можно исправить?

Последний раз редактировалось Stalker2-42, 06.03.2016 в 17:25.
Ответить с цитированием
  #6  
Старый 10.03.2016, 17:07
Аватар для Stalker2-42
Stalker2-42 Stalker2-42 вне форума
Новичок
 
Регистрация: 28.09.2013
Сообщения: 94
Версия Delphi: 2010
Репутация: 10
По умолчанию

Я так полагаю, нет желающих помочь?
Ответить с цитированием
  #7  
Старый 10.03.2016, 19:52
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Рад бы, но я через API не пишу, не встретил еще той задачи где мне это могло бы позарез потребоваться.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #8  
Старый 10.03.2016, 20:27
Аватар для Admin
Admin Admin вне форума
Администратор
 
Регистрация: 03.10.2005
Адрес: Россия, Москва
Сообщения: 1,534
Версия Delphi: Delphi 7
Репутация: выкл
По умолчанию

Цитата:
Сообщение от Stalker2-42
Я так полагаю, нет желающих помочь?
посомотри этот пример, может найдешь что-то полезное http://www.codeproject.com/Articles/...-by-drag-and-d
Ответить с цитированием
  #9  
Старый 10.03.2016, 21:55
Аватар для Stalker2-42
Stalker2-42 Stalker2-42 вне форума
Новичок
 
Регистрация: 28.09.2013
Сообщения: 94
Версия Delphi: 2010
Репутация: 10
По умолчанию

Цитата:
Сообщение от Admin
посомотри этот пример, может найдешь что-то полезное http://www.codeproject.com/Articles/...-by-drag-and-d


Я этот же пример и использовал.
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter