Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.007 c
1-71189
harismatik
2002-08-09 18:11
2002.08.22
Не помещается вся сторка в ComboBox


1-71087
nebula_
2002-08-12 12:18
2002.08.22
OleContainer


3-71029
Vlad2
2002-08-01 06:46
2002.08.22
Проектирование БД


4-71429
IKarikh
2002-06-19 18:59
2002.08.22
Семафоры


1-71076
Сережа
2002-08-12 11:13
2002.08.22
Удаление автозагрузки из реестра





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский