Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.03.28;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.005 c
1-90981
DSR
2002-03-15 10:01
2002.03.28
Как изменить свойство компонента если известен только его тип...


1-90919
Andrey__
2002-03-18 17:13
2002.03.28
Не устанавливается Delphi !!!


3-90739
Bor
2002-02-27 21:19
2002.03.28
Защита данных


3-90735
DeNN
2002-02-28 18:11
2002.03.28
Таблица


3-90740
ASM
2002-02-27 20:40
2002.03.28
Ребята Хэлп нужен





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский