Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.06.14;
Скачать: CL | DM;

Вниз

Процедура для каждого элемента TreeView   Найти похожие ветки 

 
Viktop   (2005-05-23 17:38) [0]

Приведите пожалуйста пример, чтобы при нажатии на любом элементе TreeView появлялось сообщение с текстом этого элемента. Конкретно интересует назначение процедуры для элемента.


 
Eraser ©   (2005-05-23 17:48) [1]

Viktop   (23.05.05 17:38)

У элимента нету никаких пользовательских процедур, но есть св-во Data, в котором может хранится указатель на объект с данными об этом элементе.


 
Viktop   (2005-05-23 17:50) [2]

А поподробнее?


 
Reindeer Moss Eater ©   (2005-05-23 17:50) [3]

TTreeView.OnClick


 
Viktop   (2005-05-23 17:54) [4]

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


 
PZ   (2005-05-23 17:57) [5]

S := (TreeView1.Items.Item[Ind].Text);


 
Reindeer Moss Eater ©   (2005-05-23 17:57) [6]

Какого меню, когда в вопросе TreeView?


 
PZ   (2005-05-23 17:59) [7]

Дополнительно:
Ind := TreeView1.Selected.AbsoluteIndex;


 
Marser ©   (2005-05-23 18:01) [8]

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


 
Reindeer Moss Eater ©   (2005-05-23 18:03) [9]

Лучше наверное OnChange

Occurs whenever the selection has changed from one node to another.


 
begin...end ©   (2005-05-23 18:18) [10]


> Конкретно интересует назначение процедуры для элемента.

Это мы запросто.

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;

begin
 TreeView1.Items[0].Data := @Proc
end.

:o)))))


 
Reindeer Moss Eater ©   (2005-05-23 18:20) [11]

Ой изврат так изврат.
:)


 
Eraser ©   (2005-05-23 18:21) [12]

begin...end ©   (23.05.05 18:18) [10]

А как внутри процедуры узнать, кем она была вызвана? ;-)
Имхо надо Sender добавить.


 
Reindeer Moss Eater ©   (2005-05-23 18:22) [13]

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

При таком подходе этого не надо знать.
:)


 
Eraser ©   (2005-05-23 18:22) [14]

Reindeer Moss Eater ©   (23.05.05 18:20) [11]
Ой изврат так изврат.


Почему изврат? Когда имеется куча навороченных объектов, которые надо как-то идентифицировать, без св-ва Data вообще данный компонент становится бесполезным.


 
Eraser ©   (2005-05-23 18:23) [15]

Reindeer Moss Eater ©   (23.05.05 18:22) [13]

Поэтому в таких случаях лучше в св-ве Data хранить указатель на сам ОБЪЕКТ, если конечно такой имеется...


 
Reindeer Moss Eater ©   (2005-05-23 18:24) [16]

Потому что изврат.
Много процедур вместо одного диспатчера основанного на тэге элемента.


 
begin...end ©   (2005-05-23 18:25) [17]

> Eraser ©   (23.05.05 18:22) [14]

> без св-ва Data вообще данный компонент становится бесполезным

Изврат -- он не в использовании свойства Data.
Изврат -- он в хранении в свойстве Data адреса процедуры в контексте данной задачи.

:-))


 
Reindeer Moss Eater ©   (2005-05-23 18:26) [18]

Во-во.


 
Eraser ©   (2005-05-23 18:35) [19]

begin...end ©   (23.05.05 18:25) [17]
Изврат -- он в хранении в свойстве Data адреса процедуры в контексте данной задачи.


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


 
Viktop   (2005-05-24 07:10) [20]

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


 
Viktop   (2005-05-24 14:22) [21]

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


 
begin...end ©   (2005-05-24 15:23) [22]

> Viktop   (24.05.05 14:22) [21]

[10] -- это была шутка, хотя приведённый код и работает. Нужный ответ был дан ещё до [10] -- см. [5] и [8].

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


 
Viktop   (2005-05-24 15:31) [23]

Один мой знакомый, когда делал учебник писал так:
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 элементов. Такое вручную делать?


 
begin...end ©   (2005-05-24 16:16) [24]

> Viktop   (24.05.05 15:31) [23]

Дык эта... Вопрос то был таким: "Приведите пожалуйста пример, чтобы при нажатии на любом элементе TreeView появлялось сообщение с текстом этого элемента". Вот примеры и привели -- в [5], [8] и [22].

Теперь выясняется, что нужно при клике по TreeView не показывать текст выбранного элемента, а осуществлять какие-то другие действия, в зависимости от его текста.

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

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

TreeNode.Data := Pointer(1)

Теперь пишем вот такой вот 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.


 
begin...end ©   (2005-05-24 16:31) [25]


> URLs = array [1..2] of string =

Сорри. Надо так:

URLs: array [1..2] of string =



Страницы: 1 вся ветка

Текущий архив: 2005.06.14;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.025 c
3-1115890553
Term
2005-05-12 13:35
2005.06.14
Проблема с BuckUp ом


4-1114333737
Nafania
2005-04-24 13:08
2005.06.14
Список программ, которые запускались с компьютера


3-1115811707
_e_u_
2005-05-11 15:41
2005.06.14
Обновление АДОтаблиц


1-1116973210
redlord
2005-05-25 02:20
2005.06.14
сколько тиков работает винда


14-1116723459
Виктроя
2005-05-22 04:57
2005.06.14
Помогите глупой девушке с компанентами для Delphi 6