Процедура для кожного елемента TreeView

Будь ласка, наведіть приклад, щоб при натисканні на будь-якому елементі TreeView з'являлося повідомлення з текстом цього елемента. Саме цікавить призначення процедури для елемента.

Viktop (23.05.05 17:38)

У еліменту немає ніяких користувацьких процедур, але є св-во Data, в якому може зберігатися покажчик на об'єкт з даними про цей елемент.

to Reindeer Moss Eater Для елементів меню (Items)

Яке меню, коли в питанні TreeView?

procedure TForm1.TreeView1Click(Sender: TObject); begin showmessage(treeview1.Selected.Text) end;

Найкраще напевно OnChange

Відповіді, коливиберіть, буде змінено з одного node до іншого.

> Саме цікавить призначення процедури для элемента.Це ми запросто.

type TProc = procedure;

procedure Proc; begin Beep end;

procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode); begin if Assigned(Node) then if Assigned(Node.Data) then TProc(Node.Data) end;

А як усередині процедури дізнатися, ким її викликали? ;-) Імхо треба Sender додати.

А як усередині процедури дізнатися, ким вона була викликана? ;-)

При такому підході цього не треба знати.

Чому перекручу? Коли є купа накручених об'єктів, які треба якось ідентифікувати, без св-ва Data взагалі цей компонент стає марним.

Тому у разі краще у св-ве Data зберігати покажчик сам ОБ'ЄКТ, якщо звісно такий є.

Тому що перекручення. Багато процедур замість одного диспатчера заснованого на тегу елемента.

А, ну це так. імхо негарно. але так афтар просив саме це )

to Erase Про Data я взагалі не знав :( Вчора світло вирубали,тому і не зміг продовжити допит :(( Ща спробую, що написали

Ну в принципі [10] працює тільки якщо замість Beep (який у мене не бібікає :)) вказати showmessage(treeview1.Selected.Text) то не працює. У private процедуру вказав, TForm1.Proc зробив і все одно не йде (я в покажчиках не знаюся)

> Viktop (24.05.05 14:22) [21]

[10] - Це був жарт, хоча наведений код і працює. Потрібна відповідь була дана ще до [10] - див [5] і [8].

procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode); begin якщо Assigned(Node) then ShowMessage(Node.Text) end

Один мій знайомий, коли робив підручник писав так: procedure TForm1.TreeView1Click(Sender: TObject); var st_index:string; begin st_index:=TreeView1.Selected.Text; if st_index = "Технологія програмування" then WebBrowser1.Navigate("C:\Основи алгоритмізації та програмування\HTML\index1.htm"); if st_index = "Алгоритмізація" then WebBrowser1.Navigate("C:\Основи алгоритмізації та програмування\HTML\index2.htm"); if st_index = "Аналіз мов програмування" then WebBrowser1.Navigate("C:\Основи алгоритмізації та програмування\HTML\Мов програмування.htm"); if st_index = "Правила запису арифметичних виразів" then WebBrowser1.Navigate("C:\Основи алгоритмізації та програмування\HTML\index3.htm"); if st_index = "Завдання "Запис арифметичних виразів"" then WebBrowser1.Navigate("C:\Основи алгоритмізації та програмування\HTML\index4.htm"); end; А у мене в дереві понад 100 елементів. Таке робити вручну?

> Viktop (24.05.05 15:31) [23]

Так це. Питання було таким:"Наведіть будь ласка приклад, щоб при натисканні на будь-якому елементі TreeView з'являлося повідомлення з текстомцього елемента ". Ось приклади і привели - в [5], [8] та [22].

Тепер з'ясовується, що потрібно при натисканні на TreeView не показувати текст вибраного елемента, а здійснювати якісь інші дії, залежно від його тексту.

Я тоді вже орієнтувався не на текст. При додаванні елемента в TreeView відповідно до заголовка елемента надавав би ціле значення його властивості Data, а потім, при кліку, відповідно до цього цілого значення викликав би Navigate з потрібним рядковим параметром з константної таблиці.

Ну наприклад. У TreeView є два елементи - із заголовками "Технологія програмування" та "Алгоритмізація". першому призначаємо властивість Data рівним 1, другому - 2, наприклад:

Тепер пишемо ось такий ось OnChange:

procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode); const URLs = array [1..2] of string = ("C:\Основи алгоритмізації та програмування\HTML\index1." htm", "C:\Основи алгоритмізації та програмування\HTML\index2.htm"); begin if Assigned(Node) then WebBrowser1.Navigate(URLs[Integer(Node.Data )]) end.

> URLs = array [1..2] of string =Соррі. Треба так: