Einzelnen Beitrag anzeigen

v2afrank

Registriert seit: 9. Mai 2005
Ort: Bocholt
575 Beiträge
 
Delphi XE2 Professional
 
#1

Streamen von Record

  Alt 19. Jan 2012, 15:15
Delphi-Version: 2006
In einem meiner Projekte benutze ich die JvDesignUtils um meine Formulare in eine Datei zu speichern. Das klappt auch ganz wunderbar. Jetzt wollte ich einen abgeleitetet Datentyp um ein Record ergänzen. Dieses Record wird aber nicht abgespeichert. Ich habe mal ein kleines Demoprogramm angehängt, was das machen sollte.
Hier mal der Code dazu
Delphi-Quellcode:
unit Main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,JvDesignUtils;
type TMeinTyp=(mt_Typ1,mt_Typ2,mt_Typ3);

type TMeinRecord=record
 MyBoolean:Boolean;
 Mystring:string;
 MyTyp:TMeinTyp;
end;
type
  TForm6 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    procedure SaveLayOutToFile(Filename:string);
    procedure LoadLayOutFromFile(Filename: string);
    procedure SaveForm;
  end;

 type TMyLabel=class (TLabel)
   private
    fmyboolean:Boolean;
    fMyRecord:TMeinRecord;
   public

    procedure ZeigeDich;
   published
    property MyBoolean:Boolean read fmyboolean write fmyboolean;
    property MyRecord:TMeinRecord read fMyRecord write fMyRecord;
 end;
var
  Form6: TForm6;

implementation

{$R *.dfm}
 procedure TForm6.SaveForm;
 var
 fFile: TFileStream;
 i: Integer;
 begin
 fFile := TFileStream.Create('C:\Test.txt', fmCreate);
 try
 for i :=0 to self.ComponentCount-1 do
 begin
 fFile.WriteComponent(self.Components[i]);
 end;
 finally
 fFile.Free;
 end;
 end;
 

procedure TForm6.Button1Click(Sender: TObject);
var
 ALabel:TMyLabel;
begin
 ALabel:=TMyLabel.Create(Self);
 ALabel.Parent:=self;
 ALabel.Left:=150;
 ALabel.Top:=50;
// ALabel.MyRecord.MyTyp:=mt_Typ2;
 ALabel.ZeigeDich;
end;

procedure TForm6.Button2Click(Sender: TObject);
begin
 SaveLayOutToFile('C:\Test2.txt');
end;

procedure TForm6.Button3Click(Sender: TObject);
begin
LoadLayOutFromFile('C:\Test2.txt');
end;

procedure TForm6.SaveLayOutToFile(Filename: string);
begin
    DesignSaveComponentToFile(self, Filename);

end;
procedure TForm6.LoadLayOutFromFile(Filename: string);
begin
    DesignLoadComponentFromFile(self, FileName, nil);
end;
 { TMyLabel }


procedure TMyLabel.ZeigeDich;
begin
 case MyRecord.MyTyp of
   mt_Typ1: Caption:='mt_Typ1';
   mt_Typ2: Caption:='mt_Typ2';
   mt_Typ3: Caption:='mt_Typ3';
 end;
end;

initialization
  registerclass(TMyLabel);
 finalization
  unregisterclass(TMyLabel);
end.
Die abgespeicherte Datei hat folgenden Inhalt
Delphi-Quellcode:
object Form6: TForm6
  Left = 176
  Top = 232
  ActiveControl = Button2
  Caption = 'Form6'
  ClientHeight = 364
  ClientWidth = 544
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  Position = poDesigned
  Visible = True
  PixelsPerInch = 96
  TextHeight = 13
  object TMyLabel
    Left = 150
    Top = 50
    Width = 42
    Height = 13
    Caption = 'mt_Typ1'
    MyBoolean = False
  end
  object Button1: TButton
    Left = 48
    Top = 48
    Width = 75
    Height = 25
    Caption = 'Erzeuge Label'
    TabOrder = 0
    OnClick = Button1Click
  end
  object Button2: TButton
    Left = 48
    Top = 79
    Width = 75
    Height = 25
    Caption = 'Speichern'
    TabOrder = 1
    OnClick = Button2Click
  end
  object Button3: TButton
    Left = 48
    Top = 110
    Width = 75
    Height = 25
    Caption = 'Laden'
    TabOrder = 2
    OnClick = Button3Click
  end
end
Wie man sieht wird Myboolean abgespeichert, aber nicht das Record. Kann mir einer von Euch sagen wo da mein Denkfehler ist ?
Danke
Angehängte Dateien
Dateityp: zip streamtest.zip (228,2 KB, 2x aufgerufen)
  Mit Zitat antworten Zitat