Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.09.16;
Скачать: [xml.tar.bz2];

Вниз

Мастера подскажите как можно сохранить компонент TTree View?   Найти похожие ветки 

 
R_F$29{n}xp   (2002-09-04 13:51) [0]

Как можно сохранить TTree View в файл типа Record?
Задача такова:
Есть TTree View, run-time Создаются папки и Файлы(ShellExecute). Нужно сохранить папки и файлы в файл, и после повторного запуска приложения считать из файла эти папки и файлы(Ярлыки).


 
MBo   (2002-09-04 14:03) [1]

а SaveToFile?


 
R_F$29{n}xp   (2002-09-04 15:50) [2]

Процедура SaveToFile не подходит. Нужно в Record сохранить.
Вообще там потом начинаюся головники с проверкой родителя и т.д.
Дайте какой-нибудь алгоритм что-ли. Как построить дерево (читая из файла) В файл у меня сохраняет а вот как обратно считать и построить дерево, где Папки это просто ветви(Parents), а File это объекты, у которых есть OnClick(Т.е. когда нажимаешь на файл загружается соответствующее приложение);


 
Kent   (2002-09-04 16:43) [3]

Ежели хочешь, могу выслать написанный мной компонент наследник стандартного, он как раз по вызову процедуры SaveToFileWithImages записывает структуру и туда же пишет номера ярлыков с ImageList. Посмотришь как у меня сделана запись номеров ярлыков и так же будешь писать туда ссылку на файл, который должен запуститься. Если надо, то пиши aspgroup@newmail.ru


 
R_F$29{n}xp   (2002-09-04 17:17) [4]

ok Еще какие предлоежения?


 
R_F$29{n}xp   (2002-09-04 17:21) [5]

Скфчфл компонент VirtualTree так он говорит не может найти файл
Там еаписано так:


unit JwaUxTheme;

{$WEAKPACKAGEUNIT}

{$HPPEMIT ""}
{$HPPEMIT "#include "uxtheme.h""}
{$HPPEMIT ""}

{$I WINDEFINES.INC} <<<< Error not founf file

interface

uses
JwaWinType, JwaWinGDI;


 
R_F$29{n}xp   (2002-09-04 19:03) [6]

Вообщем вот юнит переработаный Procedur"s Saveto... and LoadFrom... Kenta
___________________________________________

unit MainPas;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, StdCtrls, dxDotNetCtrls, dxCore, dxButton, ImgList, ShellApi;

type
TForm1 = class(TForm)
Tree: TTreeView;
dxButton1: TdxButton;
EdFolder: TdxDNEdit;
EdFile: TdxDNEdit;
EdPath: TdxDNEdit;
dxButton2: TdxButton;
dxButton3: TdxButton;
ImageList1: TImageList;
Button7: TButton;
Dial: TOpenDialog;
procedure dxButton1Click(Sender: TObject);
procedure dxButton2Click(Sender: TObject);
procedure dxButton3Click(Sender: TObject);
procedure TreeClick(Sender: TObject);
procedure TreeDblClick(Sender: TObject);
procedure Button7Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
protected
procedure SaveTreeToStreamWithImages(Stream: TStream);
procedure LoadTreeFromStreamWithImages(Stream: TStream);

public
procedure SaveToFileWithImages(FileName: String);
procedure LoadFromFileWithImages(FileName: String);
procedure SaveToStreamWithImages(Stream : TStream);
procedure LoadFromStreamWithImages(Stream : TStream);

{ Public declarations }
end;
type
PMyRec = ^TMyRec;
TMyRec = record
FName,LName:^ansistring;
end;

TRec=record
case IsFolder:Boolean of
true:(case HasChilds:boolean of
true:(ArChilds:array [1..200] of TMyRec);
false:(););
false:();
end;


var
Form1: TForm1;
f:file of TMyRec;
MyRec:TMyRec;

implementation

{$R *.dfm}

function IsFile(Current:TTreeNode):boolean;
begin
if Current.Data=nil then IsFile:=false else IsFile:=true;
end;

