C++Builder
  Начало   Форум   Помощь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: TreeView Работа с компонентом  (Прочитано 10240 раз)
Eagle
Я бы улучшил этот мир... Но Бог не дал исходников
Участник


Сказали спасибо: +0/-2
Offline

Сообщений: 42


« : 07 Май 2010, 19:12:04 »

Только начал работать в С++ и встретился с компонентом treeview.
Вопрос самый простой. Как с ним работать.
Какое сыбытие отвечает за клин по записи из дерева (nod-у  кажись)
Кто знает программу TheBat там есть меню настройки.
Слева в этом окне есть дерево.
Хочу сосздать такое же окно настройки моей проги.
Вот  вопрос в том как отловить на что было выбрано в дереве. какая строка. и прописать событие на это.

Помогите плиз.
« Последнее редактирование: 10 Май 2010, 00:57:08 от Eagle » Записан
serg76
Участник


Сказали спасибо: +38/-2
Offline

Сообщений: 575


« Ответ #1 : 08 Май 2010, 11:59:24 »

пример из Examples\CustomDraw смотрел ?
Записан
Eagle
Я бы улучшил этот мир... Но Бог не дал исходников
Участник


Сказали спасибо: +0/-2
Offline

Сообщений: 42


« Ответ #2 : 09 Май 2010, 18:27:30 »

а можно для новичка... это где?
Записан
Kray74
Посты на падонкаффском принципиально не читаю.
Участник


Сказали спасибо: +81/-1
Offline

Сообщений: 366


« Ответ #3 : 09 Май 2010, 20:02:08 »

Цитировать
а можно для новичка... это где?
Каталог_куда_установлен_Builder\Examples\CustomDraw

Например:
C:\Program Files\Borland\CBuilder6\Examples\CustomDraw
Записан
Eagle
Я бы улучшил этот мир... Но Бог не дал исходников
Участник


Сказали спасибо: +0/-2
Offline

Сообщений: 42


« Ответ #4 : 09 Май 2010, 22:29:21 »

Да спасибо... глянул... но того что хотел не увидел...
Интересует какое событие возникает по клику на ветвь.
и как на каждую уникальную ветвь прописать своё событие.
Записан
micael
Участник


Сказали спасибо: +14/-3
Offline

Сообщений: 260


« Ответ #5 : 10 Май 2010, 08:31:35 »

Привет! Используйте в обработчике void __fastcall TForm1::TreeView1Click(TObject *Sender) эту конструкцию TreeView1->Selected->Text; она покажет какой элемент дерева выбран.
Так же создайте   ф - ию которая получает эту строку,просматривает названия и делает необходимые действия.
« Последнее редактирование: 10 Май 2010, 08:37:14 от micael » Записан
Eagle
Я бы улучшил этот мир... Но Бог не дал исходников
Участник


Сказали спасибо: +0/-2
Offline

Сообщений: 42


« Ответ #6 : 10 Май 2010, 13:23:18 »

Привет! Используйте в обработчике void __fastcall TForm1::TreeView1Click(TObject *Sender) эту конструкцию TreeView1->Selected->Text; она покажет какой элемент дерева выбран.
Так же создайте   ф - ию которая получает эту строку,просматривает названия и делает необходимые действия.

Огромнейшее спасибо!!! Только что написал то что мне было нужно - разобрался.
Теперь осталось написать обработчик на соответствие тексту и действию.
Если есть какието предложения по этой функции пожалуйста пишите.


У меня ещё вопрос!!!

Как написать свою пользовательскую функцию в С++.
Писал такие в консольном.
Кто подскажет нюансы в С++ Builder

Интересует
Код:
__fastcall

Короче я буду пробовать написать функцию, которая получает текстовое значение переменой и в зависимости от этого значения выполняет необходимую операцию=)
Записан
micael
Участник


Сказали спасибо: +14/-3
Offline

Сообщений: 260


« Ответ #7 : 10 Май 2010, 14:02:11 »

Вот пример в Вашем случае

в заголовке объявите
Код:
private:
        void __fastcall ObrabotkaStroki(AnsiString);// твоя функция используется fastcall

public: // User declarations
        __fastcall TForm1(TComponent* Owner);
};

в сpp
Код:
void __fastcall TForm1::ObrabotkaStroki(AnsiString Parametr)

 {
 if(Parametr=="Название в дереве1 ")
 //обработка
 if(Parametr=="Название в дереве2 ")
 // обработка можещь испоьзовать switch
 
 //  и т д
 }
