Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.02.11;
Скачать: CL | DM;

Вниз

Прокрутка при 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, либо посмотрю код сам.

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



Страницы: 1 вся ветка

Текущий архив: 2002.02.11;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.009 c
3-32154
Hawk2
2002-01-16 11:48
2002.02.11
Помогите с кодировкой!!!


1-32218
Sergey Novoselow
2002-01-25 06:02
2002.02.11
Как разложить выражение 200101 на 2001 и 01


1-32266
Simonaln
2002-01-28 11:45
2002.02.11
Точное перемещение курсора


6-32298
Abzetdin
2001-11-18 22:08
2002.02.11
Передача динамического массива через Сокеты


7-32355
-=CrazyFish=-
2001-10-10 12:23
2002.02.11
Инфракрасный порт