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

Вниз

DragAndDrop в TTreeView   Найти похожие ветки 

 
Gero ©   (2004-03-29 23:00) [0]

Возникла проблема с перетаскиванием узлов в TTreeView.
При перетаскивании вызывается OnClick, а это нежелательно.
Сморел код процедуры BeginDrag и увидел следующую строчку:
Perform(WM_LBUTTONUP, 0, Longint(PointToSmallPoint(P)));

Казалось бы, логично перед BeginDrag делать OnClick := nil, а потом восстанавливать, но проблемы в том, где это делать:
OnStartDrag вызывается уже после.
Делал это в OnMouseMove:

if ssLeft in Shift then
 begin
   TreeView.OnClick := nil;
   TreeView.BeginDrag(Mouse.DragImmediate, Mouse.DragThreshold);
   TreeView.OnClick := TreeViewClick;
 end;

Но это очень коряво выглядит, да и потом другие проблемы из-за этого возникают.

Как же добиться, чтобы при DragAndDrop все проходило без клика?


 
nikkie ©   (2004-03-29 23:23) [1]

;)


 
Gero ©   (2004-03-29 23:53) [2]

> nikkie ©   (29.03.04 23:23)

Ага ;)


 
Gero ©   (2004-03-30 08:25) [3]

Пробовал писать наследника со своей реализацией BeginDrag, не получилось,
в Controls.pas много очень нужных процедур и переменных скрыты в разделе implementation.

Ну так что посоветуете, мастера?


 
Gero ©   (2004-03-30 17:43) [4]

Неужели никто не сталкивался, и даже мастера не знают, как это обойти?
Что-то не верится.
Или, может я чем-то не угодил...


 
VLAD-MAL   (2004-03-30 18:11) [5]

Попробуй вместо OnClick, использовать, к примеру, OnChange/OnChanging, к тому же - на мышку завязки не будет...

PS Я как-то мучался с похожими проблемами TTreeView, и  в конце концов перешел на TVirtuakTreeView...


 
nikkie ©   (2004-03-30 18:33) [6]

имхо, проблема в VCL реализации BeginDrag, которая посылает WM_LBUTTONUP. причем, метод BeginDrag не виртуальный и переопределить его не получится.

если писать наследника, то можно попробовать перехватить TVN_BEGINDRAG в CNNotify. или даже лучше не наследоваться, а просто перехватить WM_NOTIFY у формы.


 
nikkie ©   (2004-03-30 18:35) [7]

>к тому же - на мышку завязки не будет...
сие не есть плюс, это как раз минус.

в гугле я нашел несколько вопросов на эту тему, но решения не видно. один человек пишет:
I solved it setting a flag in OnStartDrag, and then I used the OnChange to starte the update procedure instead of OnClick. I Found that the events fired like this: OnMouseDown, OnClick, OnMouseUp, OnStartDrag, OnChange.

решение не фонтан - чтобы отработать клавиатуру отдельно от мышки, придется еще костыли расставлять.



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

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

Наверх




Память: 0.48 MB
Время: 0.034 c
3-1080067163
zeratul_pr
2004-03-23 21:39
2004.04.18
*.mdb ошибка!!!


14-1080111601
Goida
2004-03-24 10:00
2004.04.18
Черный Тюльпан...


1-1080786461
Артем К.
2004-04-01 06:27
2004.04.18
Казус в создании MDI-приложения с использование баз данных!


14-1079966626
Hamilkar
2004-03-22 17:43
2004.04.18
http://hard.compulenta.ru/2004/3/22/45823/?ref=right


3-1080193730
WodneRu
2004-03-25 08:48
2004.04.18
Русские символы в FB