Текущий архив: 2002.03.28;
Скачать: CL | DM;
ВнизTreeView Найти похожие ветки
← →
DPetrovich (2002-03-11 15:30) [0]Добрый день!
У меня такая проблема. Когда щёлкают правой кнопкой по ветке дерева нужно узнать какая это ветка, я ставлю RightClickSelect=true для TreeView, но событие OnClick не срабатывает и после выбора из контекстного меню нужная ветвь не становится selected. Может кто сталкивался с таким? Заранее спасибо!
← →
data (2002-03-11 16:16) [1]У меня подобный обработчик вивит на MouseDown
примерно так
if (Button = mbRight) then
begin
if MyTreeView.Items.Count=0 then //Показать поп-меню для
//пустого дерева
EmptyPopUp.PopUp(x1,y1)
else
begin
TNode:=MyTreeView.GetNodeAt(x,y);
if TNode<>nil then
begin
//Узел делается Selected
TNode.Selected:=true;
//Показать другое меню
MyTreeView.PopupMenu:=MyPopMenu;
end;
end;
end;
← →
DPetrovich (2002-03-11 17:11) [2]Спасибо! Почти заработало, только возникло ещё две загвоздки. Во-первых в том виде который Вы привели событие MouseDown срабвтывает через раз, как я понял это из-за того что к дереву привязывается PopMenu , а вот если его убрать то событие нормально срабатывает. Я решил не привязывать меню к дереву, а вызывать вручную с помощью Popmenu1.PopUp(x,y) , но тогда менющка появляется не в том месте, видимо x и y в данном случае коородинаты относительно формы, а нужно абсолютные координаты. Как я понял в Вашем примере они вычиляются для
EmptyPopUp.PopUp(x1,y1). Не подскажите как?
← →
Набережных С. (2002-03-11 17:25) [3]
procedure TForm1.PopupMenu1Popup(Sender: TObject);
begin
with TreeView1 do Selected:=Selected;
end;
и RightClickSelect=true.
← →
data (2002-03-11 17:53) [4]2 DPetrovich (11.03.02 17:11)
Попробую :))
x и y - это координаты относительно (левого верхнего угла) дерева
x1:=MyForm.Left+MyTreeView.Left+x; - если дерево лежит прям на форме. Если оно лежит на панели какой то и проч., то прибавляйте Left панели, затем left дерева.
y1:=MyForm.Top+MyTreeView.Top+CnstHh+y;где CnstHh может вычисляться из разрешения, а может быть просто константой ( у меня =60). Это для того, чтоб меню чуть чуть пониже вызывалось, чем то место, где кликнете.
Странно, что у вас OnMouseDown плохо работает. У меня нормально, не через раз...Правда у меня еще довольно серьезная обработка в меню на OnPopUp висит, может из-за этого. Попробуйте маленький Sleep там поставить.
← →
DPetrovich (2002-03-15 11:11) [5]Спасибо, попробую!
← →
Akim2 (2002-03-15 12:46) [6]По-моему можно проще
Главное поставь свойство TreeView1.RightClickSelect := true;
var
Node : TTreeNode;
begin
// Получить ноду на кот сщелкул правой
Node := TTreeView(PopupMenu1.PopupComponent).Selected;
// Установить ее в актив
Node.Selected := true;
Страницы: 1 вся ветка
Текущий архив: 2002.03.28;
Скачать: CL | DM;
Память: 0.45 MB
Время: 0.006 c