![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сохранение дерева [D7, WinXP]
Snip © (2004-06-08 12:39:00)Всем привет!!! Народ подскажите как сохранить структуру TTreeView и в частности свойство Data каждого TNode (использования баз не предлагать, удет громоздко)....
Точнее как сохранить я знаю.... Типа есть запись у каждой записи ест поле родитель... вот и как мне прочитать все это и восстановить в дерево??? Заранее благодарен.
pasha_golub (2004-06-08 18:19:00) [1]Snip © (08.06.04 18:04) [36]
А чего ж ты молчал, шо у тебя многопоточноая работа идет? :-)
Snip (2004-06-08 18:04:00) [2]Спасибо все еще раз... все я сделал... надо было тока под Data использовать отдельный поток... и все ни каких ошибок...
Snip (2004-06-08 17:48:00) [3]Digitman, что думаешь что я такой осел??? я там все прикрасно понимаю... каждый твой коментарий я и так понимал... мне просто бесит это Stream Read Error, вообще замучил... вот этого понять я ни как не могу... что ему еще не хватает...
Digitman (2004-06-08 17:39:00) [4]
> Snip © (08.06.04 17:25) [32]
> Digitman, да я думал, Вы, хоть земляку своему бывшему поможете
ну да, конечно ... у тебя ж - все видят - в анкете флаг висит насчет якобы "землячества" ...
а и висел бы - всенепременно помог бы при условии, что ты по каждому моему комментарию задал вопрос "а почему это так, а это не так ?" ...
а "большой город", извини уж, меня ничуть не трогает ... если не даже не вызывает отторжения))
Snip (2004-06-08 17:28:00) [5]Да ладно... нахрен платить... сам разберусь, голова все таки есть... так лучше будет... вот спасибо за идею с потоком... может и додумался бы сам, но вы все таки помогли... спасибо еще раз... пошел разбираться...
Snip (2004-06-08 17:25:00) [6]Digitman, да я думал, Вы, хоть земляку своему бывшему поможете... который бедный один в большом городе пытьается заработать на хлеб
Clickmaker (2004-06-08 17:23:00) [7]
> Snip © (08.06.04 17:19) [28]
> народ, плиз отладте мне этот чертов код....
(серьезно) Сколько готов заплатить?
Digitman (2004-06-08 17:21:00) [8]
> Snip © (08.06.04 17:19) [28]
> народ, плиз отладте мне этот чертов код....
ты б хоть про $ намекнул .. а то ведь халявщиком нарисовался ..
Digitman (2004-06-08 17:19:00) [9]
> Defunct © (08.06.04 17:02) [24]
> >> PMedia(tvExplorer.Items[Index].Data)^
> Это бред
это не бред
это указание компилятору, читаемое тобой и им как
"рассматривая нетипизированный указатель, хранимый св-вом tvExplorer.Items[Index].Data, как типизированный указатель на структуру типа ТMedia, получить ссылку на экз-р этой структуры и передать ее факт.параметром в ф-цию, требующую этим параметром адрес на буфера произвольного типа"
Snip (2004-06-08 17:19:00) [10]народ, плиз отладте мне этот чертов код....
Snip (2004-06-08 17:13:00) [11]люди....... что не делал, все та же одна ошибка:
Stream Read Error, все ваши предложения перепробывал.... но не как
Defunct (2004-06-08 17:10:00) [12]> Pred - это уже -1
ops, my bad
Clickmaker (2004-06-08 17:07:00) [13]
> Defunct © (08.06.04 16:58) [23]
> еще одна мелочь:
>
> for Index:= 0 to Pred(tvExplorer.Items.Count-1) do
Pred - это уже -1
Defunct (2004-06-08 17:02:00) [14]>> PMedia(tvExplorer.Items[Index].Data)^
Это бред
должно быть:
tvExplorer.Items[Index].Data^
Defunct (2004-06-08 16:58:00) [15]еще одна мелочь:
for Index:= 0 to Pred(tvExplorer.Items.Count -1) do
Digitman (2004-06-08 16:56:00) [16]SizeOf(PMedia^)
компилятором это читается как "использовать размер того, на что указывает указательный тип PMedia" ... а указывает он на структуру, размер которой компилятору так же известен... равно как известен он и при ссылке на Media^, где Media - это PMedia (т.е. переменная указ.типа)
Digitman (2004-06-08 16:50:00) [17]
> Stream.WriteBuffer(PMedia(tvExplorer.Items[Index].Data)^,
> SizeOf(Media^));
пардон,
Stream.WriteBuffer(PMedia(tvExplorer.Items[Index].Data)^, SizeOf(PMedia^)); // поскольку перем-я Media здесь не фигурирует, сошлемся прямо на указ.тип, разыменовав его в обяз.порядке ... либо прямо на ТMedia безо всяких разыменований, что несколько нелогично в плане разношерстности параметров вызова
Digitman (2004-06-08 16:46:00) [18]procedure TfMain.LoadTree;
var
Stream: TFileStream;
Index: Integer;
Media: PMedia;
begin
if not FileExists(ExtractFilePath(Application.ExeName)+'folder.dat') then begin
CreateNewTree(tvExplorer);
Exit;
end;
Stream:=TFileStream.Create(ExtractFilePath(Application.ExeName)+'folder.dat', fmOpenRead);
//Stream.Position:=0;// лишнее
tvExplorer.LoadFromStream(Stream);
for Index:= 0 to Pred(tvExplorer.Items.Count) do begin
New(Media);
Stream.ReadBuffer(Media^, SizeOf(Media ^{!!})); // или уж тогда SizeOf(TMedia) - индифферентно, но первое логичней
tvExplorer.Items[Index].Data:=Media;
end;
Stream.Destroy; // Free вместо Destroy будет по-любому корректней
end;
procedure TfMain.SaveTree;
var
Stream: TFileStream;
Index: Integer;
begin
Stream:=TFileStream.Create(ExtractFilePath(Application.ExeName)+'folder.dat', fmCreate);
tvExplorer.SaveToStream(Stream);
for Index:= 0 to Pred(tvExplorer.Items.Count) do
Stream.WriteBuffer(PMedia(tvExplorer.Items[Index].Data)^, SizeOf(Media ^)); // !!!!! та же грубая ошибка ! Stream.Destroy; // та же некорректность
end;
Digitman (2004-06-08 16:39:00) [19]
> Clickmaker © (08.06.04 16:33) [18]
> единственная ошибка.. - это
> SizeOf(PMedia)
угу .. грубый ляп ... или непонимание ..
Clickmaker (2004-06-08 16:33:00) [20]
> Digitman © (08.06.04 16:25) [17]
А, точно! Это же ShortString.
Ну тогда единственная ошибка, которую я здесь вижу, - это SizeOf(PMedia)