Форум: "Основная";
Текущий архив: 2005.06.14;
Скачать: [xml.tar.bz2];
ВнизПроцедура для каждого элемента 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;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.043 c