Прокрутка при 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