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

Вниз

Запись и считывание 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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.013 c
8-71270
b_o_a
2002-04-16 11:25
2002.08.22
Печать TBitmap


14-71359
id_privin
2002-07-22 13:30
2002.08.22
Грабли


6-71277
StAL
2002-05-13 20:13
2002.08.22
Вопрос


3-70997
Svet
2002-07-31 14:07
2002.08.22
Блокировка записи в многопользовательском режиме


1-71200
SAVwa
2002-08-09 21:23
2002.08.22
Как заставить локалный Variant не освобождаться?