|
#1
|
|||
|
|||
Как это работает
Суть проблемы разобраться с пониманием, остальное решено.
В сети есть пример добавления checkbox и radiobutton в treeview. (How to Add Check Boxes and Radio Buttons to a TTreeView, например на Код HTML:
Кто нибудь может пояснить, зачем нужна переменная 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
|
|||
|
|||
Вспоминаем, что на самом деле все объекты Делфи являются указателями.
Соответсвенно, присваивание переменной 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 находится одно и то же значение - адрес в памяти, по которому и размещен сам объект. |
Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
Guaho (Сегодня)
|