Форум: "Основная";
Текущий архив: 2004.04.18;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.029 c