Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Сохранение дерева [D7, WinXP]


Страницы:   1 2

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)


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо