Форум: "Начинающим";
Текущий архив: 2006.07.23;
Скачать: [xml.tar.bz2];
ВнизТормозим :) Найти похожие ветки
← →
PSPF2003 © (2006-07-02 11:57) [0]День добрый. Помогите разобраться с логикой.
В приложении есть TreeView, каждый элемент указывает на структуру с данными. Их необходимо сохранить, с этим вроде разобрался. И при запуске восстановить, как все было. Вот тут и сложности. Либо не восстанавливается, либо не в том порядке как сохранял. Есть идей как это осуществить?
← →
Ivolg © (2006-07-02 12:58) [1]>PSPF2003
Как я понял, тебе надо просто сохранить и востановить содержимое ListView"а ?
← →
PSPF2003 © (2006-07-02 13:06) [2]Нет. Не только содержимое. Но и ту структуру с данными на которую указывает каждый элемент.
← →
Ivolg © (2006-07-02 13:17) [3]
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, ExtCtrls, jpeg, ComCtrls, ImgList;
type
TForm1 = class(TForm)
lv: TListView;
procedure SaveToFile(Dir:string);
function LoadFromFile(Dir:string):boolean;
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
Signature,FileName:string;
implementation
uses Unit1, Unit5;
{$R *.dfm}
{------------------------------------Сохранение----------------------------}
procedure TForm1.SaveToFile(Dir:string);
var
idxItem, idxSub, IdxImage: Integer;
F: TFileStream;
pText: PChar;
sText: string;
W, ItemCount, SubCount: Word;
MySignature: array [0..7] of Char;
begin
FileName:=dir;
StrPCopy(MySignature, Signature);
F := TFileStream.Create(FileName, fmCreate or fmOpenWrite);
F.Write(MySignature, SizeOf(MySignature));
ItemCount := lv.Items.Count;
F.Write(ItemCount, SizeOf(ItemCount));
if lv.Items.Count > 0 then
for idxItem := 1 to ItemCount do
with lv.Items[idxItem - 1] do
begin
SubCount := Subitems.Count;
F.Write(SubCount, SizeOf(SubCount));
IdxImage := ImageIndex;
F.Write(IdxImage, SizeOf(IdxImage));
sText := Caption;
w := Length(sText);
pText := StrAlloc(Length(sText) + 1);
StrPLCopy(pText, sText, Length(sText));
F.Write(w, SizeOf(w));
F.Write(pText^, w);
StrDispose(pText);
if SubCount > 0 then
for idxSub := 0 to SubItems.Count - 1 do
begin
sText := SubItems[idxSub];
w := Length(sText);
pText := StrAlloc(Length(sText) + 1);
StrPLCopy(pText, sText, Length(sText));
F.Write(w, SizeOf(w));
F.Write(pText^, w);
StrDispose(pText);
end;
end;
F.Free;
end;
{------------------------------------------Загрузка-------------------------}
function TForm1.LoadFromFile(Dir:string):boolean;
var
F: TFileStream;
IdxItem, IdxSubItem, IdxImage: Integer;
W, ItemCount, SubCount: Word;
pText: PChar;
PTemp: PChar;
MySignature: array [0..7] of Char;
begin
FileName:=Dir;
Result:=True;
if not FileExists(FileName) then
begin
Result:=False;
Exit;
end;
lv.Items.BeginUpdate;
F := TFileStream.Create(FileName, fmOpenRead);
F.Read(MySignature, SizeOf(MySignature));
if MySignature <> Signature then
begin
F.Free;
Result:=False;
Exit;
end;
F.Read(ItemCount, SizeOf(ItemCount));
lv.Items.Clear;
for idxItem := 1 to ItemCount do
with lv.Items.Add do
begin
F.Read(SubCount, SizeOf(SubCount));
F.Read(IdxImage, SizeOf(IdxImage));
ImageIndex := IdxImage;
F.Read(w, SizeOf(w));
pText := StrAlloc(w + 1);
pTemp := StrAlloc(w + 1);
F.Read(pTemp^, W);
StrLCopy(pText, pTemp, W);
Caption := StrPas(pText);
StrDispose(pTemp);
StrDispose(pText);
if SubCount > 0 then
for idxSubItem := 1 to SubCount do
begin
F.Read(w, SizeOf(w));
pText := StrAlloc(w + 1);
pTemp := StrAlloc(w + 1);
F.Read(pTemp^, W);
StrLCopy(pText, pTemp, W);
lv.Items[idxItem - 1].SubItems.Add(StrPas(pText));
StrDispose(pTemp);
StrDispose(pText);
end;
end;
F.Free;
lv.Items.EndUpdate;
end;
← →
PSPF2003 © (2006-07-02 13:30) [4]Ага сейчас попробую. Спасибо.
← →
Ivolg © (2006-07-02 13:44) [5]>PSPF2003
Пожайлуста :)
← →
PSPF2003 © (2006-07-04 09:38) [6]При добавлении или удалении приходится создавать новый файл с данными. И вот я подумал может лучше сохранять структуру в XML. Компоненты по сериализации не подходят. Ни кто не посоветует хорошую статью по XML?
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.07.23;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.012 c