![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TreeView [D6, MSSQL]
DPetrovich © (2002-03-11 15:30:00)Добрый день!
У меня такая проблема. Когда щёлкают правой кнопкой по ветке дерева нужно узнать какая это ветка, я ставлю RightClickSelect=true для TreeView, но событие OnClick не срабатывает и после выбора из контекстного меню нужная ветвь не становится selected. Может кто сталкивался с таким? Заранее спасибо!
Akim2 (2002-03-15 12:46:00) [1]По-моему можно проще
Главное поставь свойство TreeView1.RightClickSelect := true;
var
Node : TTreeNode;
begin
// Получить ноду на кот сщелкул правой
Node := TTreeView(PopupMenu1.PopupComponent).Selected;
// Установить ее в актив
Node.Selected := true;
DPetrovich (2002-03-15 11:11:00) [2]Спасибо, попробую!
data (2002-03-11 17:53:00) [3]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 там поставить.
Набережных С. (2002-03-11 17:25:00) [4]
procedure TForm1.PopupMenu1Popup(Sender: TObject);
begin
with TreeView1 do Selected:=Selected;
end;
и RightClickSelect=true.
DPetrovich (2002-03-11 17:11:00) [5]Спасибо! Почти заработало, только возникло ещё две загвоздки. Во-первых в том виде который Вы привели событие MouseDown срабвтывает через раз, как я понял это из-за того что к дереву привязывается PopMenu , а вот если его убрать то событие нормально срабатывает. Я решил не привязывать меню к дереву, а вызывать вручную с помощью Popmenu1.PopUp(x,y) , но тогда менющка появляется не в том месте, видимо x и y в данном случае коородинаты относительно формы, а нужно абсолютные координаты. Как я понял в Вашем примере они вычиляются для
EmptyPopUp.PopUp(x1,y1). Не подскажите как?
data (2002-03-11 16:16:00) [6]У меня подобный обработчик вивит на 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;