Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.009 c
3-70994
S@shka
2002-07-31 12:53
2002.08.22
Чем отличается Commit от CommitRetaining


3-70955
Mihey
2002-08-03 11:46
2002.08.22
Помогите, как с помощью ADO взять поле из базы данных


1-71183
big_bugzy
2002-08-09 16:33
2002.08.22
Вопрос по MDI формам


3-71009
Ag2002
2002-07-31 20:28
2002.08.22
Количество записей


3-70958
alexela
2002-08-03 21:10
2002.08.22
база DBase




   Наверх