function IsRoot(Current:TTreeNode):boolean;
begin
if Current.GetPrev=nil then IsRoot:=true else IsRoot:=false;
end;
function GetBufStart(Buffer: PChar; var Level: Integer): PChar;
begin
Level := 0;
while Buffer^ in [" ", #9] do
begin
Inc(Buffer);
Inc(Level);
end;
Result := Buffer;
end;

procedure TForm1.LoadFromFileWithImages(FileName: String);
var
Stream: TStream;
begin
Stream := TFileStream.Create(FileName, fmOpenRead);
try
LoadFromStreamWithImages(Stream);
finally
Stream.Free;
end;
end;

procedure TForm1.LoadFromStreamWithImages(Stream : TStream);
begin
with Tree.Items do
LoadTreeFromStreamWithImages(Stream);
end;

procedure TForm1.LoadTreeFromStreamWithImages(Stream: TStream);
const
ImgDel="#";
var
List: TStringList;
ANode, NextNode: TTreeNode;
ALevel, i: Integer;
CurrStr,ImgStr: string;
begin
List := TStringList.Create;
Tree.Items.BeginUpdate;
try
try
Tree.Items.Clear;
List.LoadFromStream(Stream);
ANode := nil;
for i := 0 to List.Count - 1 do
begin
CurrStr:=GetBufStart(PChar(List[i]), ALevel);
ImgStr:=Copy(CurrStr,Pos(ImgDel,CurrStr)+1,Length(CurrStr)-Pos(ImgDel,CurrStr));
CurrStr:=Copy(CurrStr,1,Pos(ImgDel,CurrStr)-1);
if ANode = nil then
begin
ANode := Tree.Items.AddChild(nil, CurrStr);
ANode.ImageIndex:=StrToInt(Copy(ImgStr,1,Pos(ImgDel,ImgStr)-1));
ANode.SelectedIndex:=StrToInt(Copy(ImgStr,Pos(ImgDel,ImgStr)-1,Length(ImgStr)-Pos(ImgDel,ImgStr)));
end
else if ANode.Level = ALevel then
begin
ANode := Tree.Items.AddChild(ANode.Parent, CurrStr);
ANode.ImageIndex:=StrToInt(Copy(ImgStr,1,Pos(ImgDel,ImgStr)-1));
ANode.SelectedIndex:=StrToInt(Copy(ImgStr,Pos(ImgDel,ImgStr)-1,Length(ImgStr)-Pos(ImgDel,ImgStr)));
end
else if ANode.Level = (ALevel - 1) then
begin
ANode := Tree.Items.AddChild(ANode, CurrStr);
ANode.ImageIndex:=StrToInt(Copy(ImgStr,1,Pos(ImgDel,ImgStr)-1));
ANode.SelectedIndex:=StrToInt(Copy(ImgStr,Pos(ImgDel,ImgStr)-1,Length(ImgStr)-Pos(ImgDel,ImgStr)));
end
else if ANode.Level > ALevel then
begin
NextNode := ANode.Parent;
while NextNode.Level > ALevel do
NextNode := NextNode.Parent;
ANode := Tree.Items.AddChild(NextNode.Parent, CurrStr);
ANode.ImageIndex:=StrToInt(Copy(ImgStr,1,Pos(ImgDel,ImgStr)-1));
ANode.SelectedIndex:=StrToInt(Copy(ImgStr,Pos(ImgDel,ImgStr)-1,Length(ImgStr)-Pos(ImgDel,ImgStr)));
end
end;
finally
Tree.Items.EndUpdate;
List.Free;
end;
except
Tree.Items.Owner.Invalidate; // force repaint on exception
raise;
end;
end;


 
R_F$29{n}xp   (2002-09-04 19:04) [7]

Вторая часть (не влезла)

procedure TForm1.SaveToFileWithImages(FileName: String);
var
Stream: TStream;
begin
Stream := TFileStream.Create(FileName, fmCreate);
try
SaveToStreamWithImages(Stream);
finally
Stream.Free;
end;
end;


procedure TForm1.SaveToStreamWithImages(Stream: TStream);
begin
with Tree.Items do SaveTreeToStreamWithImages(Stream);
end;


procedure TForm1.SaveTreeToStreamWithImages(Stream: TStream);
const
TabChar=#9;
EndOfline=#13#10;
ImgDel="#";
var
I: Integer;
ANode: TTreeNode;
NodeStr: String;
begin
if Tree.Items.Count>0 then
begin
ANode:=Tree.Items[0];
while ANode<>nil do
begin
NodeStr:="";
for I:=0 to ANode.Level-1 do NodeStr:=NodeStr+TabChar;
NodeStr:=NodeStr+ANode.Text+ImgDel+IntToStr(ANode.ImageIndex)+ImgDel+IntToStr(ANode.SelectedIndex)+EndOfLine;
Stream.Write(Pointer(NodeStr)^,Length(NodeStr));
ANode:=ANode.GetNext;
end;
end
end;

procedure TForm1.dxButton1Click(Sender: TObject);
begin
//if PMyRec(Tree.Selected.Data)<>nil then exit;
if Tree.Items=nil then
begin
Tree.Selected:=Tree.items.Addfirst(nil,EdFolder.text);

end

else Tree.Items.AddChildFirst(Tree.Selected,EdFolder.Text);


end;

procedure TForm1.dxButton2Click(Sender: TObject);
var MyRecPtr: PMyRec; Current:TTreeNode;
begin
if IsFile(Tree.Selected) then exit;
New(MyRecPtr);
New(MyRecPtr^.FName);
New(MyRecPtr^.LName);
MyRecPtr^.FName^ :=EdFile.Text;
MyRecPtr^.LName^ :=EdPath.Text;
Current:=Tree.Items.AddChildObject(Tree.Selected,MyRecPtr^.FName^, MyRecPtr);
Current.ImageIndex:=2;
assignfile(f,"Some.txt");
rewrite(f);
write(f,myRec);
MyRecptr:=nil;
end;

procedure TForm1.dxButton3Click(Sender: TObject);
begin
if IsRoot(Tree.Selected)<>true then Tree.Items.Delete(Tree.Selected);
end;

procedure TForm1.TreeClick(Sender: TObject);
begin
if IsRoot(Tree.Selected) then exit;
if IsFile(Tree.Selected)=false then exit;
Tree.Selected.ImageIndex:=2;
end;

procedure TForm1.TreeDblClick(Sender: TObject);
begin
if IsRoot(Tree.Selected) then exit;
if IsFile(Tree.Selected)=false then exit;
ShellExecute(Application.Handle,"Open",Pchar(PMyRec(Tree.Selected.Data)^.LName^),nil,nil,SW_SHOWNORMAL);

end;

procedure TForm1.Button7Click(Sender: TObject);
begin
if Dial.Execute=false then exit;
edPath.Text:=Dial.FileName;

end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if fileexists(Extractfilepath(paramstr(0))+"Save.txt") then Deletefile("Save.txt");
SaveToFileWithImages("Save.txt");
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
if fileexists(Extractfilepath(paramstr(0))+"Save.txt") then
Form1.LoadFromFileWithImages("Save.txt")
else exit;
end;
end.
_____________________________________________________--



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2002.09.16;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.007 c
1-50754
Asderg
2002-09-04 05:56
2002.09.16
как засунуть деревце в файл?


6-50893
BOL
2002-07-03 16:20
2002.09.16
Рассылка большого количества писем по разным адресам


6-50894
SemFLY
2002-07-12 13:52
2002.09.16
Помогите разобраться ! ;-)


14-50922
bob1906
2002-08-21 02:41
2002.09.16
Как написать свою поисковую програму


8-50870
alexey_potapov
2002-05-16 15:53
2002.09.16
Как в Win синхронизировать вывод на экран его обновлением





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