Форум: "Основная";
Текущий архив: 2002.08.22;
Скачать: [xml.tar.bz2];
ВнизЗапись и считывание TTreeNode.Data Найти похожие ветки
← →
3asys (2002-08-09 01:04) [0]Как сохранить число (Integer) в свойстве Data узла TTreeNode дерева TTreeView, а потом считать его?
С Уважением, 3asys
← →
_Александр_ (2002-08-09 04:58) [1]Думаю,одним integer-ом дело не обойдётся :)...
Так, что сразу такой ответик:
1. Создаёшь новый тип
type
...
TMyRec = record
SomeInt : integer;
SomeByte : byte;
SomeString : string[50];
SomeFloat : real;
end;
TPMyRec = ^TMyRec;
...
2. Запись в Data (а быть точнее - создаём переменную нужного нам типа и передаём её адрес полю Data):
var
P : TPMyRec;
begin
...
New(P);
P^.SomeInt := 123;
P^.SomeByte := 255;
P^.SomeString := "abceklmn";
P^.SomeFloat := 3.14;
Твой_3Ноде.Data := P;
...
end;
3. Раз переменные создавал - нужно их и прибивать:
В событии OnDeletion TreeView-а:
if TTreeNode.Data <> nil then
Dispose(TPMyRec(TTreeNode.Data));
← →
_Александр_ (2002-08-09 05:07) [2]Да, забыл написать как считывать:
В OnChange событии написать:
var
MNode : TTreeNode;
begin
MNode := TreeView1.Selected;
if MNode <> nil then begin
Edit1.Text := IntTostr(TPMyRec(MNode.Data)^.SomeInt);
Edit2.Text := IntTostr(TPMyRec(MNode.Data)^.SomeByte);
Edit3.Text := TPMyRec(MNode.Data)^.SomeString;
Edit4.Text := FloatTostr(TPMyRec(MNode.Data)^.SomeFloat);
end;
Думаю - всё :)
← →
KSergey (2002-08-09 08:11) [3]Вообще-то, если надо сохранить просто число типа integer, думаю можно поступить и проще:
TreeNode.Data := Pointer (IntVar)
...
IntVar := Integer (TreeNode.Data)
Проверять лень, но думаю, что если не пойдет именно так, то поигравшись с преобразованием типов можно добиться нужного результата.
Только не надо потом никакую память освобождать ;)
← →
sunwheel (2002-08-09 09:41) [4]Можно сделать так:
Var I : Integer;
node : TTreeNode;
...
node.Data := @I;
...
I := Integer(node.Data^);
← →
KSergey (2002-08-09 11:29) [5]sunwheel © (09.08.02 09:41)
Только не так, я вас умоляю!!!
Так можно делать только в рамках одного метода (если предполагать, что переменная I локальная для данного метода. Но надо ли это кому-то в рамках одного вызова одного метода? Можно и просто к I обращаться.
На момент же следующего вызова этого метода использовать ранее записанное значение в node.Data будет нельзя, равно как и вне данного метода, ведь объекта, на который ссылается укзатель, просто не существует за пределами этого метода.
Объявить же I как глобальную переменную - тоже нет смысла, т.к. данные-то для разных узлов наверняка должны быть разными. Так что так делать нельзя.
Теоретически эту идею можно развить на запись адресов элементов массива, но как отследить индексы соотв. элементов массива? Да и сколько этих самых элементов в массив напихать?
В общем надеюсь, что я убедил.
← →
3asys (2002-08-09 14:14) [6]Огромное Спасибо ВСЕМ !
С Уважением, 3asys
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.08.22;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.008 c