Главная страница
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.013 c
1-90861
ZORRO
2002-03-16 21:52
2002.03.28
Как сделать эфект затемнённого стекла на форме? Тоесть фома будет прозразной но и в то же время затенённой.


14-91049
McSimm
2002-02-13 15:31
2002.03.28
Скучно тут как-то...


3-90790
ev
2002-02-22 21:05
2002.03.28
IB или MS SQL Server


3-90808
mark-a
2002-03-02 13:57
2002.03.28
Intebase


4-91125
OGR
2002-01-23 13:24
2002.03.28
Как сделать скриншот без вывода на экран?