Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.02.11;
Скачать: [xml.tar.bz2];




Вниз

Прокрутка при DragDrop 


BorisM   (2002-01-23 07:24) [0]

Подскажите, как правильно сделать прокрутку в TreeView когда происходит Drag&Drop. Сама прокрутка у меня работает, но на дереве остается "мусор". Пробовал даже делать Repaint, все равно не помогает.

Код такой:

procedure TMainForm1.T1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
if (Source is TLsFileListView28) or (Source is TDATreeView) then
Accept := true
else
begin
Accept := False;
exit;
end;
if Y > T1.Height - Sb1.Height - 10 then
T1.Perform(WM_VSCROLL, SB_LINEDOWN, 0)
else
if Y < 10 then
T1.Perform(WM_VSCROLL, SB_LINEUP, 0);
T1.Repaint;
end;


T1: TDATreeView;
SB1: TScrollBar;
TDATreeView отличается от обычного TreeView только тем, что позволяет делать Drag&Drop внутри себя.

И попутно второй вопрос. Как узнать какая будет высота горизонтальной полосы прокрутки по умолчанию при текущем разрешении экрана? А то приходиться ставить невидимую полоску на форму и брать ее Height.

Спасибо.



sky3d   (2002-01-23 09:25) [1]

По второму вопросу..
GetSystemMetrix SM_CXVSCROLL, SM_CYVSCROLL



nikkie   (2002-01-23 09:48) [2]

а ты не пробовал делать T.ScrollBy(DX, DY)?

уточнение к sky3d - функция называется GetSystemMetrics, нужный параметр SM_CYHSCROLL



BorisM   (2002-01-23 16:07) [3]

За GetSystemMetrics спасибо. Очень полезная функция - возьму на вооружение.
С T1.ScrollBy(DX,DY) еще хуже, чем с T1.Perform(..) Теперь программа просто размножает крайнюю верхнюю или нижнюю сторку при сдвиге.
Нашел вот этот пример http://support.microsoft.com/default.aspx?scid=kb;EN-US;q177743
Возможно нужно просто вставить задержку.



BorisM   (2002-01-23 18:58) [4]

Задержка не помогает. Какие будут еще предложения?



nikkie   (2002-01-23 19:18) [5]

причем здесь задержка? ты Sleep пытался делать что ли?

а если сделать просто как в этом примере на VB - на DragOver включаем таймер и скроллируем по событию от таймера?



BorisM   (2002-01-24 07:38) [6]

Нет не Sleep. Пробовал привязать к таймеру как в этом примере. Попробую теперь просто перевести весь пример из VB в Delphi.



BorisM   (2002-01-25 00:07) [7]

Перенес пример на Delphi один в один. Та же ерунда получается :(.
Могу прислать скриншот кому интересно. Придется не полениться и установить VB ради того, чтобы проверить этот HowTo в оригинале.



nikkie   (2002-01-25 09:44) [8]

ты лучше код пришли



DMN   (2002-01-25 11:19) [9]

Странно. А версия common controls у тебя правильная? А дерево не OwnerDraw? У меня твой код работает... На всякий случай - можно попробовать заменить Perform на

PostMessage(T1.Handle,WM_VSCROLL, SB_LINEDOWN, 0);



BorisM   (2002-01-25 19:49) [10]

Кажется нашел где собака зарыта.
Скроллинг при внутреннем DragDrop в TreeView работает нормально, но когда я хочу сделать DragDrop из TLsFilelistView28, при скроллинге в TreeView появляется "мусор". Я попробовал перетащить Item из простого FileListbox в мой TreeView и скроллинг тоже работает нормально. Похоже проблема с компонентом TLsFilelistView28. К тому же, когда я делаю Drag из него, курсор бывает блеклым и почему-то имя перетаскиваемого файла оказывается на разном расстоянии от самого курсора. Короче напишу автору TLsFilelistView28, либо посмотрю код сам.

Спасибо всем, кто участвовал в обсуждении.
Удачи




Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.02.11;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.73 MB
Время: 0.014 c
7-32362           miamy                 2001-11-04 15:40  2002.02.11  
DirectShow


1-32236           Rahim & Vad      2002-01-27 16:58  2002.02.11  
Отчаенье! Проблеммы с выводом на широкий формат! ПоМОООО гитееее


1-32199           BJValentine           2002-01-29 12:26  2002.02.11  
Excel + Delphi=...


6-32302           Мирон                 2001-11-20 19:03  2002.02.11  
Удаленный контроль за пользователем


14-32325          NLO                   2001-12-20 14:18  2002.02.11  
ZIP