Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.004 c
1-32204
Priz_Datiy
2002-01-26 14:04
2002.02.11
Мастера !!! ПОМОЩЬ!!!!!!


1-32230
kioto
2002-01-27 01:08
2002.02.11
Отображение содержимого ТОЛЬКО МОЕГО окна при перетаскивании


4-32366
is445
2001-12-12 22:13
2002.02.11
Помогите создать простую форму и пару компонент.


3-32137
Sergant
2002-01-12 04:35
2002.02.11
Строковые поля длинй больше 255


1-32248
Solod
2002-01-28 04:32
2002.02.11
Помогите новичку.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский