C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Как сделать DblClick по Item в TreeView?
creater
  Отправлено: 01.09.2004, 13:28


Станционный диспетчер

Группа: Участник
Сообщений: 120



Создаю ветку в TreeView
CODE

TTreeNode *Node1;
TreeView1->Items->Clear();
TreeView1->Items->Add(NULL, "RootNode1");
Node1 = TreeView1->Items->Item[0];
TreeView1->Items->AddChild(Node1,"ChildNode1");
TreeView1->Items->Add(Node1, "RootNode2");
Node1 = TreeView1->Items->Item[2];
TreeView1->Items->AddChild(Node1,"ChildNode2");
Node1 = TreeView1->Items->Item[3];
TreeView1->Items->AddChild(Node1,"ChildNode2a");
TreeView1->Items->AddChild(Node1,"ChildNode2b");
TreeView1->Items->Add(TreeView1->Items->Item[0], "RootTreeNode3");

Далее хочу навесить на Child пункты какое-то действие по нажатию на них DblClick.

Как это сделать?

Имеется вариант: в событии OnDblClick смотришь координаты мыши и по ним определяешь узел
посредством функции GetNodeAt(int X, int Y);

Но опять же как отследить координаты мыши что бы они присвоились GetNodeAt(int X, int Y).

Заранее большое спасибо.
xTrim
Отправлено: 01.09.2004, 14:17


Машинист паровоза

Группа: Участник
Сообщений: 208



типа этого
CODE

void __fastcall TForm1::TreeView1DblClick(TObject *Sender)
{
TPoint p = TreeView1->ScreenToClient(Mouse->CursorPos);
TTreeNode* node = TreeView1->GetNodeAt(p.x,p.y);
if(!node) return;
Label1->Caption = node->Text;
}
creater
Отправлено: 01.09.2004, 15:27


Станционный диспетчер

Группа: Участник
Сообщений: 120



QUOTE (xTrim @ 01/09/2004, 15:19)
типа этого
CODE

void __fastcall TForm1::TreeView1DblClick(TObject *Sender)
{
TPoint p = TreeView1->ScreenToClient(Mouse->CursorPos);
TTreeNode* node = TreeView1->GetNodeAt(p.x,p.y);
if(!node) return;
Label1->Caption = node->Text;
}

Спасибо!!! Работает.
Хотел еще уточнить.
Как можно предотвратить ситуацию когда мы кликнули два раза на пункте который нам нужен, выполнилось действие, а затем мы случайно пикнули в пустую область списка и действие которое назначено на пункт выделенный в данный момент опять выполняется.
creater
Отправлено: 01.09.2004, 15:38


Станционный диспетчер

Группа: Участник
Сообщений: 120



QUOTE (creater @ 01/09/2004, 16:29)
Хотел еще уточнить.
Как можно предотвратить ситуацию когда мы кликнули два раза на пункте который нам нужен, выполнилось действие, а затем мы случайно пикнули в пустую область списка и действие которое назначено на пункт выделенный в данный момент опять выполняется.

Все, разобрался, спасибо.
Konstantine
Отправлено: 02.09.2004, 08:15


Мастер участка

Группа: Модератор
Сообщений: 545



А ещё лучше при OnDblClick проверить какой итем выделен. Это свойство Selected, и возвращает или индекс или указатель. Я так пользуюсь всегда. Если чё не получится, до вечера скажи — Я на завтра рабочий кусок дам

Вернуться в Вопросы программирования в C++Builder