Autor Beitrag
Zuckerwatte
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Mi 03.09.03 12:43 
Hallo,

ich möchte mehere Instanzen der folgenden Klasse, die in einer PointerListe stehen in einen Stream schreiben bzw. hinteher in eine Datei oder in ein DB-Blobfeld speichern bzw wieder auslesen können.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
TRecht = class(TObject)
  Private
   FRechtNr    : Integer;
   FRechtName  : string;
   FRechtImage : TBitmap;
   function Get_RechtNr : Integer;
   procedure Set_RechtNr(const Value: Integer);
   function Get_RechtName : string;
   procedure Set_RechtName(const Value: string);
   function Get_RechtImage : TBitmap;
   procedure Set_RechtImage(const Value: TBitmap);
  Public
   Property RechtNr:Integer read Get_RechtNr write Set_RechtNr;
   Property RechtImage:TBitmap read Get_RechtImage write Set_RechtImage;
   Property RechtName:string read Get_RechtName write Set_RechtName;
   Constructor Create;
   destructor Destroy; override;
End;

Hat jemand eine Idee wie das funktionieren soll bzw. wie eine solche Save und Load - Routiene aussehen kann (mit Beispiel), da zum einen das Bitmap ja verschiedene Größen haben kann und zum anderen die Anzahl der Instanzen unterschiedlich sein kann.

Gruß
Zuckerwatte

Moderiert von user profile iconTino: Code- durch Delphi-Tags ersetzt.
barfuesser
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 324



BeitragVerfasst: Mi 03.09.03 16:21 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
procedure writeToFile(FileName: String);
var
  Datei: File;
  BitmapStream: TMemoryStream;
begin
  BitmapStream := TMemoryStream.Create;
  FRechtImage.saveToStream(BitmapStream);
   Assign(Datei);
  Rewrite(Datei, 1);
  BlockWrite(Datei, FRechtNr, SizeOf(FRechtNr));
  BlockWrite(Datei, FRechtName[1], length(FRechtName));
  BlockWrite(Datei, BitmapStream.Memory, BitmapStream.Size);
  CloseFile(Datei);
  FreeAndNil(BitmapStream);
end;


Achtung - nicht getestet! Nur um Dir eine mögliche Richtung aufzuzeigen.

barfuesser
kasi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 37

Win XP
D5 Ent
BeitragVerfasst: Mi 03.09.03 18:02 
Mein Vorschlag
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
procedure TRecht.LoadFromStream(Stream: TStream);
var
  StrLen : integer;
  
begin
Stream.Read(FRechtNr, SizeOf(FRechtNr));
Stream.Read(StrLen, SizeOf(Integer));
SetLength(FRechtName, StrLen);
Stream.Read(FRechtName[1], StrLen);
FRechtImage.LoadFromStream(Stream);
end;

procedure TRecht.SaveToStream(Stream: TStream);
var
  StrLen: integer;
  
begin
Stream.Write(FRechtNr, SizeOf(FRechtNr));
StrLen := Length(FRechtName);
Stream.Write(StrLen, SizeOf(Integer));
Stream.Write(FRechtName[1], Length(FRechtName));
FRechtImage.SaveToStream(Stream);
end;

Ich habe es nur mit einem Objekt getestet. Man sollte aber auch mehrere hintereinander schreiben und Lesen können.

KASI

Moderiert von user profile iconTino: Delphi-Tags hinzugefügt.