Вызов ф-ии
Код:
void __fastcall TForm1::TreeView1Click(TObject *Sender)
{
ObrabotkaStroki(TreeView1->Selected->Text);
}
Вот примерно так
« Последнее редактирование: 10 Май 2010, 19:14:21 от micael » Записан
Eagle
Я бы улучшил этот мир... Но Бог не дал исходников
Участник


Сказали спасибо: +0/-2
Offline

Сообщений: 42


« Ответ #8 : 10 Май 2010, 20:20:22 »

Уважаемый, micael.

Я уже справился с написание обработчика
Я Использовал SettingTree->Selected->Index, т.к. с Text у меня вышли лаги.
Были проблемы со switch и типами данных строки для сравнения в коде и того что прописано в дереве.

Я сделал через Index

Привожу свой код
Код:
//---------------------------------------------------------------------------

#include
#pragma hdrstop

#include "settingU.h"
#include "dataU.h"

//---------------------------------------------------------------------------
void SettingGeneralShow();
void SettingPenaltyShow();
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TFSetting *FSetting;
//---------------------------------------------------------------------------
__fastcall TFSetting::TFSetting(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
//-----------------------Функции интерфейса--------------------------------

//---------------------------------------------------------------------------
void SettingGeneralShow()
{
   FSetting->PanelPenalty->Visible=false;
   FSetting->PanelPenalty->Enabled=false;
   FSetting->PanelGeneral->Align=alClient;
   FSetting->PanelGeneral->Enabled=true;
   FSetting->PanelGeneral->Visible=true;
}
//---------------------------------------------------------------------------
void SettingPenaltyShow()
{
   FSetting->PanelGeneral->Enabled=false;
   FSetting->PanelGeneral->Visible=false;
   FSetting->PanelPenalty->Align=alClient;
   FSetting->PanelPenalty->Visible=true;
   FSetting->PanelPenalty->Enabled=true;
}
//---------------------------------------------------------------------------

void __fastcall TFSetting::SettingTreeClick(TObject *Sender)
{
switch (SettingTree->Selected->Index)
{
case 0:SettingGeneralShow(); break;
case 1:SettingPenaltyShow(); break;
default: ShowMessage("ошибочка");
}
}

//---------------------------------------------------------------------------

//---------------------------------------------------------------------------

//---------------------------------------------------------------------------

//---------------------------------------------------------------------------



void __fastcall TFSetting::FormShow(TObject *Sender)
{
Left=(Screen->Width/2)-(Width/2);
Top=(Screen->Height/2)-(Height/2);
   // SettingGeneralShow();
}
//---------------------------------------------------------------------------

Я Заметил в вашем коде __fastcall
Не могли бы Вы пояснить что это и как используется.

И посмотрите мой код, Может есть какие то замечания.

У пользователя Fry__    возник родственный вопрос  Его тема здесь(И здесь я спросил про вызов функции, которая описана в другом *.cpp)
Записан
Eagle
Я бы улучшил этот мир... Но Бог не дал исходников
Участник


Сказали спасибо: +0/-2
Offline

Сообщений: 42


« Ответ #9 : 10 Май 2010, 20:36:24 »

Ладно ... по __fastcall я посоветовался с Yandex.ru

Вот что он мне ответил :
http://www.gamedev.ru/code/forum/?id=85307
http://forum.academ.org/index.php?showtopic=147867
Записан
micael
Участник


Сказали спасибо: +14/-3
Offline

Сообщений: 260


« Ответ #10 : 10 Май 2010, 20:47:36 »

Честно сказать я не заметил разницы в производительности объявляя
void GetParametr(int );
void __fastcall GetParametr(int );
говорят что в последнем варианте   эффективно используются регистры РОН
но увеличения быстродействия я не обнаружил так что можешь не заморачииваться!!
Записан
Fry__
Участник


Сказали спасибо: +0/-0
Offline

Сообщений: 20


« Ответ #11 : 11 Май 2010, 01:04:50 »

Привет! Используйте в обработчике void __fastcall TForm1::TreeView1Click(TObject *Sender) эту конструкцию TreeView1->Selected->Text; она покажет какой элемент дерева выбран.
Так же создайте   ф - ию которая получает эту строку,просматривает названия и делает необходимые действия.
Мне кажется лучше использовать событие OnChange компонента TreeView. Тогда обработчик будет вызываться после реального изменения выбранной записи. При этом в нем (обработчике) передается указатель на TTreeNode (TTreeNode *Node). Тогда доступ к новой выбранной записи будет: Node->SelectedIndex. Далее switch и т.д.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  




....

Powered by SMF 1.1.21 | SMF © 2025, Simple Machines
Страница сгенерирована за 0.118 секунд. Запросов: 23.