Форум: "Основная";
Текущий архив: 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.011 c