Главная страница
    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-90951
d_oleg
2002-03-14 10:54
2002.03.28
Font pitch


1-90969
SecondGray
2002-03-15 05:53
2002.03.28
Delphi 5&Win98 против Delphi5&Win2K


1-90816
Ольга
2002-03-13 13:33
2002.03.28
pascal


6-91023
Дремучий
2002-01-16 11:03
2002.03.28
Отправка почты (через YAHOO?)


3-90737
Demon ltd
2002-02-27 23:26
2002.03.28
Удаление из базы через SQL





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский