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

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

Підкажіть, як правильно зробити прокрутку в TreeView коли відбувається DragDrop. Сама прокрутка у мене працює, але на дереві залишається "сміття". Пробував навіть робити 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 тільки тим, що дозволяє робити DragDrop всередині себе.

І попутно друге питання. Як дізнатися яка буде висота горизонтальної смуги прокрутки за замовчуванням при поточному дозволі екрану? А то доводиться ставити невидиму смужку на форму і брати її Height.

По другому питанню.
GetSystemMetrix SM_CXVSCROLL, SM_CYVSCROLL

а ти не пробував робити T.ScrollBy (DX, DY)?

уточнення до sky3d - функція називається GetSystemMetrics, потрібний параметр SM_CYHSCROLL

Затримка не допомагає. Які будуть ще пропозиції?

причому тут затримка? ти Sleep намагався робити чи що?

а якщо зробити просто як в цьому прикладі на VB - на DragOver включаємо таймер і скролліруем за подією від таймера?

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

Переніс приклад на Delphi один в один. Та ж нісенітниця виходить :(.
Можу надіслати скріншот кому цікаво. Доведеться не полінуватися і встановити VB заради того, щоб перевірити цей HowTo в оригіналі.

ти краще код прийшли

Дивно. А версія common controls у тебе правильна? А дерево не OwnerDraw? У мене твій код працює. Про всяк випадок - можна спробувати замінити Perform на

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

Спасибі всім, хто брав участь в обговоренні.
хай щастить

Пам'ять: 0.74 MB
Час: 0.025 c