Форум: "Основная";
Текущий архив: 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, либо посмотрю код сам.
Спасибо всем, кто участвовал в обсуждении.
Удачи
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.02.11;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.003 c