Einzelnen Beitrag anzeigen

Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#2

Re: ListView mit Stream speichern

  Alt 30. Mai 2004, 17:00
Hallo,
ich weiss nicht was an Deinem Code falsch ist. Aber würde einen ganz anderen Ansatz wählen.
Mein Ansatz: Warum soll ich etwas mühevoll selber implementieren wenn es die VCL schon mitbringt?
Damit meine ich das Delphi Streamingsystem:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ComCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    ListView1: TListView;
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private-Deklarationen }
    procedure SaveComponentToStream(Stream : TStream; Component : TComponent);
    procedure LoadComponentFromStream(Stream : TStream; Component : TComponent);
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var
  FileStream : TFileStream;
begin
  FileStream:=TFileStream.Create(InCludeTrailingBackSlash(ExtractFilePath(Application.Exename))+'Test.stm',fmCreate);
  Try
    SaveComponentToStream(FileStream,ListView1);
  Finally
    FileStream.Free;
    end;
end;

procedure TForm1.SaveComponentToStream(Stream: TStream;
  Component: TComponent);
begin
  Stream.WriteComponent(Component);
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  FileStream : TFileStream;
begin
  FileStream:=TFileStream.Create(InCludeTrailingBackSlash(ExtractFilePath(Application.Exename))+'Test.stm',fmOpenRead);
  Try
    LoadComponentFromStream(FileStream,ListView1);
  Finally
    FileStream.Free;
    end;
end;

procedure TForm1.LoadComponentFromStream(Stream: TStream;
  Component: TComponent);
begin
  Stream.ReadComponent(Component);
end;

end.
Die procedure SaveComponentToStream und LoadComponentFromStream speichern jede Komponente in einen Stream. D.h. deren published properties. Man kann über DefineProperties hier natürlich auch eingreifen.

Klicke imBeispiel erst auf "Load"

Siehe hierzu auch TCollection und TCollectionItem
Angehängte Dateien
Dateityp: zip zip_169.zip (188,1 KB, 14x aufgerufen)
I come from outer space to save the human race
  Mit Zitat antworten Zitat