Главная страница
    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-71164
lak_b
2002-08-13 18:38
2002.08.22
поиск в ListBox


14-71333
Geser
2002-07-25 22:06
2002.08.22
Люди, подкиньте идею для программы.


1-71124
Hawk2
2002-08-12 17:58
2002.08.22
Количество дней в месяце.


14-71303
IlyaA
2002-07-25 08:35
2002.08.22
Учение Свет; Неучение Тьма


7-71387
KarlovAF
2002-06-06 15:55
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский