Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.48 MB
Время: 0.014 c
14-91078
Королев
2002-02-12 22:07
2002.03.28
можно ли удалять свои темы и свои ответы здесь?


3-90742
Art1
2002-02-26 16:29
2002.03.28
Как скопировать из DBRichEdit в RichEdit и обратно?


3-90757
KAA
2002-03-01 13:12
2002.03.28
2000 собрать строку из записей в таблице


1-90830
Lego
2002-03-16 02:25
2002.03.28
Как добавить в Edit только имя выбранного файла, а не полный путь и имя файла?


1-90840
-Stealtch-
2002-03-13 17:16
2002.03.28
Проблема импортированного ActiveX