Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 03.08.2024, 05:40
Gerg74 Gerg74 вне форума
Прохожий
 
Регистрация: 17.03.2024
Сообщения: 2
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Как это работает

Суть проблемы разобраться с пониманием, остальное решено.
В сети есть пример добавления checkbox и radiobutton в treeview. (How to Add Check Boxes and Radio Buttons to a TTreeView, например на
Код HTML:
https://www.thoughtco.com/add-options-to-ttreeview-4077866
Я не студент и не решаю курсовые. Просто хочу разобраться для себя.
Кто нибудь может пояснить, зачем нужна переменная tmp и что делает строчка:
Код:
 tmp := Node.Parent;

(Т.е., например, строчка newbutton.Parent:=Form1 делает форму родителем новой кнопки, как это будет звучать при перемене мест?)
C tmp вообще непонятно, зачем вводится дополнительно и как работа с ней приводит к изменениям на treeview?

Код:
procedure ToggleTreeViewCheckBoxes(
 Node :TTreeNode; 
 cUnChecked, 
 cChecked, 
 cRadioUnchecked, 
 cRadioChecked :integer);
var
 tmp:TTreeNode;
begin if Assigned(Node) then begin if Node.StateIndex = cUnChecked then
 Node.StateIndex := cChecked
 else if Node.StateIndex = cChecked then
 Node.StateIndex := cUnChecked
 else if Node.StateIndex = cRadioUnChecked then begin
 tmp := Node.Parent;
 if not Assigned(tmp) then 
 tmp := TTreeView(Node.TreeView).Items.getFirstNode
 else
 tmp := tmp.getFirstChild;
 while Assigned(tmp) do begin if (tmp.StateIndex in 
 [cRadioUnChecked,cRadioChecked]) then
 tmp.StateIndex := cRadioUnChecked;
 tmp := tmp.getNextSibling;
 end;
 Node.StateIndex := cRadioChecked;
 end; // if StateIndex = cRadioUnCheckedend; // if Assigned(Node)
end; (*ToggleTreeViewCheckBoxes*)
Ответить с цитированием
  #2  
Старый 04.08.2024, 08:05
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,053
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Вспоминаем, что на самом деле все объекты Делфи являются указателями.
Соответсвенно, присваивание переменной tmp некоторого объекта TreeView на самом деле просто указывает на один и тот же объект. Как, например, у тебя есть банка с водой. Если ты сделаешь еще одну дырку в стенке банки, то ты получишь доступ ровно к той же воде. Здесь сам объект - это вода, в дырки в банке - как раз указатели.

Код:
type
  TForm1 = class(TForm)
    Label1 : TLabel;
  end;
...
procedure TForm1.Button1Click(Sender : TObject);
var
  tmp : TLabel;
begin
  tmp := Label1;
  tmp.Caption := 'Изменено через tmp';
end;

В примере мы tmp присваиваем значение поля Label1 и меняем знаяение свойства объекта через эту переменую. Как понятно, и в tmp и в Label1 находится одно и то же значение - адрес в памяти, по которому и размещен сам объект.
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо lmikle за это полезное сообщение:
Gerg74 (04.08.2024), Guaho (04.08.2024)
  #3  
Старый 04.08.2024, 14:53
Gerg74 Gerg74 вне форума
Прохожий
 
Регистрация: 17.03.2024
Сообщения: 2
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Благодарю, наконец то начала в голове проявляться картинка.
Можно все таки еще прокомментировать строчку:

Код:
tmp := Node.Parent;

И конкретно Parent c точки зрения объекта. И tmp и Node одного типа: TTreeNode. Что здесь означает Parent?
Ответить с цитированием
  #4  
Старый 05.08.2024, 10:31
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,053
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну а как ты будешь строить дерево.
В данном случае используется вариант двунаправленного списка. Т.е. каждый узел "знает" список своих субитемов (если правильно помню, то через свойство Items), и ссылка на вышестоящий узел через свойство Parent.

Например, простое дерево:
Код:
  A
 / \
B  C
   /\
  D  E
Соответсвенно, у узна A:
- Items = [B,C]
- Parent = Nil
у узла B:
- Items = []
- Parent = A
у узла С:
- Items = [D,E]
- Parent = A
у узла D:
- Items = []
- Parent = C
у узла E:
- Items = []
- Parent = C
Ответить с цитированием
Этот пользователь сказал Спасибо lmikle за это полезное сообщение:
Gerg74 (05.08.2024)
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 08:10.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter